如何以特权模式运行Docker CentOS?

Docker

1 基础知识

1.1 系统的简介

CentOS Linux是社区支持的发行版
CentOS Linux源于Red Hat免费提供给公众使用的Red Hat Enterprise Linux(RHEL)
CentOS Linux旨在与RHEL在功能上兼容
CentOS Linux主要更改软件包以删除上游供应商的品牌和插图
CentOS Linux是免费的,可以免费重新分发
CentOS Linux每个版本最多可维护10年(随Red Hat发布源的安全更新支持间隔时间不同而不同)
CentOS Linux大约每2年发布一次新的版本
CentOS Linux每个版本都会定期更新(大约每6个月更新一次)以支持更新的硬件
CentOS Linux由此可知是一个安全、低维护、可靠、可预测和可复制的Linux环境

1.2 Docker容器与服务的关系

Docker容器的设计里面是容器内部不运行后台服务
Docker容器本身就是宿主机上独立运行的主进程
Docker容器可以理解为运行服务的应用进程
Docker容器生命周期是围绕容器的主进程存在
Dcoker容器正确使用方法是将服务运行于容器环境的前台

1.3 Systemd的介绍

Systemd当前成为管理主流Linux服务的管理器
Systemd管理系统服务器程序时需要特权去访问Linux内核

1.4 特权模式的介绍

容器并非一个完整的操作系统
容器的本质是一个文件系统
容器默认启动的程序只以普通用户的身份和权限访问Linux内核(没有任何特权)
基于以上,容器环境使用Systemd就需要使用“privileged”参数使赋以容器特权的权限方可使用

2 最佳实践

2.1 部署Docker集群

如果你尚未部署Docker集群环境,请参阅如下章节部署,

如何部署Docker生产环境?

2.2 部署前的准备

In docker01

cd /data/docker/images/
docker load -i centos_centos7.3.1611.tar
docker tag centos:centos7.3.1611 docker01.cmdschool.org:5000/centos:centos7.3.1611
docker push docker01.cmdschool.org:5000/centos:centos7.3.1611
docker image rm centos:centos7.3.1611

另外,安装包的离线下载请在能上网的docker环境的机器上使用如下命令,

docker pull centos:centos7.3.1611
docker save centos:centos7.3.1611 -o centos_centos7.3.1611.tar

另外,其他版本请从以下链接下载,
https://hub.docker.com/_/centos

2.3 运行centos

2.3.1 尝试特权模式运行容器

docker run -d --name centos73 --privileged=true docker01.cmdschool.org:5000/centos:centos7.3.1611 /usr/sbin/init

以上使用特权(privileged)模式运行容器,赋予系统启动服务的能力,避免启动服务时出现如下错误提示,

Failed to get D-Bus connection: Operation not permitted

2.3.2 登录容器

docker exec -it centos73 /bin/bash

注:以上使用命令登录容器后

2.3.3 安装常见的软件包

yum install -y net-tools iproute

2.3.4 配置SSHD服务

yum install -y openssh-server

软件包安装好,可使用如下命令启动服务并设置默认启动,

systemctl start sshd.service
systemctl enable sshd.service

启动服务后,建议使用如下命令确认服务的端口已经起来,

 netstat -antp

可见如下显示,

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      183/sshd
tcp        0      0 172.17.0.2:22           172.17.0.1:54258        ESTABLISHED 362/sshd: root@pts/
tcp6       0      0 :::22                   :::*                    LISTEN      183/sshd

另外,SSH服务需要修改root密码才允许该用户登录,

passwd

2.3.5 查看当前容器的IP

ip a

可见如下显示,

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
500: eth0@if501:  mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

2.3.6 退出容器并测试登录

exit
ssh 172.17.0.2

2.4 保存容器的更改

2.4.1 查询容器的containerID

docker container ls | grep centos7.3 | cut -d" " -f1

可见如下显示,

d23cc7a96035

2.4.2 保存当前容器的状态

docker commit d23cc7a96035 docker01.cmdschool.org:5000/sshd:centos7.3.1611

然后,使用如下命令查询新的镜像,

docker images

可见如下显示,

REPOSITORY                                        TAG                        IMAGE ID            CREATED             SIZE
docker01.cmdschool.org:5000/sshd                  centos7.3.1611             9c6accff4795        7 minutes ago       289MB
docker01.cmdschool.org:5000/portainer/agent       linux-amd64-1.6.0-alpine   82e35dbc0c04        6 weeks ago         75.3MB
docker01.cmdschool.org:5000/portainer/portainer   alpine                     3b8c73d25ad3        6 weeks ago         84.4MB
registry                                          2.7.1                      2d4f4b5309b1        2 months ago        26.2MB
docker01.cmdschool.org:5000/centos                centos7.3.1611             c5d48e81b986        18 months ago       192MB

参阅文档
=====================

官方参阅
————
https://hub.docker.com/_/centos

文件兼容性参考
————–
https://docs.docker.com/compose/compose-file/

特权模式选项
———–
https://forums.docker.com/t/ignoring-unsupported-options-privileged/57627

非官方参阅
—————-
https://blog.csdn.net/zhenliang8/article/details/78330658

没有评论

发表评论

Docker
如何打包Docker Nginx?

1 前言 一个问题,一篇文章,一出故事。 由于docker hub原版本的nginx镜像过于精简,于 …

Docker
如何打包Docker MAC-Telnet?

1 基础知识 一款可以使用MikroTik RouterOS MAC-Telnet协议连接Mikro …

Docker
如何部署Docker Unifi-WiFi?

1 前言 一个问题,一篇文章,一出故事。 笔者Unifi-WiFi想要迁移至docker环境,于是产 …