本教程主要用于CentOS7操作系统如何安装配置Docker环境。
一.安装前确认
1.1 系统内核版本
Docker 官方建议 CentOS 系统的内核版本高于 3.10 ,我们查看当前CentOS 版本是否支持 Docker 。
# uname -r
3.10.0-1160.45.1.el7.x86_64
虽然没有高于3.10,但是也还是可以安装的。
1.2 检查是否安装过旧版本
# rpm -qa|grep docker
如果有,请处理好数据后卸载。
# yum remove docker docker-common docker-selinux docker-engine
1.3 yum升级系统包
-
此步非必须
-
一般是云平台安装后是最新的,如果需要升级,请使用以下命令。
# yum -y update
1.4 设置yum源
有些系统可能没有yum-config-manager命令,需要提前安装。
# yum install -y yum-utils
更新本地镜像源:
# yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
为了提升下载库的速度,需要配置国内镜像。比如腾讯云用它自己的镜像
# sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
将软件包信息提前在本地索引缓存 ,用来提高搜索安装软件的速度。
# sudo yum makecache fast
如果是centos8系统,不能使用此命令,要用这个命令
# dnf makecache
二.安装
2.1 使用root用户进行一键安装
# yum install -y docker-ce
2.2 无根模式说明
以非root用户运行是在Docker Engine v19.03
中作为实验特性引入的,稳定版是Docker Engine v20.10
,在无根模式下,守护进程和容器都不使用根权限运行,提高了安全问题。
下面会提到如何使用非root用户运行。
2.3 启动服务
重新加载某个服务的配置文件,启动
# systemctl daemon-reload && systemctl start docker
2.4 查看进程
# ps -ef|grep docker
root 31828 1 3 15:43 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 31968 13692 0 15:43 pts/1 00:00:00 grep --color=auto docker
2.5 验证docker
# docker version
Client: Docker Engine - Community
Version: 24.0.7
API version: 1.43
Go version: go1.20.10
Git commit: afdd53b
Built: Thu Oct 26 09:11:35 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 24.0.7
API version: 1.43 (minimum version 1.12)
Go version: go1.20.10
Git commit: 311b9ff
Built: Thu Oct 26 09:10:36 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.26
GitCommit: 3dd1e886e55dd695541fdcd67420c2888645a495
runc:
Version: 1.1.10
GitCommit: v1.1.10-0-g18a0cb0
docker-init:
Version: 0.19.0
GitCommit: de40ad0
2.6 开机自启动Docker服务
# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
查看是否开机自启动
# systemctl list-unit-files|grep docker
docker.service enabled
docker.socket disabled
enabled是开机启动,disabled是开机不启动
三.防火墙
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
#安装iptables
yum install -y iptables
四.Docker配置文件
当您下载安装的Docker Version不低于1.10时,建议通过daemon config进行配置。
如果你还没成功启动过Docker服务,你可以手工先创建配置文件。
# mkdir -p /etc/docker/
# touch /etc/docker/daemon.json
- 使用配置文件/etc/docker/daemon.json,配置Docker一些常用配置。
# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
],
"bip": "172.18.0.1/16",
"data-root": "/data01/docker"
}
配置项说明:
registry-mirrors
:镜像加速器,提升下载镜像速度。可配置多个bip
:容器的IP网段,这里主要是有时候网段冲突,为避免生成的docker0网卡导致本地路由冲突,可以进行自定义配置。data-root
: 镜像、容器的存储路径,默认是/var/lib/docker
。旧版本是使用graph
,具体根据你的版本来选择配置项参数名。
五.Docker命令
- 停止服务
# service docker stop
- 启动服务
# service docker start
- 查看镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
- 查看容器
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 拉取镜像
# docker pull 镜像名
- 运行容器
# docker run -d --name 容器名称 -p 20086:10086 -v /opt/MrDoc:/app/MrDoc 镜像名
说明:
- 对外的端口是20086,内部端口10086
- 宿主机的地址
/opt/MrDoc
映射到内部主机/app/MrDoc
- 查看容器
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89e8e96b96cd zmister/mrdoc:v2 "sh docker_mrdoc.sh" 2 minutes ago Created 0.0.0.0:20086->10086/tcp, :::10086->10086/tcp mrdoc
- 停止容器
$ docker ps -a|grep mrdoc
89e8e96b96cd zmister/mrdoc:v2 "sh docker_mrdoc.sh" 58 seconds ago Created 0.0.0.0:10086->10086/tcp, :::10086->10086/tcp mrdoc
第一列的名字进行stop
$ docker stop 89e8e96b96cd
或者容器名停止
$ docker stop mrdoc
- 删除容器
docker ps -a第一列的名字进行删除
$ docker rm 89e8e96b96cd
或者容器名进行删除
$ docker stop mrdoc
- 删除镜像
docker images第3列(IMAGE ID)值进行删除
$ docker rm 07d2bcf33f96
或者容器名进行删除
$ docker stop zmister/mrdoc
- 查看容器日志
docker ps -a第一列的名字进行查看
$ docker logs 89e8e96b96cd
或者容器名进行查看
$ docker logs mrdoc
- 查看容器最后10行
$ docker logs 容器名 |tail -10
- 进入容器
$ docker exec -it 容器名 /bin/sh
六. 无根模式(非root模式)使用Docker
以下内容还在探索中,仅供参考。
无根模式允许以非root用户的身份运行Docker守护进程和容器,以减少守护进程和容器运行时中的潜在漏洞。
无根模式即使在安装Docker守护进程时也不需要根权限,只要满足先决条件即可。
6.1 先决条件
-
必须在主机上安装
newuidmap
和newgidmap
。这些命令由大多数发行版上的uidmap包提供。 -
/etc/subuid
和/etc/subgid
应该至少包含65,536个用户的下级UIDs/GIDs。在下面的示例中,用户testuser
拥有65,536个从属UIDs/GIDs(231072-296607)。 -
将
user.max_user_namespaces=28633
添加到/etc/sysctl.conf
文件中(或者添加到/etc/sysctl.d
),然后运行命令sudo sysctl --system
-
systemctl --user
默认情况下不工作。在没有systemd的情况下直接运行dockerd-rootless.sh
。
6.2 限制条件
- 仅支持以下存储驱动:
overlay2
(仅当运行5.11或更高版本的内核,或 Ubuntu-flavored的内核,或 Debian-flavored的内核时)fuse-overlayfs
(仅当运行内核4.18或更高版本,并且安装了fuse-overlayfs
)btrfs
(只有在内核4.18或更高版本运行时,或者~/.local/share/docker
是用user_subvol_rm_allowed
挂载选项挂载的)vfs
-
只有在使用Cgroup v2和systemd运行时,才支持Cgroup。
-
不支持以下特性:
AppArmor Checkpoint Overlay network Exposing SCTP ports
-
公开特权TCP/UDP端口(< 1024)
-
IPAddress
显示在docker inspect
中,命名空间在RootlessKit的网络命名空间中。这意味着如果没有nsenter
-ing到网络命名空间,主机就无法访问IP地址。 -
主机网络(
docker run --net=host
)的命名空间也在RootlessKit中。 -
不支持NFS作为docker"data-root"挂载。这个限制并不特定于无根模式。
6.3 部署启动
1.可以新建一个专门的系统用户
# useradd dockeruser
2.普通用户查看脚本
$ which dockerd-rootless-setuptool.sh
/bin/dockerd-rootless-setuptool.sh
3.普通用户执行脚本安装命令
$ dockerd-rootless-setuptool.sh install
[INFO] systemd not detected, dockerd-rootless.sh needs to be started manually:
PATH=/bin:/sbin:/usr/sbin:$PATH dockerd-rootless.sh
[INFO] Creating CLI context "rootless"
Successfully created context "rootless"
[INFO] Make sure the following environment variables are set (or add them to ~/.bashrc):
# WARNING: systemd not found. You have to remove XDG_RUNTIME_DIR manually on every logout.
export XDG_RUNTIME_DIR=/home/dockeruser/.docker/run
export PATH=/bin:$PATH
export DOCKER_HOST=unix:///home/dockeruser/.docker/run/docker.sock
4.设置环境变量
$ vim ~/.bash_profile
export XDG_RUNTIME_DIR=/home/dockeruser/.docker/run
export PATH=/bin:$PATH
export DOCKER_HOST=unix:///home/dockeruser/.docker/run/docker.sock
5.生效环境变量
$ source ~/.bash_profile
6.root停止服务
# service docker stop
Redirecting to /bin/systemctl stop docker.service
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
7.普通用户启动服务
$ nohup /bin/dockerd-rootless.sh &
日志会放在家目录下nohup.out。
如果需要重启docker服务,把这个用户下的进程干掉,再启动服务。
本文没有授权给任何组织、企业和个人转载,未经作者允许禁止转载!
欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。