《Docker深入浅出》读记

安装 Docker

参考官方文档:Install Docker Engine

各平台支持情况如下:

Platform x86_64 / amd64 arm64 / aarch64 arm (32-bit) ppc64le s390x
CentOS
Debian
Fedora
Raspberry Pi OS (32-bit) ⚠️
RHEL
SLES
Ubuntu
Binaries

以 debian 系统为例,先运行命令卸载可能残存的旧版本:

1
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)

再通过 apt 方式安装 Docker

 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
# 添加 Docker 官方的 GPG 密钥
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 将 Docker 添加到 apt 源
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

# 执行命令进行安装
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 启动 Docker
sudo systemctl start docker

# 测试 Docker
sudo docker run hello-world

安装成功之后,你会得到两个主要组件:

  • Docker 客户端
  • Docker 引擎(有时成为“Docker”守护进程)

使用 docker version 可以查看版本信息。

 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
root@debian:~$ sudo docker version
Client: Docker Engine - Community
 Version:           29.3.1
 API version:       1.54
 Go version:        go1.25.8
 Git commit:        c2be9cc
 Built:             Wed Mar 25 16:13:48 2026
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          29.3.1
  API version:      1.54 (minimum version 1.40)
  Go version:       go1.25.8
  Git commit:       f78c987
  Built:            Wed Mar 25 16:13:48 2026
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v2.2.2
  GitCommit:        301b2dac98f15c27117da5c8af12118a041a31d9
 runc:
  Version:          1.3.4
  GitCommit:        v1.3.4-0-gd6d73eb8
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
root@debian:~$ 

常用命令

命令 说明
docker version 查看版本
docker image 查看本地的镜像
docker pull xxx 拉取xxx镜像
docker run [镜像名] 从镜像创建并启动容器
docker run -d [镜像名] 后台运行容器(守护进程模式)
docker run -p 主机端口:容器端口 [镜像名] 端口映射(主机访问容器端口)
docker run --name [容器名] [镜像名] 指定容器名称启动
docker ps 查看正在运行的容器(容器是镜像运行后的一个实例)
docker ps -a 查看所有容器(包括已停止)
docker start [容器ID/名称] 启动已停止的容器
docker stop [容器ID/名称] 停止运行中的容器
docker restart [容器ID/名称] 重启容器
docker exec -it [容器ID/名称] /bin/bash 进入容器内部命令行(交互模式)
docker logs [容器ID/名称] 查看容器日志
docker logs -f [容器ID/名称] 实时跟踪容器日志
docker rm [容器ID/名称] 删除已停止的容器
docker rm -f [容器ID/名称] 强制删除运行中的容器
docker inspect [容器ID/名称] 查看容器详细配置信息(IP、挂载等)
docker top [容器ID/名称] 查看容器内运行的进程
docker cp [主机文件路径] [容器ID/名称]:[容器内路径] 主机文件复制到容器
docker cp [容器ID/名称]:[容器内路径] [主机文件路径] 容器文件复制到主机

从开源项目运行一个容器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 克隆代码
notnow@debian12p:~/tmp$ git clone https://github.com/nigelpoulton/psweb.git
Cloning into 'psweb'...
remote: Enumerating objects: 88, done.
remote: Counting objects: 100% (42/42), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 88 (delta 30), reused 21 (delta 19), pack-reused 46 (from 2)
Receiving objects: 100% (88/88), 18.25 KiB | 212.00 KiB/s, done.
Resolving deltas: 100% (35/35), done.
notnow@debian12p:~/tmp$ 
# 进入项目
notnow@debian12p:~/tmp$ cd psweb/
notnow@debian12p:~/tmp/psweb$ ls -l
total 20
-rw-rw-r-- 1 notnow notnow  341 Apr  4 22:44 app.js
-rw-rw-r-- 1 notnow notnow  324 Apr  4 22:44 Dockerfile
-rw-rw-r-- 1 notnow notnow  309 Apr  4 22:44 package.json
-rw-rw-r-- 1 notnow notnow  378 Apr  4 22:44 README.md
drwxrwxr-x 2 notnow notnow 4096 Apr  4 22:44 views
notnow@debian12p:~/tmp/psweb$ 
# 创建镜像
notnow@debian12p:~/tmp/psweb$ sudo docker build -t test:latest .
# 运行新容器
notnow@debian12p:~/tmp/psweb$ sudo docker run -d --name web1 --publish 8080:8080 test:latest

启动执行流程:Docker Client -> Docker daemon -> containerd -> shim/runc

Dockerfile文件示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
notnow@debian12p:~/tmp/psweb$ cat Dockerfile 
# 基于alpine基础镜像构建
FROM alpine

# 声明维护者
LABEL maintainer="nigelpoulton@hotmail.com"

# 安装基础包
RUN apk add --update nodejs npm curl

# 拷贝文件
COPY . /src

# 设置工作目录
WORKDIR /src

# 安装依赖包
RUN  npm install

# 暴露8080端口
EXPOSE 8080

# 执行命令启动应用
ENTRYPOINT ["node", "./app.js"]

如果要想查看构建镜像的指令,可以执行 docker history 命令。 每一行对应Dockerfile中的一条指令(从下往上)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
notnow@debian12p:~$ sudo docker history test:latest
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
065cb895ad01   11 minutes ago   ENTRYPOINT ["node" "app.js"]                    0B        buildkit.dockerfile.v0
<missing>      11 minutes ago   EXPOSE [8080/tcp]                               0B        buildkit.dockerfile.v0
<missing>      11 minutes ago   RUN /bin/sh -c npm install # buildkit           21.4MB    buildkit.dockerfile.v0
<missing>      12 minutes ago   WORKDIR /src                                    0B        buildkit.dockerfile.v0
<missing>      12 minutes ago   COPY . /src # buildkit                          52.7kB    buildkit.dockerfile.v0
<missing>      20 hours ago     RUN /bin/sh -c apk add --update nodejs npm c…   85MB      buildkit.dockerfile.v0
<missing>      20 hours ago     LABEL maintainer=kuye1414@qq.com                0B        buildkit.dockerfile.v0
<missing>      2 months ago     CMD ["/bin/sh"]                                 0B        buildkit.dockerfile.v0
<missing>      2 months ago     ADD alpine-minirootfs-3.23.3-x86_64.tar.gz /…   8.44MB    buildkit.dockerfile.v0
notnow@debian12p:~$ 

Docker Compose 部署多容器应用

Compose 允许在一个声明性配置文件中描述多个微服务,应用部署完成后,可以使用一组简单的命令管理它的整个生命周期。

Compose 的前身是 Orchard 公司开发的一款名为 Fig 的 Python 工具,它使得管理多容器应用变得容易。

后来 Docker 收购了 Orchard,并将 Fig 重命名为 Docker Compose,命令行工具从 Fig 更名为 docker-compose,后来它被整合到 Docker CLI 中成为子命令即 Docker compose。

Compose 使用 YAML 文件来定义微服务应用,默认配置名为: compose.yaml

常用命令 说明
docker compose up -d 以后台进程方式启动所有Compose应用
docker compose stop 关闭Compose应用
docker compose restart 重启Compose应用
docker compose ps 列出Compose应用中的每个容器
docker compose down 停止并删除Compose应用中
updatedupdated2026-04-052026-04-05