Docker
Docker 是一个开源的容器化平台,通过容器技术实现应用的打包、分发和运行。它使开发者能够以一致的环境快速部署和扩展应用,无需关心底层系统差异。Docker 提供了轻量级、高性能的虚拟化方式,支持镜像管理和容器编排,是 DevOps 和微服务架构的核心工具之一。
安装Docker
下载软件包
wget https://download.docker.com/linux/static/stable/x86_64/docker-27.3.1.tgz安装依赖
sudo yum -y install iptables procps xz配置内核网络过滤
加载桥接模块
echo "br_netfilter" | sudo tee /etc/modules-load.d/br_netfilter.conf
sudo modprobe br_netfilter
lsmod | grep br_netfilter2
3
启动内核的网络过滤(netfilter)模块
sudo tee /etc/sysctl.d/99-docker.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
EOF
sudo sysctl --system2
3
4
5
解压并安装软件包
tar -zxvf docker-27.3.1.tgz
sudo cp -v docker/* /usr/bin/
rm -rf docker/2
3
编辑配置文件
注意设置 group 运行docker的组,他可以修改 /var/run/docker.sock 的所属组,以便该组下的用户可以访问docker。如果没有其他用户组设置为root即可。
镜像加速器registry-mirrors:如果无法拉取镜像了,可以考虑换加速器,例如华为云或者阿里云。这里以华为云为例:容器镜像服务→镜像资源→镜像中心→镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<"EOF"
{
"bip": "10.128.0.1/16",
"group": "ateng",
"data-root": "/data/service/container",
"features": { "buildkit": true },
"log-driver": "json-file",
"log-opts": {
"max-size": "200m",
"max-file": "5"
},
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["registry.lingo.local", "registry.ateng.local", "192.168.1.0/24"],
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
使用systemd管理服务
编辑 docker.service
sudo tee /etc/systemd/system/docker.service <<"EOF"
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --config-file=/etc/docker/daemon.json
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=10
Restart=always
StartLimitBurst=3
StartLimitInterval=100s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
EOF2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now docker2
查看服务
docker info配置自动补全
安装 bash-completion
sudo yum -y install bash-completion
source /usr/share/bash-completion/bash_completion2
下载 bash_completion
curl -L -o docker_bash_completion https://raw.githubusercontent.com/docker/cli/refs/tags/v27.3.1/contrib/completion/bash/docker配置自动补全
sudo cp docker_bash_completion /etc/bash_completion.d/docker
source <(cat /etc/bash_completion.d/docker)2
安装buildx
builddx是一个Docker CLI插件,用于扩展BuildKit的构建功能。
下载插件
wget https://github.com/docker/buildx/releases/download/v0.19.2/buildx-v0.19.2.linux-amd64安装插件
sudo mkdir -p /usr/local/libexec/docker/cli-plugins/
sudo cp buildx-v0.19.2.linux-amd64 /usr/local/libexec/docker/cli-plugins/docker-buildx
sudo chmod +x /usr/local/libexec/docker/cli-plugins/docker-buildx2
3
验证安装
$ docker buildx version
github.com/docker/buildx v0.19.2 1fc5647dc281ca3c2ad5b451aeff2dce84f1dc492
安装Docker Compose
下载软件包
wget https://github.com/docker/compose/releases/download/v2.31.0/docker-compose-linux-x86_64安装软件包
sudo mkdir -p /usr/local/libexec/docker/cli-plugins/
sudo cp docker-compose-linux-x86_64 /usr/local/libexec/docker/cli-plugins/docker-compose
sudo chmod +x /usr/local/libexec/docker/cli-plugins/docker-compose
sudo ln -s /usr/local/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose2
3
4
查看版本
$ docker compose version
Docker Compose version v2.31.0
$ docker-compose version
Docker Compose version v2.31.02
3
4
客户端远程访问
使用SSH
前提:配置免秘钥
使用默认参数
docker -H ssh://root@10.244.172.126 ps指定其他参数
编辑或创建你的 ~/.ssh/config 文件,添加如下内容:
Host mydockerhost
HostName 10.244.172.126
Port 22
User root
IdentityFile /opt/id_rsa2
3
4
5
然后使用如下命令:
docker -H ssh://mydockerhost ps使用API
将下面的 配置远程API
配置远程API
启用 Docker 远程 API
Docker 默认只监听本地 Unix socket(/var/run/docker.sock),为了使用远程 API,你需要让它监听 TCP 端口。
修改 Docker 配置
编辑 /etc/docker/daemon.json,添加以下内容:
⚠️ 注意:使用
tcp://0.0.0.0:2375是 不安全的(没有 TLS 加密),建议仅用于测试或在内网中使用。生产环境应配置 TLS。
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}2
3
然后重启 Docker:
sudo systemctl restart docker验证
curl http://localhost:2375/version使用远程的Docker
使用参数
docker -H tcp://<远程主机IP>:2375 ps使用环境变量
export DOCKER_HOST=tcp://192.168.1.100:2375
docker ps2
配置TLS
参考 openssl创建证书 文件生成证书和秘钥
- CA 根证书:ateng-ca.crt
- 服务端证书:ateng-server.crt
- 服务端私钥:ateng-server.key
mkdir -p /etc/docker/certs
cp ateng-ca.crt ateng-server.crt ateng-server.key /etc/docker/certs2
修改Docker配置文件
在 Docker 服务器端,编辑 /etc/docker/daemon.json 来启用 TLS 和监听 HTTPS(而非 HTTP)。例如:
{
"hosts": [
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2376"
],
"tlsverify": true,
"tlscacert": "/etc/docker/certs/ateng-ca.crt",
"tlscert": "/etc/docker/certs/ateng-server.crt",
"tlskey": "/etc/docker/certs/ateng-server.key"
}2
3
4
5
6
7
8
9
10
其中:
tlsverify: 启用 TLS 验证tlscacert: CA证书路径tlscert: 服务器证书路径tlskey: 服务器密钥路径
重启 Docker 服务
sudo systemctl restart docker客户端使用远程的TLS的Docker
拷贝证书到客户端并重命名
ca.pem(CA证书)cert.pem(客户端证书)key.pem(客户端私钥)
mkdir -p /etc/ssl/docker/ca
cp ateng-ca.crt /etc/ssl/docker/ca/ca.pem
cp ateng-server.crt /etc/ssl/docker/ca/cert.pem
cp ateng-server.key /etc/ssl/docker/ca/key.pem2
3
4
使用环境变量指定远程Docker
export DOCKER_TLS_VERIFY="1"
export DOCKER_CERT_PATH="/etc/ssl/docker/ca"
export DOCKER_HOST="tcp://10.244.172.126:2376"
docker images2
3
4
使用命令参数定远程Docker
docker --tlsverify \
--tlscacert=/etc/ssl/docker/ca/ca.pem \
--tlscert=/etc/ssl/docker/ca/cert.pem \
--tlskey=/etc/ssl/docker/ca/key.pem \
-H=tcp://10.244.172.126:2376 \
images2
3
4
5
6