CentOS搭建:Docker

12/31/2024 LinuxCentOS

目录


参考:


# CentOS搭建:Docker

# 一、Docker

# 概要说明

Docker 分为 CE 和 EE 两大版本:

  • CE: 即社区版,免费,支持周期 7 个月
  • EE: 即企业版,强调安全,付费使用,支持周期 24 个月。

# 常用命令

启停docker

# 守护进程重启
sudo systemctl daemon-reload

# 启动 docker
sudo service docker start
# 或
sudo systemctl start docker
 
# 重启 docker
sudo service docker restart
# 或
sudo systemctl restart docker

# 停止 docker
sudo docker service docker stop
# 或
sudo docker systemctl stop docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

镜像操作

# 搜索远程镜像
docker search 镜像名称

# 查看镜像列表
docker images 
docker image ls

# 拉取镜像
docker image pull 仓库名称/镜像名称
docker pull 仓库名称/镜像名称

# 删除指定镜像
docker image rm 镜像名或镜像ID
docker rmi 镜像ID

# 镜像打包备份
docker save -o 保存的文件名 镜像名
# 镜像解压
docker load -i 文件路径/备份文件
 
# 导出镜像
docker save -o 导出位置 源镜像名/源镜像ID
# 导入镜像
docker l oad -i 镜像名称
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

镜像列表说明:

  • REPOSITORY:镜像所在的仓库名称
  • TAG:镜像标签
  • IMAGEID:镜像ID
  • CREATED:镜像的创建日期(不是获取该镜像的日期)
  • SIZE:镜像大小

容器操作

# 创建容器
docker run [option] 镜像名 [向启动容器中传入的命令]

# 容器中运行镜像
docker run -di --name=容器名称 仓库名称/镜像名称
# 交互式容器
docker run -it --name=ubuntu1 ubuntu /bin/bash
# 开启守护式容器
docker run -dit --name=ubuntu2 ubuntu
1
2
3
4
5
6
7
8
9

可选参数:

  • -i 表示以交互模式运行容器。
  • -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
  • --name 为创建的容器命名。
  • -v 表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
  • -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
  • -p 表示端口映射,即宿主机端口:容器中端口。
  • --network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。
# 查看容器
docker ps [OPTIONS]
1
2

可选参数:

  • -a 显示所有的容器,包括未运行的。
  • -f 根据条件过滤显示的内容。
  • --format 指定返回值的模板文件。
  • -l 显示最近创建的容器。
  • -n 列出最近创建的n个容器。
  • --no-trunc 不截断输出。
  • -q 静默模式,只显示容器编号。
  • -s 显示总的文件大小。
# 查看所有的容器
docker container ls --all
# 查看正在运行的容器
docker container ls
# 查看容器
docker ps -a

# 进入到容器内部交互环境
docker exec -it 容器名或容器ID

# 启动容器
docker container start 容器名或容器ID

#停止指定容器
docker container stop 容器名或容器ID
docker stop container_id 
 
# 销毁容器
docker container kill 容器名或容器ID

# 删除指定容器
docker container rm 容器名或容器ID
docker rm container_id

# 导出容器
docker export -o 导出位置 容器名或容器ID
# 导入容器
docker import 容器名称 重命容器名

# 将容器制作成镜像
docker commit 容器名 镜像名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

挂载操作

# 查看本地挂载的文件。
docker volume ls
# 查看具体的真实地址
docker volume inspect volume-name
1
2
3
4

# 环境依赖

软件/系统 版本 架构 包名 备注
Linux,要求内核不低于3.10 CentOS7.X x86_64 docker-27.0.3.tgz (opens new window) 官网下载 (opens new window)

# 程序安装

# 重置初始

# 查看内核版本
uname -r
1
2
# 更新 yum 包(生产环境中此步操作需慎重!!!)
yum -y update
1
2

注意:

  • yum -y update:升级所有包同时也升级软件和系统内核;
  • yum -y upgrade:只升级所有包,不升级软件和系统内核
# 卸载旧版本(如果之前安装过的话)
yum remove docker docker-ce docker-common \
           docker-client docker-client-latest \
           docker-latest docker-latest-logrotate docker-logrotate \
           docker-selinux docker-engine-selinux docker-engine
1
2
3
4
5

# 安装依赖

设置国内YUM源

# 安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
1
2

说明:yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖

# 安装程序

