写在前面
对于在中国大陆地区的 Linux 用户来说,安装 Docker 和 Docker Compose 时可能会因为网络问题遇到问题。官方的软件源位于国外,直接访问可能速度缓慢或被阻断。为了解决这一问题,推荐使用国内的镜像源来加速安装和镜像拉取过程。
本文将为你提供一份详尽的指南,介绍如何在常见的 Linux 发行版(如 Ubuntu, Debian, CentOS, Fedora)上,通过配置国内镜像源来顺利安装 Docker Engine 和 Docker Compose。
第一步:安装 Docker Engine
安装 Docker Engine 的首选方法是设置 Docker 的 apt
或 yum
仓库,这样可以轻松地进行安装和更新。我们将使用国内的镜像源来替换官方源。
准备工作
在开始安装之前,如果你的系统上安装有旧版本的 Docker,建议先将其卸载:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 或者在基于 Debian 的系统上
sudo apt-get remove docker docker-engine docker.io containerd runc
在基于 Debian 的系统 (Ubuntu, Debian) 上安装
安装必要的依赖包,以允许
apt
通过 HTTPS 使用仓库:sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release
添加 Docker 的官方 GPG 密钥。为了确保软件包的安全性,需要添加 Docker 的官方 GPG 密钥。这里我们同样使用国内的镜像源(以清华大学开源软件镜像站为例):
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
设置 Docker 的
apt
仓库。将 Docker 的官方仓库地址替换为国内镜像源地址:echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
注意:
$(lsb_release -cs)
会返回你的 Ubuntu/Debian 发行版的代号 (例如focal
,jammy
,bullseye
)。除了清华大学源,你也可以选择其他镜像源,如中国科学技术大学(USTC)源 (
https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu
) 或阿里云源。
安装 Docker Engine:
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
在基于 RPM 的系统 (CentOS, Fedora) 上安装
安装
yum-utils
,它提供了yum-config-manager
工具:sudo yum install -y yum-utils
设置 Docker 的
yum
仓库。同样,我们将使用国内的镜像源(以清华大学源为例):sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
对于 Fedora 用户,请使用相应的 Fedora 仓库地址。
安装 Docker Engine:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
第二步:配置 Docker 镜像加速
为了在拉取 Docker 镜像时获得更快的速度,你需要配置 Docker 守护进程以使用国内的镜像加速器。
创建或修改 Docker 配置文件:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://registry.docker-cn.com" ] } EOF
这里列出了一些常用的国内镜像加速器地址,你可以根据自己的网络情况选择一个或多个。
重启 Docker 服务以应用新的配置:
sudo systemctl daemon-reload sudo systemctl restart docker
验证 Docker 是否安装成功:
sudo docker run hello-world
如果能够成功拉取并运行
hello-world
镜像,则说明 Docker Engine 已成功安装并配置了镜像加速。
至此,你已经成功安装并配置好了 Docker 和 Docker Compose。现在你可以开始使用它们来构建和管理你的容器化应用了。
基本使用方法
好的,在成功安装 Docker 和 Docker Compose 之后,接下来我们将介绍它们的基本使用方法。
这篇指南将分为两部分:
Docker 的基本使用:如何管理单个容器,包括镜像、容器的生命周期管理。
Docker Compose 的基本使用:如何通过一个配置文件来定义和运行多个容器的应用。
Docker 基本使用方法
Docker 的核心是围绕 镜像 (Image) 和 容器 (Container) 展开的。
镜像 (Image):一个只读的模板,包含了运行应用程序所需的所有内容——代码、运行时、库、环境变量和配置文件。可以把它理解为一个轻量级的虚拟机快照。
容器 (Container):镜像的运行实例。你可以创建、启动、停止、移动或删除容器。每个容器都是相互隔离、保证安全的平台。
1. 镜像管理 (Image Management)
a. 搜索镜像
从 Docker Hub(或者你配置的镜像加速器)上搜索需要的镜像。
docker search nginx
这会列出所有与 "nginx" 相关的公开镜像。
b. 拉取镜像
将远程仓库的镜像下载到本地。
# 拉取最新版的 Nginx 镜像
docker pull nginx
# 拉取特定版本的 Nginx 镜像
docker pull nginx:1.21.6
如果不指定标签 (tag, 如 :1.21.6
),默认会拉取 latest
标签的镜像。
c. 查看本地镜像
列出所有已经下载到本地的镜像。
docker images
d. 删除本地镜像
当一个镜像不再需要时,可以删除它以释放磁盘空间。
docker rmi nginx:1.21.6
如果该镜像正被某个容器使用,你需要先删除该容器才能删除镜像。可以使用 -f
参数强制删除。
2. 容器生命周期管理 (Container Lifecycle Management)
a. 运行容器 (创建并启动)
docker run 是最核心的命令,它从一个镜像创建一个新的容器并启动它。
基本示例:运行一个 Nginx Web 服务器
docker run --name my-nginx -p 8080:80 -d nginx
参数解释:
--name my-nginx
:给容器指定一个名字my-nginx
,方便后续操作。如果不指定,Docker 会随机分配一个名字。-p 8080:80
:端口映射。将主机的8080
端口映射到容器的80
端口。这样你就可以通过访问http://主机IP:8080
来访问 Nginx 服务器了。-d
(detach):后台运行容器,并返回容器 ID。没有这个参数,容器会在前台运行,占用你的终端。nginx
:用来创建容器的镜像名称。
b. 查看正在运行的容器
Bash
docker ps
要查看所有容器(包括已停止的),请使用 -a
参数:
docker ps -a
c. 停止容器
docker stop my-nginx
这里的 my-nginx
是你在 docker run
时指定的容器名。你也可以使用容器 ID。
d. 启动已停止的容器
docker start my-nginx
e. 重启容器
docker restart my-nginx
f. 进入正在运行的容器 (执行命令)
有时候需要进入容器内部进行调试或查看文件。
docker exec -it my-nginx /bin/bash
参数解释:
-i
(interactive):保持 STDIN 打开,即使没有附加。-t
(tty):分配一个伪终端。/bin/bash
:在容器内要执行的命令,这里是启动一个 bash shell。
g. 查看容器日志
查看容器的标准输出日志,非常适合用来排错。
docker logs my-nginx
# 持续跟踪日志(类似 tail -f)
docker logs -f my-nginx
h. 删除容器
删除一个或多个已经停止的容器。
# 首先确保容器已经停止
docker stop my-nginx
# 然后删除容器
docker rm my-nginx
如果要删除一个正在运行的容器,需要添加 -f
参数。
Docker Compose 基本使用方法
当你的应用需要多个服务(例如一个 Web 应用 + 一个数据库)协同工作时,手动管理多个 docker run
命令会变得非常繁琐。Docker Compose 允许你使用一个 YAML
文件来定义和管理一个多容器的 Docker 应用。
核心是 docker-compose.yml
文件。
1. 编写 docker-compose.yml
文件
假设我们要部署一个 WordPress 网站,它需要一个 WordPress 服务和一个 MySQL 数据库服务。
创建一个名为 docker-compose.yml
的文件,并写入以下内容:
version: '3.8' # 指定 compose 文件版本
services: # 定义一组服务
db: # 服务名称,这里是数据库服务
image: mysql:5.7 # 使用的镜像
container_name: wordpress_db
volumes: # 数据卷挂载,用于数据持久化
- db_data:/var/lib/mysql
restart: always # 容器退出时总是重启
environment: # 设置环境变量
MYSQL_ROOT_PASSWORD: your_strong_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: your_wordpress_password
wordpress: # 服务名称,这里是 WordPress 服务
image: wordpress:latest
container_name: wordpress_app
volumes:
- ./wp_content:/var/www/html/wp-content
ports: # 端口映射
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306 # 连接到 db 服务的 3306 端口
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: your_wordpress_password
WORDPRESS_DB_NAME: wordpress
depends_on: # 声明依赖关系,wordpress 会在 db 启动之后再启动
- db
volumes: # 定义数据卷
db_data:
wp_content:
关键点:
services
: 定义了两个服务,db
和wordpress
。image
: 指定每个服务所使用的 Docker 镜像。ports
: 端口映射,将主机的8000
端口映射到wordpress
容器的80
端口。volumes
: 数据持久化。将数据库文件和 WordPress 的wp-content
目录保存在主机上,这样即使容器被删除,数据也不会丢失。environment
: 设置容器内的环境变量,用于配置数据库连接等。depends_on
: 定义了服务间的依赖关系,确保数据库先于 WordPress 启动。网络: Docker Compose 会自动为这个应用创建一个默认的网络,
db
和wordpress
服务在同一个网络中,可以通过服务名 (db
) 直接通信。
2. 管理应用
在 docker-compose.yml
文件所在的目录中,执行以下命令。请注意,新版命令是 docker compose
(无连字符)。
a. 启动应用 (创建并启动所有服务)
docker compose up -d
-d
参数表示在后台运行。首次运行时,它会自动拉取所需的镜像。
b. 查看服务状态
docker compose ps
c. 查看服务日志
# 查看所有服务的日志
docker compose logs
# 查看特定服务的日志并持续跟踪
docker compose logs -f wordpress
d. 停止并移除容器
docker compose down
这个命令会停止并删除由 docker-compose.yml
定义的容器和网络。如果需要同时删除 volumes
,可以加上 --volumes
参数。
e. 暂停和恢复服务
# 暂停服务中的容器
docker compose pause
# 恢复服务中的容器
docker compose unpause
f. 重启服务
docker compose restart
总结
Docker 主要用于管理单个容器,命令如
docker run
,docker pull
,docker ps
,docker rm
等。Docker Compose 主要用于管理多容器应用,通过一个
docker-compose.yml
文件来编排服务,核心命令是docker compose up
和docker compose down
。
从简单的 docker run
开始练习,熟悉容器的生命周期。当你需要部署更复杂的应用时,再转向使用 Docker Compose,这将大大简化你的部署和管理工作。