CentOS搭建:Docker
目录
参考:
- centos7安装Docker详细步骤(无坑版教程) (opens new window)
- Centos7 安装Docker 详细多图版 (opens new window)
- Centos7离线安装Docker (opens new window)
- CentOS7安装Docker及配置国内镜像源 (opens new window)
- Docker配置镜像源 (opens new window)
- Docker国内加速镜像源地址 (opens new window)
- centos7 安装Docker UI 管理界面 (opens new window)
- Docker可视化神器:Portainer-ce(中文版)镜像 (opens new window)
- Docker的三种数据持久化方式 (opens new window)
- Install the Docker Compose plugin (opens new window)
# 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
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 镜像名称
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
2
3
4
5
6
7
8
9
可选参数:
- -i 表示以交互模式运行容器。
- -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
- --name 为创建的容器命名。
- -v 表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
- -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
- -p 表示端口映射,即宿主机端口:容器中端口。
- --network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。
# 查看容器
docker ps [OPTIONS]
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 容器名 镜像名
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
2
3
4
# 环境依赖
软件/系统 | 版本 | 架构 | 包名 | 备注 |
---|---|---|---|---|
Linux,要求内核不低于3.10 | CentOS7.X | x86_64 | docker-27.0.3.tgz (opens new window) | 官网下载 (opens new window) |
# 程序安装
# 重置初始
# 查看内核版本
uname -r
2
# 更新 yum 包(生产环境中此步操作需慎重!!!)
yum -y update
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
2
3
4
5
# 安装依赖
# 安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
2
说明:yum-util
提供yum-config-manager
功能,另两个是devicemapper
驱动依赖
# 安装程序
# 离线安装
# 解压缩包
tar -zxvf docker-27.0.3.tgz -C /soft
# 将解压得到的文件复制到 /usr/bin目录下
cp docker/* /usr/bin/
2
3
4
# 创建或编辑docker服务
vi /etc/systemd/system/docker.service
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
# 在线安装
# 查看可用版本
yum list docker-ce --showduplicates | sort -r
2
# 选择一个版本并安装:`yum install docker-ce-版本号`
yum -y install docker-ce-18.06.3.ce-3.el7
2
#查看docker版本
docker --version
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
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
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"
2
3
4
# 重新加载配置
systemctl daemon-reload
# 重启docker
systemctl restart docker
# 查看配置
docker info
2
3
4
5
6
# 配置镜像源
注意:若使用的是某公司的云服务器,那么强烈建议使用该公司提供的镜像源, 以获取极致超速的体验。
以阿里云为示例进行配置:阿里云镜像源需要注册后进行分配,地址为: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
(=>镜像中心
=> 镜像加速器
),https://0fe961jo.mirror.aliyuncs.com
即为阿里云分配的个人镜像源。
# 创建或编辑
vi /etc/docker/daemon.json
2
# 配置镜像源
{
"registry-mirrors": ["https://0fe961jo.mirror.aliyuncs.com"]
}
2
3
4
# 重新加载配置
systemctl daemon-reload
# 重启docker
systemctl restart docker
2
3
4
其他国内镜像源:
- 腾讯云:https://mirror.ccs.tencentyun.com
# 检查镜像源的可用性
以通过简单的 Docker 命令检查源的可用性为示例:
# 从 Docker Hub 下载 hello-world镜像
docker pull hello-world
2
如果源可用,您将看到如下输出:
Using default tag: latest
latest: Pulling from library/hello-world
...
Downloaded newer image for hello-world:latest
2
3
4
如果源不可用,例如由于网络问题,将看到类似于以下错误的信息:
Error response from daemon: pull access denied for hello-world, repository does not exist or may require 'docker login'
# 自定义卷的路径
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"
# 输出示例
Docker Root Dir: /var/lib/docker
2
# 修改默认路径
为避免系统盘空间不足,可修改 Docker 的 data-root
配置:
# 停止 Docker 服务
sudo systemctl stop docker
# 迁移数据
sudo rsync -aP /var/lib/docker/ /新路径
2
3
4
修改配置文件 /etc/docker/daemon.json
,添加:
{
"data-root": "/新路径"
}
2
3
# 重启 Docker
sudo systemctl start docker
2
修改后,新创建的卷将存储到新路径下的 volumes
目录中
# 图像化界面
# Portainer
Portainer是一个轻量级的docker环境管理UI,可以用来管理docker宿主机和docker swarm集群。由GO语言编写的,提供状态显示、应用模板快速部署、对于Docker(容器、镜像、网络、数据卷)的基本操作、日志显示、容器控制台等功能。
# 查询当前有哪些Portainer镜像
docker search portainer
2
注意:从2020年6月1日起,Docker官方宣布停止对Docker Hub的搜索API的支持,这意味着**docker search
命令不再可用**。
# 单机版下载镜像以及运行(英文版)
# 拉取Portainer镜像
docker pull docker.io/portainer/portainer
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
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
2
3
4
# 单机版下载镜像以及运行(中文版)
# 拉取镜像
docker pull 6053537/portainer-ce
2
# 创建卷
docker volume create portainer_data
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
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
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
# 常用命令
# 查看所有的 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
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
# 方式二:单独安装 Docker Compose 程序(推荐)
# 在线安装
# 安装插件
sudo yum -y install docker-compose-plugin
2
# 检查是否安装
sudo yum list installed | grep docker-compose-plugin
# 移除插件
sudo yum remove docker-compose-plugin
2
3
4
# 离线安装
创建插件目录
# 为系统上所有用户安装(推荐)
sudo mkdir /usr/local/lib/docker/cli-plugins
# 或,仅为当前用户安装
sudo mkdir -p ~/.docker/cli-plugins
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
2
3
4
5
添加可执行权限
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
(可选)链接为全局bin工具
# 创建链接
sudo ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose
2
# 查看版本
docker-compose -v
2
# 预期输出
Docker Compose version v2.28.1
2
# 访问验证
# 查看版本
docker compose version
2
# 预期输出
Docker Compose version v2.28.1
2