# 离线安装
# 解压缩包
tar -zxvf docker-27.0.3.tgz -C /soft
# 将解压得到的文件复制到 /usr/bin目录下
cp docker/* /usr/bin/
1
2
3
4
# 创建或编辑docker服务
vi /etc/systemd/system/docker.service
1
2
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
 
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
 
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#添加文件可执行权限
chmod +x /etc/systemd/system/docker.service
#重新加载配置文件
systemctl daemon-reload
#启动Docker
systemctl start docker
#查看docker启动状态
systemctl status docker
#查看启动容器
docker ps
#设置开机自启动
systemctl enable docker.service
#查看docker开机启动状态 enabled:开启, disabled:关闭
systemctl is-enabled docker.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 在线安装
# 查看可用版本
yum list docker-ce --showduplicates | sort -r
1
2
# 选择一个版本并安装:`yum install docker-ce-版本号`
yum -y install docker-ce-18.06.3.ce-3.el7
1
2
#查看docker版本
docker --version
1
2

通过 yum 的方式安装 Docker,默认的存储位置是 /var/lib/docker,默认的 pid 存放位置是 /var/run/docker.pid

# 启动程序

# 启动 Docker
systemctl start docker
# 查看docker状态
systemctl status docker
# 开机自启
systemctl enable docker
# 关闭docker
systemctl stop docker
# 重启docker
systemctl restart docker 
1
2
3
4
5
6
7
8
9
10

# 配置HTTP代理

# 创建或编辑
mkdir -p /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/http-proxy.conf
1
2
3
[Service]
Environment="HTTP_PROXY=http://your-proxy-address:your-proxy-port/"
Environment="HTTPS_PROXY=https://your-proxy-address:your-proxy-port/"
Environment="NO_PROXY=localhost,127.0.0.1,localaddress,.localdomain.com"
1
2
3
4
# 重新加载配置
systemctl daemon-reload
# 重启docker
systemctl restart docker 
# 查看配置
docker info
1
2
3
4
5
6

# 配置镜像源

注意:若使用的是某公司的云服务器,那么强烈建议使用该公司提供的镜像源, 以获取极致超速的体验。

以阿里云为示例进行配置:阿里云镜像源需要注册后进行分配,地址为: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors(=>镜像中心 => 镜像加速器),https://0fe961jo.mirror.aliyuncs.com即为阿里云分配的个人镜像源。

# 创建或编辑
vi /etc/docker/daemon.json
1
2
# 配置镜像源
{
  "registry-mirrors": ["https://0fe961jo.mirror.aliyuncs.com"]
}
1
2
3
4
# 重新加载配置
systemctl daemon-reload
# 重启docker
systemctl restart docker 
1
2
3
4

其他国内镜像源:

  • 腾讯云:https://mirror.ccs.tencentyun.com
# 检查镜像源的可用性

以通过简单的 Docker 命令检查源的可用性为示例:

# 从 Docker Hub 下载 hello-world镜像
docker pull hello-world
1
2

如果源可用,您将看到如下输出:

Using default tag: latest
latest: Pulling from library/hello-world
...
Downloaded newer image for hello-world:latest
1
2
3
4

如果源不可用,例如由于网络问题,将看到类似于以下错误的信息:

Error response from daemon: pull access denied for hello-world, repository does not exist or may require 'docker login'
1

# 自定义卷的路径

Linux系统下,Docker 卷默认的存储路径: /var/lib/docker/volumes/ ,所有卷的元数据和数据文件均在此路径内管理‌。例如创建名为 test 的卷,实际路径为 /var/lib/docker/volumes/test/_data

# 查看默认路径

通过 docker info 命令可查看 Docker 的存储根路径(Docker Root Dir),其中 volumes 子目录即为卷的默认存储位置‌

docker info | grep "Docker Root Dir"
1
# 输出示例
Docker Root Dir: /var/lib/docker
1
2
# 修改默认路径

为避免系统盘空间不足,可修改 Docker 的 data-root 配置:

# 停止 Docker 服务
sudo systemctl stop docker
# 迁移数据
sudo rsync -aP /var/lib/docker/ /新路径
1
2
3
4

修改配置文件‌ /etc/docker/daemon.json,添加:

{
  "data-root": "/新路径"
}
1
2
3
# 重启 Docker
sudo systemctl start docker
1
2

修改后,新创建的卷将存储到新路径下的 volumes 目录中‌

# 图像化界面

# Portainer

Portainer是一个轻量级的docker环境管理UI,可以用来管理docker宿主机和docker swarm集群。由GO语言编写的,提供状态显示、应用模板快速部署、对于Docker(容器、镜像、网络、数据卷)的基本操作、日志显示、容器控制台等功能。

# 查询当前有哪些Portainer镜像
docker search portainer
1
2

注意:从2020年6月1日起,Docker官方宣布停止对Docker Hub的搜索API的支持,这意味着**docker search命令不再可用**。

# 单机版下载镜像以及运行(英文版)
# 拉取Portainer镜像
docker pull docker.io/portainer/portainer
1
2
# 启动Portainer容器
docker run -d \
           -p 9999:9000  \
           --restart=always \
           -v /var/run/docker.sock:/var/run/docker.sock \
           --name prtainer-ui  
           docker.io/portainer/portainer
1
2
3
4
5
6
7

命令的详细解释:

  • docker run: 从镜像启动新的容器。
  • -d: 以“分离模式”运行容器,即在后台运行。
  • -p 9999:9000: 将容器的 9000 端口映射到宿主机的 9999 端口上。即可以通过访问宿主机的 9999 端口来访问容器内的服务。
  • --restart=always: 设置容器的重启策略为“总是重启”。即无论何时 Docker 守护进程重启,这个容器都会自动重启。
  • -v /var/run/docker.sock:/var/run/docker.sock: 将宿主机的 /var/run/docker.sock 文件(Docker 守护进程的套接字文件)挂载到容器内的 /var/run/docker.sock。这样,Portainer 就能通过 Docker API 管理宿主机的 Docker 容器和镜像了。
  • --name portainer-ui: 为容器指定的名称,
  • docker.io/portainer/portainer: 指定要运行的镜像。这里使用的是 Docker Hub 上的 portainer/portainer 镜像。docker.io 是 Docker Hub 的默认地址,可以省略。
# 防火墙放行端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9000/udp --permanent
firewall-cmd --reload
1
2
3
4
# 单机版下载镜像以及运行(中文版)
# 拉取镜像
docker pull 6053537/portainer-ce
1
2
# 创建卷
docker volume create portainer_data
1
2
# 启动容器
docker run -d \
           -p 9999:9000 \
           --restart=always \
           -v /var/run/docker.sock:/var/run/docker.sock \
           -v portainer_data:/data/portainer-ce \
           --name="prtainer-ce" \
           6053537/portainer-ce      
1
2
3
4
5
6
7
8
# 防火墙放行端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9000/udp --permanent
firewall-cmd --reload
1
2
3
4

# 二、Docker-compose

# 概要说明

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件(docker-compose.yml),可以配置应用程序的服务,并只需一条命令即可启动所有服务。它简化了多容器环境的配置和管理,特别适用于需要多个服务协同工作的复杂应用。

Docker 从 **Docker Engine 20.10**版本开始正式集成 Docker Compose V2 功能,将其作为 Docker CLI 的插件运行。集成使得 Docker Compose 成为 Docker 生态系统中多容器编排和管理的标准工具。不同操作系统下的集成情况如下:

  • Mac / Windows: 安装 Docker Desktop 时,默认会自动包含 Docker Compose。
  • Linux(如 CentOS、Ubuntu): Docker Engine 的安装包可能默认包含 Docker Compose 插件,不存在则需要单独安装,包括如下两种方式:
    • Docker Engine 中安装 Docker Compose 插件 ;
    • 单独安装 Docker Compose 程序。

无论操作系统,均可通过以下命令验证:

docker compose version
1

# 常用命令

# 查看所有的 Compose 项目
docker-compose ls --all
# 查看当前运行的 Compose 项目
docker-compose ls

# === 以下命令需在包含 docker-compose.yml 文件的目录下执行 ===
# 列出当前 Compose 项目的容器运行状态
docker-compose ps
# 启动当前 Compose 项目
docker-compose up -d
# 关闭当前 Compose 项目
docker-compose down
# 启动指定 Compose 项目
docker-compose -f docker-compose.yml up -d
# 停止指定 Compose 项目
docker-compose -f docker-compose.yml stop
# 停止并删除指定 Compose 项目
docker-compose -f docker-compose.yml down
# === 以上命令需在包含 docker-compose.yml 文件的目录下执行 ===

# 查看日志
docker-compose logs <服务名>
# 进入容器执行命令
docker-compose exec <服务名> sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 环境依赖

软件/系统 版本 架构 包名 备注
Linux,要求内核不低于3.10 CentOS7.X x86_64 docker-compose-linux-x86_64 (opens new window),版本2.28.1 Github (opens new window)

# 程序安装

# 方式一:Docker Engine 中安装 Docker Compose 插件

docker plugin install docker/compose-plugin
1

# 方式二:单独安装 Docker Compose 程序(推荐)

# 在线安装
# 安装插件
sudo yum -y install docker-compose-plugin
1
2
# 检查是否安装
sudo yum list installed | grep docker-compose-plugin
# 移除插件
sudo yum remove docker-compose-plugin
1
2
3
4
# 离线安装

创建插件目录

# 为系统上所有用户安装(推荐)
sudo mkdir /usr/local/lib/docker/cli-plugins
# 或,仅为当前用户安装
sudo mkdir -p ~/.docker/cli-plugins
1
2
3
4

下载 docker-compose-Linux-x86_64,重命名为docker-compose,移动到插件目录

# 下载
sudo wget https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-linux-x86_64
# 重命名并移动到插件目录
sudo mv docker-compose-linux-x86_64 /usr/local/lib/docker/cli-plugins/docker-compose

1
2
3
4
5

添加可执行权限

sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
1

(可选)链接为全局bin工具

# 创建链接
sudo ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose
1
2
# 查看版本
docker-compose -v
1
2
# 预期输出
Docker Compose version v2.28.1
1
2

# 访问验证

# 查看版本
docker compose version
1
2
# 预期输出
Docker Compose version v2.28.1
1
2
上次更新时间: 3/27/2025, 9:08:03 AM