安装 Docker
参考官方文档:Install Docker Engine
各平台支持情况如下:
以 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应用中 |