Docker实践
yum安装
YUM源可以使用官方YUM源、清华大学开源镜像站配置YUM源,也可以使用阿里云开源镜像站提供的YUM源,建议选择使用阿里云开源镜像站提供的YUM源,原因速度快。
地址: https://developer.aliyun.com/mirror/
我们安装ce版
https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.655e1b11Z3g4Hj
查看os信息
shell
[root@centos133 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
环境要求
内核要求
shell
uname -r
> 3.10.0-514.el7.x86_64
3.10.0以上
关闭防火墙
shell
firewall-cmd --state
> running
在CentOS 7及其以上版本中,firewalld
是默认的防火墙,你可以通过以下命令关闭它并使其在重启后依然保持关闭状态:
- 关闭防火墙:
bash
sudo systemctl stop firewalld
- 禁用防火墙服务,使其在重启后不会自动启动:
bash
sudo systemctl disable firewalld
shell
firewall-cmd --state
> not running
关闭selinux
shell
sestatus
SELinux (Security Enhanced Linux) 是一个用于实施访问控制策略的 Linux 内核安全模块。虽然 SELinux 提供了增强的安全控制,但是也给系统配置和管理增加了一些复杂性。如果不正确地配置 SELinux,可能会阻止应用程序或服务正常工作。
要在CentOS 7中禁用 SELinux,按照以下步骤进行:
- 打开 SELinux 配置文件:
bash
sudo vi /etc/selinux/config
- 找到
SELINUX
行,将其值更改为disabled
:
bash
SELINUX=disabled
然后保存并关闭文件。
此处眼睛要仔细,很可能enable就在前面,这会导致无法关闭selinux,已淌过坑,不谢
- 重启系统以使更改生效:
bash
sudo reboot
- 重启后,你可以运行以下命令确认 SELinux 已被禁用:
bash
sestatus
输出应显示 SELinux status: disabled
,表明 SELinux 已被禁用。
下载
shell
# 在docker host上使用 wget下载到/etc/yum.repos.d目录中即可。
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 验证是否可用
yum repolist
status列,软件包数量>0即可
shell
ls /etc/yum.repos.d/
# 直接安装docker-ce,此为docker daemon,所有依赖将被yum自动安装,含docker client等。
yum -y install docker-ce
以下是官方步骤,不一定非得执行,可以参考.
shell
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
配置启动文件
配置Docker daemon
为什么修改启动文件?
- 避免docker对宿主机造成影响比如防火墙
由于Docker使用过程中会对Centos操作系统中的Iptables防火墙中的FORWARD链默认规划产生影响及需要让Docker Daemon接受用户自定义的daemon.json文件,需要要按使用者要求的方式修改。
- 定义自己调用的服务:如镜像仓库等等
文件位置
shell
vim /usr/lib/systemd/system/docker.service
删除sock
shell
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
防火墙
shell
ExecStartPost=/sbin/iptables -P FORWARD ACCEPT
重新加载
shell
# 重启加载daemon文件
systemctl daemon-reload
启动
shell
# 启动docker daemon
systemctl start docker
# 设置开机自启动
systemctl enable docker
验证版本
使用Docker 客户端
shell
# 使用docker version客户端命令查看已安装docker软件版本
docker version
涉及防火墙
避免docker对防火墙造成影响,有时候划线部分会变成Reject使网络不通
二进制安装
官方不建议此种部署方式,主因为不能自动更新,在条件有限制的情况下使用。
二进制安装参考网址:https://docs.docker.com/engine/install/binaries/
shell
获取二进制文件,此文件中包含dockerd与docker 2个文件。
# wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
解压下载的文件
# tar xf docker-20.10.9.tgz
查看解压出的目录
# ls docker
containerd containerd-shim-runc-v2 docker docker-init runc
containerd-shim ctr dockerd docker-proxy
安装解压后的所有二进制文件
# cp docker/* /usr/bin/
运行Daemon
# dockerd &
会有大量的信息输出,停止后,直接回车即可使用。
如果您需要使用其他选项启动守护程序,请相应地修改上述命令或创建并编辑文件`/etc/docker/daemon.json` 以添加自定义配置选项。
确认是否可以使用docker客户端命令
# which docker
/usr/bin/docker
使用二进制安装的docker客户端
# docker version
shell
获取二进制文件,此文件中包含dockerd与docker 2个文件。
# wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
shell
解压下载的文件
# tar xf docker-20.10.9.tgz
查看解压出的目录
# ls docker
containerd containerd-shim-runc-v2 docker docker-init runc
containerd-shim ctr dockerd docker-proxy
其他
ExecStart=/usr/bin/dockerd
docker.service文件中ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
这个是什么意思?有什么作用
这行指令在 Docker 服务启动时被执行。解读这行指令如下:
-
ExecStart
: 这是 Systemd 的一个指令,用来定义当服务启动时要执行的命令。 -
/usr/bin/dockerd
: 这是 Docker 守护进程(dockerd)的完整路径,它是 Docker 运行的主要进程,用于管理 Docker 容器。 -
-H fd://
: 这是 Docker 守护进程的一个选项,-H
用来定义 Docker 守护进程监听的地址。fd://
是一个特殊的监听地址,用于与 Systemd 进行集成,让 Systemd 负责处理 Docker 守护进程的 socket。 -
--containerd=/run/containerd/containerd.sock
: 这是 Docker 守护进程的另一个选项,定义了 Docker 守护进程与 containerd 守护进程通信的 socket 的路径。containerd 是 Docker 的一个组件,用于管理容器的生命周期。
所以这行命令的作用是,当 Docker 服务启动时,启动 Docker 守护进程,让它监听 Systemd 提供的 socket,并通过指定的 socket 与 containerd 守护进程通信。
-H fd://
和 --containerd=/run/containerd/containerd.sock
这两个参数指定了 Docker 守护进程与其它服务(例如 systemd 和 containerd)之间的通信方式。在大多数情况下,这两个参数是有用的,应该保留。它们让 Docker 更好地与宿主机的系统集成,提高了 Docker 的稳定性和效率。
然而,在某些特殊的配置或使用场景中,你可能需要修改这些参数或完全移除它们。比如:
-
如果你想要 Docker 守护进程监听 TCP 端口,以便从远程管理 Docker,你需要添加
-H tcp://<ip>:<port>
参数。这可能需要你移除-H fd://
参数,因为 Docker 守护进程只能监听一种类型的 socket。 -
如果你想要 Docker 守护进程直接与 Docker 的 containerd 组件通信,而不是通过 socket 文件,你可以移除
--containerd=/run/containerd/containerd.sock
参数。
注意,这些修改可能会增加 Docker 的安全风险,降低 Docker 的稳定性和效率,因此只有在你完全理解这些参数的含义,并且确定你需要这样做时,才应该进行这些修改。