Docker
Docker 是一个开源的容器化平台,用于开发、部署和运行应用程序。
适用场景:微服务架构部署、开发环境一致性、持续集成/持续部署(CI/CD)、应用隔离、快速扩缩容。
本目录下还有 Dockerfile(镜像构建语法与多阶段构建)和 Docker命令(安装、镜像、容器、网络、Compose 等命令参考),可配合阅读。
提示
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中。
安装与配置
安装 Docker
不同系统安装方式有所不同。
CentOS 安装示例:
# 1. 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2. 设置 repository(使用国内镜像加速)
yum install -y yum-utils
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3. 更新 yum 软件包索引
yum makecache fast
# 4. 安装 Docker
yum install docker-ce docker-ce-cli containerd.io
# 5. 启动 Docker
systemctl start docker
# 6. 使用 docker version 查看版本信息确认安装成功
docker version
# 7. 测试 hello world
docker run hello-world镜像源加速
在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):
{
"registry-mirrors": ["https://reg-mirror.qiniu.com/"]
}之后重新启动服务:
sudo systemctl daemon-reload
sudo systemctl restart docker卸载 Docker
# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2. 卸载资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd核心概念
镜像(Image)
Docker 镜像是一个只读的模板,包含了运行应用程序所需的所有内容:代码、运行时、库、环境变量和配置文件。
容器(Container)
容器是镜像的运行实例。可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。
仓库(Repository)
Docker 仓库用于存储镜像,Docker Hub 是最大的公共仓库。
数据管理
Docker 提供数据卷(Volume)实现容器数据持久化。数据卷绕过容器的文件系统,直接写入宿主机,容器删除后数据不丢失。
⚠️ 注意:数据卷容器的生命周期持续到没有容器使用为止。一旦持久化到本地,本地数据不会自动删除。
数据卷的挂载方式(直接挂载、具名挂载、匿名挂载)、读写权限控制(ro/rw)、以及数据卷容器的共享机制,详见 Docker命令 中的「Docker 数据持久化」章节。
网络管理
Docker 提供 bridge(桥接,默认)、none、host(共享宿主机网络)、container 四种网络模式。所有网络接口均为虚拟接口,容器删除后对应网桥随之消失。
Docker 的自定义网络、network 命令、以及 veth-pair 技术原理,详见 Docker命令 中的「Docker 网络」章节。
Docker Compose
Docker Compose 通过 YAML 文件声明式地定义多容器应用,适合开发、测试和 CI 场景。Compose 的安装、YAML 语法、常用命令和编排示例,详见 Docker命令 中的「Docker Compose」章节。
镜像构建
Dockerfile 的指令体系、CMD 与 ENTRYPOINT 的区别、多阶段构建技巧和最佳实践,详见 Dockerfile。
镜像发布
将构建好的镜像推送到远程仓库供团队或生产环境使用:
# 登录仓库
docker login -u 用户名 -p 密码 仓库地址
# 打标签
docker tag 本地镜像ID 仓库地址/项目/镜像名:版本
# 推送
docker push 仓库地址/项目/镜像名:版本Docker Swarm
Docker Swarm 是 Docker 的原生集群管理功能,将多个 Docker 主机汇聚成虚拟主机。Swarm 使用 Raft 协议保证一致性,管理节点数需 >= 3,多数节点存活才能正常工作。
# 初始化管理节点
docker swarm init --advertise-addr 172.19.70.0
# 获取加入令牌
docker swarm join-token manager
docker swarm join-token worker
# 工作节点加入集群
docker swarm join --token SWMTKN-xxx 172.19.70.0:2377扩缩容服务:
docker service update --replicas 3 my-nginx
# 或
docker service scale my-nginx=3| 概念 | 说明 |
|---|---|
| swarm | 集群管理层,Docker 初始化 swarm 集群后其他节点可加入 |
| node | 集群中的一个 Docker 节点 |
| service | 运行在管理节点或工作节点上的任务单元 |
| task | service 调度到节点后执行的容器命令 |
常见问题处理
容器无法启动
- 检查端口是否被占用:
netstat -tulpn | grep 端口号 - 检查镜像是否存在:
docker images - 查看容器日志:
docker logs 容器ID
磁盘空间不足
- 清理未使用的镜像:
docker image prune - 清理未使用的容器:
docker container prune - 清理未使用的卷:
docker volume prune
网络连接问题
- 检查容器网络配置:
docker network inspect 网络名 - 检查容器端口映射:
docker port 容器ID - 测试容器间连通性:
docker exec 容器ID ping 目标容器