Skip to content

Docker 使用

配置镜像源地址

bash
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn"
  ]
}
EOF
bash
$ sudo systemctl daemon-reload #重新加载配置文件
$ sudo systemctl restart docker #重启 Docker 服务

常用的 Docker 服务命令

bash
$ systemctl start docker  #启动 Docker 服务
$ systemctl stop docker   #停止 Docker 服务
$ systemctl restart docker  #重启 Docker 服务
$ systemctl enable docker  #设置开机启动 Docker 服务
$ systemctl status docker  #查看 Docker 服务状态

镜像使用

拉取镜像

bash
$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • OPTIONS(可选):选项参数。
    • all-tags, -a:下载指定镜像的所有标签。
    • disable-content-trust:跳过镜像签名验证。
  • NAME:镜像名称,通常包含注册表地址(比如 docker.io/library/ubuntu),不带注册表地址则默认从 Docker Hub 进行拉取。
  • TAG(可选):镜像标签,默认为 latest。
  • DIGEST(可选):镜像的 SHA256 摘要。

下载最新的 nginx 镜像可以运行 docker pull nginx 命令

bash
$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
16c9c4a8e9ee: Pull complete
de29066b274e: Pull complete
2cf157fc31fe: Pull complete
450968563955: Pull complete
9b14c47aa231: Pull complete
fd8a9ced9846: Pull complete
c96c7b918bd5: Pull complete
Digest: sha256:5ed8fcc66f4ed123c1b2560ed708dc148755b6e4cbd8b943fab094f2c6bfa91e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

如果想下载特定版本的镜像,可以在镜像名后加上标签

bash
$ docker pull nginx:1.23

镜像标签

每个镜像可以有多个标签,通常用于区分不同版本或环境

以 nginx 镜像为例,默认情况下当我们拉取nginx镜像时,Docker 会自动使用 latest 标签,这表示最新稳定

查看镜像

下载完成后,对应镜像会存储在本地。通过 docker images 命令可以查看本地已有的镜像列表,这个命令会显示镜像的名称标签镜像 ID创建时间大小等信息。

bash
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    1f94323bafb2   6 days ago   198MB

可以通过 docker inspect 命令查看指定镜像详细信息,包括创建时间、环境变量、工作目录、暴露的端口等配置信息。

bash
$ docker inspect nginx

可以使用 docker logs 命令查看正在运行的容器的日志输出

bash
$ docker logs nginx

删除镜像

需要使用 docker rmi 加上镜像 ID 才能彻底删除镜像文件。
镜像 ID 可以通过 docker images 命令进行查看

bash
$ docker rmi 1f94323bafb2

容器使用

创建并启动容器

在获取镜像并下载完成之后,可以通过 docker run 命令运行容器

bash
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用参数说明:

  • d:以后台模式运行容器
  • p:端口映射,格式为 主机端口号:容器端口号,例如 80:80。
    • name:指定容器名称。
  • it:保持交互式终端连接。
  • v:挂载主机目录到容器,格式为 -v 主机目录:容器目录。
    • rm:容器停止时自动删除容器。
    • env 或 -e:设置环境变量,格式为 --env 变量名=变量值。
    • network:指定容器的网络模式。
    • restart:容器的重启策略。
  • u:指定用户运行,格式为 -u 用户名。

如果我们想要启动一个 nginx 容器

bash
$ docker run -d -p 80:80 --name nginx-container nginx

通过以上命令,Docker 会进行以下操作:

  • 使用指定的 nginx 镜像构建容器。
  • 允许容器在后台运行。
  • 将容器的 80 端口映射到主机的 80 端口上。
  • 指定容器名称为 nginx-container。
  • 启动容器。

在容器启动后,通过主机的 IP 地址就能看到 nginx 的默认欢迎页面了。

重新启动已经终止的容器

如果容器因为某种原因停止运行,可以使用 docker start 容器ID 命令重新启动它

终止容器

要终止正在运行的 Docker 容器,可以使用 docker stop 命令

bash
$ docker stop nginx-container
nginx-container

查看容器

1 使用 docker ps 命令可以查看当前正在运行的容器
这个命令会显示容器的 ID名称使用的镜像创建时间状态端口映射等信息。

bash
$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                NAMES
a1b2c3d4e5f6   nginx     "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp   nginx-container

2 docker ps -a 命令可以查看所有容器,包括已经停止的容器

bash
$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                      PORTS                NAMES
a1b2c3d4e5f6   nginx          "/docker-entrypoint.…"   5 minutes ago    Up 5 minutes                0.0.0.0:80->80/tcp   nginx-container
b2c3d4e5f6a1   redis:alpine   "docker-entrypoint.s…"   2 days ago       Exited (0) 2 days ago                             redis-test

3 docker inspect 命令可以查看容器的详细信息,返回 JSON 格式的数据,包含容器的配置、网络设置、挂载卷等完整信息。

bash
$ docker inspect nginx-container

4 docker logs 命令可以查看容器的日志输出。这个命令加上 -f 参数可以实时查看日志输出。

bash
$ docker logs nginx-container
$ docker logs -f nginx-container

5 docker stats 命令可以实时查看容器的资源使用情况,包括 CPU、内存、网络和磁盘 I/O。

bash
$ docker stats
CONTAINER ID   NAME             CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
a1b2c3d4e5f6   nginx-container   0.00%     2.5MiB / 1.952GiB   0.13%     1.45kB / 648B     0B / 0B           2

容器的导出和导入

导出容器可以使用 docker export 命令,这个命令会将容器的文件系统打包成 tar 归档文件,但不包含容器的元数据、网络配置或卷信息。

bash
$ docker export -o nginx-container.tar nginx-container

将名为 nginx-container 的容器导出到当前目录下的 nginx-container.tar 文件中

通过 docker import 命令重新导入为镜像,导入时需要指定镜像名称标签

bash
$ docker import nginx-container.tar my-nginx:v1

导入命令会创建一个名为 my-nginx、标签为 v1 的新镜像

删除容器

当容器不再需要时,可以使用 docker rm 命令将其删除,这个命令需要指定容器 ID 或容器名称

bash
docker rm nginx-container  #会删除名为 nginx-container 的容器

注意:如果容器正在运行,直接删除会失败,需要先使用 docker stop 停止容器,或者添加 -f 参数强制删除运行中的容器。

bash
# 查看容器列表
$ docker ps                     # 查看正在运行的容器列表
$ docker ps -l                  # 查看最近一次创建的容器
$ docker ps -q                  # 查看正在运行的容器 ID 列表
$ docker ps -a                  # 查看全部容器(包括已经停止的容器)
$ docker ps -aq                 # 查看全部容器 ID 列表

# 停止运行的容器
$ docker stop my_container      # 使用容器名停止
$ docker stop container_id      # 使用容器 ID 停止

# 启动已停止的容器
$ docker start my_container     # 容器名
$ docker start container_id     # 容器 ID
$ docker start `docker ps -aq`  # 使用容器 ID 启动多个已停止的容器

# 删除容器
$ docker rm my_container        # 用容器名删除
$ docker rm container_id        # 用容器 ID 删除
$ docker rm `docker ps -aq`     # 删除多个未运行的容器, 运行中的无法删除

# 进入容器(正在运行的容器才可以进入)
$ docker exec -it my_container /bin/bash # 使用容器名
$ docker exec -it container_id /bin/bash # 使用容器 ID

# 查看容器信息
$ docker inspect my_container  # 容器名
$ docker inspect container_id  # 容器 ID
最近更新