Docker 入坑指南
(连载中)
1 关于 Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从 Apache2.0 协议开源。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版)和 EE(Enterprise Edition: 企业版)。社区版适合开发者和小型团队,可以快速上手,并获得社区的支持。企业版则更适合于需要严格控制和保护的企业环境,提供了更多的安全性和技术支持。学习和小规模场景使用社区版就可以了。
1.1 安装 Docker Desktop
下载最新的 DEB(https://desktop.docker.com/linux/main/amd64/docker-desktop-amd64.deb) 安装包。
使用 apt 进行安装。
1 | sudo apt update |
💡 安装过程结束时,apt 会显示错误信息,可忽略。
1.2 Docker Engine
Docker Engine 是一种开源容器化技术,用于构建应用程序并将其容器化。Docker Engine 作为 CS 应用程序运行,包含以下组件:
- Docker Daemon(dockerd):后台守护进程
- Docker CLI(docker):命令行客户端
- REST API:两者之间的接口
2 安装 Docker
2.1 安装 Docker Engine
在 Ubuntu 24.04 中使用 apt 安装 Docker Engine。
2.1.1 删除旧版本
批量卸载系统中已安装的 Docker 及相关容器组件。
1 | sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1) |
💡
apt remove命令在删除包的同时会保留配置文件,apt purge命令会将包及其配置文件全部删除,如果你只是暂时不用,想保留配置以后接着用,用remove,如果想彻底清理干净,像从没装过一样,用purge。
2.1.2 使用 apt 安装
设置 docker apt 仓库
1 | # Add Docker's official GPG key: |
安装 docker 包最新版本,安装过程中出现确认提示,全部输入 y 确定。
1 | sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
安装结束之后,可查看 docker engine 的版本来确定安装情况。
1 | docker version |
2.1.3 使用脚本安装
通过官方 https://get.docker.com 下载安装脚本,安装最新的稳定版本:
1 | curl -4 -fsSL https://get.docker.com -o get-docker.sh # 强制采用 IPv4 |
💡 curl 默认双栈,会优先试 IPv6,很多国内网络 IPv6 是”半通”状态——TCP 能建连,但一到 TLS 握手就被中间设备 RST。
get.docker.com是有 AAAA 记录的。
安装结束之后,可查看 docker engine 的版本来确定安装情况。
1 | docker version |
2.2 卸载 Docker Engine
卸载 Docker Engine,CLI,containerd,和 Docker Compose 包:
1 | sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras |
镜像、容器、数据卷和自定义配置文件不会被自动删除,执行如下命令进行删除:
1 | sudo rm -rf /var/lib/docker |
清理安装时所添加的 Docker apt 源和 GPG 公钥,目的是完全移除系统对 Docker 官方源的引用。
1 | sudo rm /etc/apt/sources.list.d/docker.sources |
2.3 Docker 服务命令
Docker Engine 安装后,可使用下列命令对服务进行管理。
1 | systemctl status docker # 查看 docker 服务状态 |
2.4 Docker 镜像加速
在 /etc/docker/ 目录中创建文件 daemon.json,并设置镜像仓库地址。
1 | { |
重新启动服务。
1 | sudo systemctl daemon-reload |
3 使用 Docker
3.1 Docker 镜像
Docker 镜像相关命令:
1 | docker images # 查看所有本地镜像 |
💡
docker search命令默认连接的是 Docker Hub 的索引服务(https://index.docker.io),即使配置了镜像加速器,命令仍然会直接访问 Docker Hub 的搜索接口。国内网络环境下,docker search命令搜索镜像可能会因为网络问题而超时。在不使用科学上网的情况下,配置镜像加速器后,直接使用docker pull拉取镜像即可,没有必要通过docker search命令搜索镜像。
3.2 Docker 容器
可以把容器看作是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
Docker 容器相关命令:
1 | docker run # 新建并启动容器 |
4 服务编排
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。使用Docker Compose,可以用一个 YAML 文件定义一组要启动的容器,以及容器运行时的属性,Docker Compose 称这些容器为“服务”。
4.1 安装 Docker Compose
安装过程见 [2.1.2 使用 apt 安装](#2.1.2 使用 apt 安装)。
查看 Docker Compose 版本。
1 | docker compose version |
4.2 使用 Docker Compose
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
1 | sudo docker compose up -d # 使用守护进程模式启动 |
Docker Compose V1 是独立由 Python 写的二进制,已被标记为 deprecated(废弃),2023 年起官方不再维护,其命令格式为
docker-compose。Docker Compose V2 作为 Docker CLI 的插件分发,使用 Go 重写,当前主流默认,Docker Desktop 自带,其命令格式为docker compose。
4.3 Docker Compose 配置文件
默认情况下,Docker Compose 配置文件的名称为 docker-compose.yml 或 docker-compose.yaml。
Docker Compose 配置文件主要由以下几个部分组成:
- version: 指定 Compose 文件的版本。当前最新版本为 3.x。
- services: 定义应用程序的各个服务。
- networks: 定义服务之间的网络连接。
服务的主要配置:
- image: 指定要使用的 Docker 镜像。
- build: 指定 Dockerfile 所在的目录,用于构建镜像。
- ports: 映射容器端口到主机端口。
- volumes: 挂载主机目录或数据卷到容器。
- environment: 设置环境变量。
示例:
1 | services: |