全网最新最全的Docker命令大集合,收藏备用!

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【10月更文挑战第19天】

Docker 是一个开源的平台,用于自动化应用程序的部署、扩展和管理。它使得开发者能够打包应用及其依赖项到一个轻量级的容器中,并在任何环境中快速运行。掌握 Docker 的常用命令可以大大提高你的工作效率,尤其是在开发、测试和部署阶段。本文将详细介绍 Docker 的常用命令,涵盖从基本操作到高级使用。

1. Docker 基础命令

1.1 docker --version

docker --version 命令用于查看 Docker 的当前版本信息。确保 Docker 已经正确安装,并且版本满足项目需求。

$ docker --version
Docker version 20.10.7, build f0df350

1.2 docker info

docker info 命令用于显示关于 Docker 的系统级信息,如镜像、容器数量,存储驱动器类型等。

$ docker info
...
Containers: 5
 Running: 1
 Paused: 0
 Stopped: 4
Images: 10
...

1.3 docker help

docker help 命令用于显示 Docker 的帮助文档,列出所有可用命令和对应的简短描述。

$ docker help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
...

1.4 docker system df

docker system df 命令用于显示 Docker 使用的磁盘空间,包括镜像、容器、数据卷等。

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        5         2.34GB    1.75GB (75%)
Containers      5         1         300MB     250MB (83%)
Local Volumes   3         2         500MB     100MB (20%)

2. 镜像操作

2.1 docker images

docker images 命令用于列出本地存储的所有 Docker 镜像。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae2feff98a0c        2 days ago          133MB

2.2 docker pull

docker pull 命令用于从 Docker 仓库中拉取指定镜像到本地。

$ docker pull nginx:latest
latest: Pulling from library/nginx
...
Status: Downloaded newer image for nginx:latest

2.3 docker search

docker search 命令用于在 Docker Hub 上搜索符合条件的镜像。

$ docker search nginx
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                              Official build of Nginx.                        12345     [OK]

2.4 docker rmi

docker rmi 命令用于删除本地的一个或多个 Docker 镜像。

$ docker rmi nginx:latest
Untagged: nginx:latest
Deleted: sha256:ae2feff98a0c...

2.5 docker tag

docker tag 命令用于为本地镜像打上一个新的标签(tag),通常用于标记不同的版本。

$ docker tag nginx:latest mynginx:v1

2.6 docker save

docker save 命令用于将指定镜像保存为一个 tar 压缩包,可以用于传输或备份。

$ docker save -o mynginx.tar mynginx:v1

2.7 docker load

docker load 命令用于从一个 tar 包中加载镜像到本地 Docker 库。

$ docker load -i mynginx.tar
Loaded image: mynginx:v1

2.8 docker history

docker history 命令用于显示镜像的构建历史,包括各个层的创建时间、大小等信息。

$ docker history nginx:latest
IMAGE               CREATED             CREATED BY                                      SIZE
ae2feff98a0c        2 days ago          /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   133MB

2.9 docker inspect

docker inspect 命令用于查看镜像或容器的详细信息,以 JSON 格式输出。

$ docker inspect nginx:latest
[
    {
   
        "Id": "sha256:ae2feff98a0c...",
        ...
    }
]

3. 容器操作

3.1 docker run

docker run 命令用于创建并启动一个新的容器。该命令结合了 docker createdocker start

$ docker run -d -p 80:80 nginx:latest

常用参数:

  • -d:后台运行容器。
  • -p:映射主机端口到容器端口。

3.2 docker start

docker start 命令用于启动一个已经停止的容器。

$ docker start container_id

3.3 docker stop

docker stop 命令用于停止一个正在运行的容器。

$ docker stop container_id

3.4 docker restart

docker restart 命令用于重启一个容器。

$ docker restart container_id

3.5 docker kill

docker kill 命令用于强制终止一个正在运行的容器。

$ docker kill container_id

3.6 docker rm

docker rm 命令用于删除一个已经停止的容器。

$ docker rm container_id

3.7 docker ps

docker ps 命令用于列出正在运行的容器。使用 -a 参数可以列出所有容器(包括已停止的)。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c3d5a72d1fd5        nginx:latest        "nginx -g 'daemon…"  3 hours ago         Up 3 hours          0.0.0.0:80->80/tcp  happy_hopper

3.8 docker exec

docker exec 命令用于在一个正在运行的容器中执行命令。

$ docker exec -it container_id /bin/bash

常用参数:

  • -it:以交互模式运行命令。

3.9 docker logs

docker logs 命令用于查看容器的日志输出。

$ docker logs container_id

3.10 docker commit

docker commit 命令用于从一个容器创建一个新的镜像。该镜像会包含当前容器的所有修改。

$ docker commit container_id mynginx:v2

3.11 docker cp

docker cp 命令用于在容器和主机之间复制文件或目录。这个命令非常有用,尤其是在需要从容器内取出生成的文件或将主机上的文件拷贝到容器内进行处理时。

$ docker cp container_id:/path/in/container /path/on/host
  • 示例: 如果需要从容器中提取日志文件到主机,可以使用如下命令:

    $ docker cp my_container:/var/log/nginx/access.log /home/user/nginx_logs/
    

3.12 docker rename

docker rename 命令用于重命名一个已经存在的容器。这个命令可以帮助你更好地组织和管理你的容器。

$ docker rename old_container_name new_container_name
  • 示例: 如果你有一个名为 web_server 的容器,想将其重命名为 nginx_server,可以使用如下命令:

    $ docker rename web_server nginx_server
    

3.13 docker pause

docker pause 命令用于暂停一个容器中的所有进程。暂停的容器不会占用 CPU 资源,适合在需要临时停止某个容器而不希望其完全停止的场景下使用。

$ docker pause container_id
  • 示例: 暂停一个容器以释放 CPU 资源:
$ docker pause my_container

3.14 docker unpause

docker unpause 命令用于恢复一个被暂停的容器中的所有进程,使其重新运行。

$ docker unpause container_id
  • 示例: 恢复一个被暂停的容器:
$ docker unpause my_container

4. 网络管理

Docker 提供了灵活的网络管理功能,允许你在容器之间建立连接,或将容器连接到外部网络。以下命令将帮助你管理 Docker 网络。

4.1 docker network ls

docker network ls 命令用于列出 Docker 中所有可用的网络。默认情况下,Docker 会创建三种网络:bridge、host 和 none。

$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
f1d2a3c4d5e6   bridge    bridge    local
7a8b9c0d1e2f   host      host      local
6e7f8a9b0c1d   none      null      local
  • 解释:
    • bridge: 默认的网络类型,Docker 容器通过它可以相互通信。
    • host: 容器与主机共享网络栈。
    • none: 容器无网络连接。

4.2 docker network create

docker network create 命令用于创建一个新的网络。你可以为不同的应用场景创建独立的网络。

$ docker network create my_network
  • 示例: 创建一个名为 my_network 的自定义网络:
$ docker network create my_network

4.3 docker network inspect

docker network inspect 命令用于查看某个网络的详细信息。该命令将输出网络的配置及连接到该网络的容器信息。

$ docker network inspect my_network
  • 示例: 查看 my_network 的详细信息:
$ docker network inspect my_network

4.4 docker network connect

docker network connect 命令用于将一个容器连接到一个已经存在的网络中。这允许你动态地改变容器的网络配置。

$ docker network connect my_network my_container
  • 示例: 将 my_container 连接到 my_network 网络中:
$ docker network connect my_network my_container

4.5 docker network disconnect

docker network disconnect 命令用于将一个容器从网络中断开。断开后,该容器将无法与网络中的其他容器通信。

$ docker network disconnect my_network my_container
  • 示例: 将 my_containermy_network 网络中断开:
$ docker network disconnect my_network my_container

4.6 docker network rm

docker network rm 命令用于删除一个 Docker 网络。该网络必须没有正在连接的容器,否则删除操作将失败。

$ docker network rm my_network
  • 示例: 删除 my_network 网络:
$ docker network rm my_network

5. 数据卷管理

Docker 数据卷用于持久化存储数据。数据卷可以在容器之间共享,并且在删除容器时不会丢失数据。以下命令将帮助你管理 Docker 的数据卷。

5.1 docker volume ls

docker volume ls 命令用于列出所有 Docker 数据卷。

$ docker volume ls
DRIVER              VOLUME NAME
local               my_volume
  • 解释:
    • local: Docker 的默认存储驱动。
    • my_volume: 自定义的数据卷名称。

5.2 docker volume create

docker volume create 命令用于创建一个新的数据卷。该数据卷可以用于多个容器之间共享数据。

$ docker volume create my_volume
  • 示例: 创建一个名为 my_volume 的数据卷:
$ docker volume create my_volume

5.3 docker volume inspect

docker volume inspect 命令用于查看数据卷的详细信息。包括存储路径、驱动类型以及挂载的容器等。

$ docker volume inspect my_volume
  • 示例: 查看 my_volume 数据卷的详细信息:
$ docker volume inspect my_volume

5.4 docker volume rm

docker volume rm 命令用于删除一个数据卷。注意,如果有容器在使用该数据卷,删除操作将失败。

$ docker volume rm my_volume
  • 示例: 删除 my_volume 数据卷:
$ docker volume rm my_volume

5.5 docker volume prune

docker volume prune 命令用于删除所有未使用的数据卷。这是一个非常有用的命令,用于清理未使用的资源。

$ docker volume prune
  • 示例: 删除所有未使用的数据卷:
$ docker volume prune

6. Docker Compose

Docker Compose 是一个用于定义和管理多容器 Docker 应用的工具。通过一个 YAML 文件,你可以定义应用的服务、网络和数据卷,并使用一条命令来启动或关闭整个应用。以下是一些常用的 Docker Compose 命令。

6.1 docker-compose up

docker-compose up 命令用于构建、启动并运行定义在 docker-compose.yml 文件中的所有服务。

$ docker-compose up
  • 常用参数:

    • -d: 后台运行服务。
    • --build: 在启动服务前重新构建镜像。
  • 示例: 以后台方式启动所有服务:

$ docker-compose up -d

6.2 docker-compose down

docker-compose down 命令用于停止并移除定义在 docker-compose.yml 文件中的所有服务和网络。

$ docker-compose down
  • 常用参数:

    • --volumes: 移除所有服务使用的数据卷。
    • --rmi all: 删除所有与服务关联的镜像。
  • 示例: 停止服务并删除数据卷:

$ docker-compose down --volumes

6.3 docker-compose build

docker-compose build 命令用于构建或重新构建服务所需的镜像。

$ docker-compose build
  • 常用参数:

    • --no-cache: 不使用缓存来构建镜像。
  • 示例: 构建服务镜像且不使用缓存:

$ docker-compose build --no-cache

6.4 docker-compose start

docker-compose start 命令用于启动已经创建但未运行的服务容器。

$ docker-compose start
  • 示例: 启动所有定义的服务:
$ docker-compose start

6.5 docker-compose stop

docker-compose stop 命令用于停止运行中的服务容器,但不会删除它们。

$ docker-compose stop
  • 示例: 停止所有正在运行

的服务容器:

$ docker-compose stop

6.6 docker-compose restart

docker-compose restart 命令用于重新启动运行中的服务容器。它相当于依次执行 docker-compose stopdocker-compose start

$ docker-compose restart
  • 示例: 重启所有服务容器:
$ docker-compose restart

6.7 docker-compose ps

docker-compose ps 命令用于列出与 docker-compose.yml 文件关联的所有服务容器的状态。这类似于 docker ps,但仅显示与当前 Compose 项目相关的容器。

$ docker-compose ps
  • 示例: 列出当前项目中所有服务容器的状态:
$ docker-compose ps

6.8 docker-compose logs

docker-compose logs 命令用于查看所有服务容器的日志。你可以通过 -f 选项实时查看日志输出,类似于 tail -f

$ docker-compose logs
  • 常用参数:

    • -f: 实时跟踪日志输出。
    • --tail="N": 只显示最后 N 行日志。
  • 示例: 实时查看所有服务容器的日志:

$ docker-compose logs -f

6.9 docker-compose exec

docker-compose exec 命令用于在运行中的服务容器内执行命令。这类似于 docker exec,但专门针对 Docker Compose 环境。

$ docker-compose exec service_name command
  • 示例: 在名为 web 的服务容器中启动一个交互式的 bash shell:
$ docker-compose exec web bash

6.10 docker-compose run

docker-compose run 命令用于启动一个新容器并在其中执行指定命令。与 docker-compose exec 不同的是,docker-compose run 会创建一个新容器,而不是在现有容器中执行命令。

$ docker-compose run service_name command
  • 常用参数:

    • --rm: 在执行完命令后自动移除容器。
    • -d: 在后台运行命令。
  • 示例: 在名为 db 的服务容器中运行 psql 命令并连接到数据库:

$ docker-compose run db psql -U postgres

6.11 docker-compose scale

docker-compose scale 命令用于扩展(或缩减)服务容器的数量。此命令已被弃用,建议使用 docker-compose up --scale 替代。

$ docker-compose scale service_name=num_instances
  • 示例: 扩展 web 服务的容器数量到 3 个实例:
$ docker-compose scale web=3

6.12 docker-compose config

docker-compose config 命令用于验证和查看当前 Compose 文件的配置信息。它会显示所有配置选项,并检查 YAML 语法的正确性。

$ docker-compose config
  • 常用参数:

    • --services: 只列出服务名称。
    • --volumes: 只列出数据卷。
  • 示例: 验证 docker-compose.yml 文件的配置并查看详细信息:

$ docker-compose config

7. Docker Swarm

Docker Swarm 是 Docker 的原生集群管理工具。它可以将多台 Docker 主机聚合成一个集群,并允许你在这个集群上部署和管理应用。以下是一些常用的 Docker Swarm 命令。

7.1 docker swarm init

docker swarm init 命令用于初始化 Docker 主机并将其配置为 Swarm 管理器(Manager)。Swarm 管理器是集群的控制中心,负责管理和调度服务。

$ docker swarm init
  • 常用参数:

    • --advertise-addr: 指定管理器节点的 IP 地址。
  • 示例: 初始化一个 Swarm 集群并指定管理器节点的 IP 地址:

$ docker swarm init --advertise-addr 192.168.1.100

7.2 docker swarm join

docker swarm join 命令用于将一台 Docker 主机加入到一个已经存在的 Swarm 集群中。加入集群后,该主机将作为一个节点来运行容器。

$ docker swarm join --token <TOKEN> <MANAGER-IP>:<PORT>
  • 示例: 将一台 Docker 主机加入到 Swarm 集群:

    $ docker swarm join --token SWMTKN-1-0d4upc... 192.168.1.100:2377
    

7.3 docker node ls

docker node ls 命令用于列出 Swarm 集群中的所有节点。只有在管理器节点上执行该命令才会显示节点列表。

$ docker node ls
  • 示例: 列出当前 Swarm 集群中的所有节点:
$ docker node ls

7.4 docker node inspect

docker node inspect 命令用于查看 Swarm 集群中某个节点的详细信息。

$ docker node inspect <NODE-ID>
  • 示例: 查看某个节点的详细信息:
$ docker node inspect node_id

7.5 docker node update

docker node update 命令用于更新 Swarm 集群中某个节点的属性,例如角色或标签。

$ docker node update --role <ROLE> <NODE-ID>
  • 常用参数:

    • --availability: 设置节点的可用性(active, pause, drain)。
    • --role: 设置节点的角色(manager, worker)。
  • 示例: 将某个节点设置为管理器角色:

$ docker node update --role manager node_id

7.6 docker node rm

docker node rm 命令用于将一个节点从 Swarm 集群中移除。移除节点后,该节点将不再参与容器的调度和运行。

$ docker node rm <NODE-ID>
  • 示例: 从 Swarm 集群中移除某个节点:
$ docker node rm node_id

7.7 docker service create

docker service create 命令用于在 Swarm 集群中创建一个服务。该服务可以在多个节点上运行多个容器实例。

$ docker service create --name <SERVICE-NAME> <IMAGE>
  • 常用参数:

    • --replicas: 设置服务的副本数量。
    • --network: 指定服务要连接的网络。
  • 示例: 在 Swarm 集群中创建一个名为 web 的服务,并运行 3 个副本:

$ docker service create --name web --replicas 3 nginx

7.8 docker service ls

docker service ls 命令用于列出 Swarm 集群中所有运行的服务。它会显示服务的名称、模式、运行中的任务数和镜像等信息。

$ docker service ls
  • 示例: 列出所有服务:
$ docker service ls

7.9 docker service ps

docker service ps 命令用于显示某个服务的任务列表。任务是服务的具体运行实例,每个任务对应一个容器。

$ docker service ps <SERVICE-NAME>
  • 示例: 查看 web 服务的所有任务:
$ docker service ps web

7.10 docker service scale

docker service scale 命令用于动态调整服务的副本数量。在 Swarm 集群中,扩展或缩减服务的副本非常方便。

$ docker service scale <SERVICE-NAME>=<NUM-REPLICAS>
  • 示例: 将 web 服务的副本数量调整为 5 个:
$ docker service scale web=5

7.11 docker service update

docker service update 命令用于更新服务的配置。可以修改服务使用的镜像、环境变量、资源限制等。

$ docker service update --image <NEW-IMAGE> <SERVICE-NAME>
  • 常用参数:

    • --force: 强制更新,即使没有变化。
    • --env-add: 添加环境变量。
  • 示例: 更新 web 服务使用的新镜像:

$ docker service update --image nginx:latest web

7.12 docker service rm

docker service rm 命令用于删除 Swarm 集群中的某个服务。删除服务后,所有与该服务相关的容器将被停止并移除。

$ docker service rm <SERVICE-NAME>
  • 示例: 删除名为 web 的服务:
$ docker service rm web

8. Docker 网络管理命令

Docker 支持多种网络模式,用于连接容器和提供服务。以下是 Docker 网络管理的常用命令。

8.1 docker network ls

docker network ls 命令用于列出所有 Docker 网络。Docker 默认提供了几个网络,如 bridgehostnone

$ docker network ls
  • 示例: 列出所有 Docker 网络:
$ docker network ls

8.2 docker network create

docker network create 命令用于创建一个新的 Docker 网络。你可以指定网络的驱动程序(如 bridgeoverlay)以及其他选项。

$ docker network create <NETWORK-NAME>
  • 常用参数:

    • -d: 指定网络驱动程序(如 bridgeoverlay)。
    • --subnet: 设置自定义子网。
    • --gateway: 设置自定义网关。
  • 示例: 创建一个名为 my_bridge 的桥接网络:

$ docker network create -d bridge my_bridge

8.3 docker network inspect

docker network inspect 命令用于查看指定 Docker 网络的详细信息,包括网络 ID、驱动程序、容器连接等。

$ docker network inspect <NETWORK-NAME>
  • 示例: 查看 my_bridge 网络的详细信息:
$ docker network inspect my_bridge

8.4 docker network connect

docker network connect 命令用于将某个容器连接到指定的 Docker 网络。这样容器就可以与网络中的其他容器通信。

$ docker network connect <NETWORK-NAME> <CONTAINER>
  • 示例: 将容器 nginx_container 连接到 my_bridge 网络:
$ docker network connect my_bridge nginx_container

8.5 docker network disconnect

docker network disconnect 命令用于将某个容器从指定的 Docker 网络中断开。断开后,容器将无法与该网络中的其他容器通信。

$ docker network disconnect <NETWORK-NAME> <CONTAINER>
  • 示例: 将容器 nginx_containermy_bridge 网络中断开:
$ docker network disconnect my_bridge nginx_container

8.6 docker network rm

docker network rm 命令用于删除指定的 Docker 网络。删除网络前,必须先断开与该网络相关联的所有容器。

$ docker network rm <NETWORK-NAME>
  • 示例: 删除名为 my_bridge 的网络:
$ docker network rm my_bridge

9. Docker 数据卷管理命令

数据卷是 Docker 中用于持久化和共享数据的重要机制。以下是常用的 Docker 数据卷管理命令。

9.1 docker volume ls

docker volume ls 命令用于列出所有 Docker 数据卷。数据卷可以在多个容器之间共享,并且数据在容器删除后依然存在。

$ docker volume ls
  • 示例: 列出所有 Docker 数据卷:
$ docker volume ls

9.2 docker volume create

docker volume create 命令用于创建一个新的 Docker 数据卷。你可以为数据卷指定名称,也可以让 Docker 自动生成。

$ docker volume create <VOLUME-NAME>
  • 示例: 创建一个名为 my_data 的数据卷:
$ docker volume create my_data

9.3 docker volume inspect

docker volume inspect 命令用于查看指定数据卷的详细信息,包括卷名、挂载点、创建时间等。

$ docker volume inspect <VOLUME-NAME>
  • 示例: 查看 my_data 数据卷的详细信息:
$ docker volume inspect my_data

9.4 docker volume rm

docker volume rm 命令用于删除指定的 Docker 数据卷。删除数据卷前,必须先确保没有容器在使用它。

$ docker volume rm <VOLUME-NAME>
  • 示例: 删除名为 my_data 的数据卷:
$ docker volume rm my_data

9.5 docker volume prune

docker volume prune 命令用于删除所有未使用的 Docker 数据卷。这有助于清理系统中不再需要的数据卷,从而释放磁盘空间。

$ docker volume prune
  • 示例: 删除所有未使用的 Docker 数据卷:
$ docker volume prune

10. Docker 安全与权限管理

Docker 提供了一些命令来管理容器的安全性和权限设置,确保容器化应用在受控和安全的环境中运行。

10.1 docker exec --user

docker exec 命令的 --user 选项允许你以指定用户身份在容器内执行命令。这对于执行特定用户权限下的任务非常有用。

$ docker exec --user <USER> <CONTAINER> <COMMAND>
  • 示例: 以 nginx 用户身份在容器 nginx_container 内执行 bash 命令:
$ docker exec --user nginx nginx_container bash

10.2 docker run --cap-add

docker run 命令的 --cap-add 选项允许你向容器添加特定的 Linux 功能(capabilities)。这在需要赋予容器特定权限时非常有用。

$ docker run --cap-add <CAPABILITY> <IMAGE>
  • 示例: 运行一个带有 NET_ADMIN 功能的容器:
$ docker run --cap-add NET_ADMIN ubuntu

10.3 docker run --security-opt

docker run 命令的 --security-opt 选项允许你配置容器的安全选项,例如应用 AppArmor 或 SELinux 配置文件。

$ docker run --security-opt <OPTION> <IMAGE>
  • 示例: 运行一个应用了 seccomp 配置文件的容器:
$ docker run --security-opt seccomp=unconfined ubuntu

11. Docker 调试与排错

Docker 提供了许多命令和工具,帮助用户调试和排查容器问题,确保容器化应用的稳定运行。

11.1 docker logs

docker logs 命令用于查看容器的标准输出日志。日志对于调试容器内的应用非常重要。

$ docker logs <CONTAINER>
  • 常用参数:

    • -f: 实时跟踪日志输出。
    • --tail: 只显示最后 N 行日志。
  • 示例: 实时查看容器 nginx_container 的日志:

$ docker logs -f nginx_container

11.2 docker inspect

docker inspect 命令用于查看容器或镜像的详细信息。该命令会返回一个包含所有容器配置信息的 JSON 对象。

$ docker inspect <CONTAINER|IMAGE>
  • 示例: 查看容器 nginx_container 的详细信息:
$ docker inspect nginx_container

11.3 docker events

docker events 命令用于实时监听 Docker 守护进程的事件流。这包括容器启动、停止、网络连接等事件。

$ docker events
  • 示例: 实时监听 Docker 的所有事件:
$ docker events

11.4 docker stats

docker stats 命令用于显示容器的实时资源使用情况,包括 CPU、内存、网络和存储 I/O。这有助于监控容器的性能。

$ docker stats
  • 示例: 实时监控所有容器的资源使用情况:
$ docker stats

11.5 docker top

docker top 命令用于显示容器内运行的进程。这类似于 Linux 的top 命令,能够帮助你查看容器内的活动进程,并分析其资源消耗情况。

$ docker top <CONTAINER>
  • 示例: 查看容器 nginx_container 内的活动进程:
$ docker top nginx_container

11.6 docker diff

docker diff 命令用于显示容器文件系统的更改。通过这个命令,你可以查看容器启动后文件系统中被修改、添加或删除的文件。

$ docker diff <CONTAINER>
  • 示例: 查看容器 nginx_container 内文件系统的更改:
$ docker diff nginx_container

11.7 docker ps --filter

docker ps 命令的 --filter 选项允许你通过特定条件来筛选容器。这对于管理大量容器时非常有用。

$ docker ps --filter <FILTER>
  • 常用过滤条件:

    • status=running: 筛选正在运行的容器。
    • name=<CONTAINER-NAME>: 筛选特定名称的容器。
    • label=<LABEL>: 筛选带有特定标签的容器。
  • 示例: 仅显示带有 web 标签的运行中容器:

$ docker ps --filter "status=running" --filter "label=web"

12. Docker 镜像管理命令

Docker 镜像是容器的基础,管理镜像是 Docker 使用中的重要部分。以下是一些常用的 Docker 镜像管理命令。

12.1 docker images

docker images 命令用于列出本地 Docker 主机上的所有镜像。它显示了镜像的仓库名、标签、镜像 ID、创建时间和大小。

$ docker images
  • 常用参数:

    • -a: 显示所有镜像,包括中间层镜像。
    • --filter: 按条件筛选镜像。
  • 示例: 列出本地所有 Docker 镜像:

$ docker images

12.2 docker rmi

docker rmi 命令用于删除一个或多个本地镜像。删除镜像前,必须先确保没有容器在使用它。

$ docker rmi <IMAGE>
  • 示例: 删除名为 nginx:latest 的镜像:
$ docker rmi nginx:latest

12.3 docker tag

docker tag 命令用于为已有的镜像创建一个新的标签。标签可以帮助你更好地管理和区分镜像版本。

$ docker tag <SOURCE_IMAGE> <TARGET_IMAGE>
  • 示例: 为 nginx:latest 镜像创建一个新的标签 nginx:stable
$ docker tag nginx:latest nginx:stable

12.4 docker save

docker save 命令用于将一个或多个 Docker 镜像保存为 tar 包文件。保存的镜像可以通过 docker load 命令导入到其他 Docker 主机中。

$ docker save -o <FILE_PATH> <IMAGE>
  • 示例: 将 nginx:latest 镜像保存为 nginx_latest.tar 文件:
$ docker save -o nginx_latest.tar nginx:latest

12.5 docker load

docker load 命令用于从一个 tar 包文件中导入 Docker 镜像。这个命令通常与 docker save 搭配使用,便于在不同主机之间传输镜像。

$ docker load -i <FILE_PATH>
  • 示例: 从 nginx_latest.tar 文件中加载 Docker 镜像:
$ docker load -i nginx_latest.tar

12.6 docker import

docker import 命令用于从一个 tar 包文件中导入文件系统,并创建为 Docker 镜像。与 docker load 不同的是,docker import 允许你从其他容器格式(如 .tar.tar.gz 等)创建新的 Docker 镜像。

$ docker import <FILE_PATH> <NEW_IMAGE>
  • 示例: 从 ubuntu.tar 文件中导入文件系统,并创建为 myubuntu 镜像:
$ docker import ubuntu.tar myubuntu

12.7 docker history

docker history 命令用于查看某个镜像的构建历史。它显示了镜像每一层的创建指令、大小和创建时间。

$ docker history <IMAGE>
  • 示例: 查看 nginx:latest 镜像的构建历史:
$ docker history nginx:latest

12.8 docker commit

docker commit 命令用于将一个运行中的容器保存为新的 Docker 镜像。你可以为这个新镜像指定标签,并添加描述信息。

$ docker commit <CONTAINER> <NEW_IMAGE>
  • 常用参数:

    • -m: 为新镜像添加提交信息。
    • -a: 为新镜像指定作者信息。
  • 示例: 将容器 nginx_container 保存为新的 mynginx:latest 镜像:

$ docker commit -m "Custom Nginx" -a "Author Name" nginx_container mynginx:latest

13. Docker 容器监控与资源限制

Docker 提供了多种方式来监控容器的资源使用情况,并对容器施加资源限制,以确保系统的稳定性和性能。

13.1 docker stats

docker stats 命令显示所有容器的实时资源使用情况,包括 CPU、内存、网络和存储 I/O。

$ docker stats
  • 示例: 实时监控所有容器的资源使用情况:
$ docker stats

13.2 docker update

docker update 命令用于动态调整运行中容器的资源限制,如 CPU 和内存。你可以对多个容器同时进行资源调整。

$ docker update <OPTIONS> <CONTAINER>
  • 常用参数:

    • --cpu-shares: 调整容器的 CPU 共享值。
    • --memory: 设置容器的内存限制。
    • --restart: 调整容器的重启策略。
  • 示例: 将容器 nginx_container 的内存限制调整为 512MB:

$ docker update --memory 512m nginx_container

13.3 docker run --memory

docker run 命令的 --memory 选项用于在启动容器时设置其内存限制。这在资源有限的系统中非常有用。

$ docker run --memory <MEMORY_LIMIT> <IMAGE>
  • 示例: 运行一个内存限制为 256MB 的容器:
$ docker run --memory 256m ubuntu

13.4 docker run --cpus

docker run 命令的 --cpus 选项用于在启动容器时设置其 CPU 限制。你可以指定容器可以使用的 CPU 数量。

$ docker run --cpus=<CPU_LIMIT> <IMAGE>
  • 示例: 运行一个 CPU 限制为 0.5(即最多使用一半 CPU 资源)的容器:
$ docker run --cpus=0.5 ubuntu

14. Docker 高级功能

除了基本的容器管理命令,Docker 还提供了一些高级功能,用于提升容器化应用的性能、灵活性和安全性。

14.1 docker checkpoint

docker checkpoint 命令用于为运行中的容器创建检查点。这允许你将容器的当前状态保存下来,并在未来恢复。

$ docker checkpoint create <CONTAINER> <CHECKPOINT_NAME>
  • 示例: 为容器 nginx_container 创建一个名为 checkpoint1 的检查点:
$ docker checkpoint create nginx_container checkpoint1

14.2 docker restore

docker restore 命令用于从检查点恢复容器的运行状态。这对于长时间运行的任务或需要中断恢复的应用非常有用。

$ docker start --checkpoint <CHECKPOINT_NAME> <CONTAINER>
  • 示例: 从 checkpoint1 检查点恢复容器 nginx_container
$ docker start --checkpoint checkpoint1 nginx_container

14.3 docker exec --privileged

docker exec 命令的 --privileged 选项允许你在容器中执行命令时提升权限,类似于 Linux 系统中的 sudo。这对于需要访问特权资源或执行高级操作的场景非常有用。

$ docker exec --privileged <CONTAINER> <COMMAND>
  • 示例: 在容器 nginx_container 中以特权模式执行 bash 交互式命令行:
$ docker exec --privileged -it nginx_container bash

14.4 docker run --network

docker run 命令的 --network 选项允许你在启动容器时指定其网络模式。Docker 支持多种网络模式,包括 bridge(桥接网络)、host(主机网络)、none(无网络)以及用户自定义网络。

$ docker run --network <NETWORK_MODE> <IMAGE>
  • 常用网络模式:

    • bridge: 默认网络模式,容器间通过 NAT 方式通信。
    • host: 容器与宿主机共享网络栈,性能较高但隔离性较差。
    • none: 容器没有网络接口。
    • overlay: 用于多主机网络,通过 Docker Swarm 或 Kubernetes 管理。
  • 示例: 运行一个使用 host 网络模式的容器:

$ docker run --network host nginx

14.5 docker run --security-opt

docker run 命令的 --security-opt 选项允许你在启动容器时设置安全选项。这些选项包括 SELinux、AppArmor 配置等,用于增强容器的安全性。

$ docker run --security-opt <SECURITY_OPTION> <IMAGE>
  • 示例: 运行一个禁用所有特权的容器:
$ docker run --security-opt no-new-privileges nginx

14.6 docker build --squash

docker build 命令的 --squash 选项用于在构建镜像时将多个层合并为一层,从而减少镜像的大小。这在镜像部署时能节省带宽和存储空间。

$ docker build --squash -t <IMAGE_NAME> .
  • 示例: 构建一个压缩层的 Docker 镜像:
$ docker build --squash -t my_compressed_image .

14.7 docker build --no-cache

docker build 命令的 --no-cache 选项用于在构建镜像时不使用缓存层。这确保了每次构建都会拉取最新的基础镜像和依赖项。

$ docker build --no-cache -t <IMAGE_NAME> .
  • 示例: 构建一个不使用缓存的 Docker 镜像:
$ docker build --no-cache -t my_fresh_image .

14.8 docker secret

docker secret 命令用于管理 Docker Swarm 集群中的敏感数据(如密码、API 密钥等)。你可以使用这个命令创建、查看、更新和删除集群中的密钥。

$ docker secret <COMMAND>
  • 常用子命令:

    • create: 创建一个新密钥。
    • ls: 列出所有密钥。
    • rm: 删除一个密钥。
    • inspect: 查看密钥的详细信息。
  • 示例: 创建一个名为 my_secret 的新密钥:

$ echo "my_secret_value" | docker secret create my_secret -

14.9 docker service update --replicas

docker service update 命令的 --replicas 选项用于动态调整 Swarm 服务的副本数量。这在扩展或缩减服务时非常有用。

$ docker service update --replicas <NUMBER_OF_REPLICAS> <SERVICE_NAME>
  • 示例: 将服务 web_service 的副本数量调整为 5:
$ docker service update --replicas 5 web_service

15. Docker Compose 命令

Docker Compose 是用于定义和管理多容器 Docker 应用的工具。它通过 docker-compose.yml 文件来描述应用的服务、网络和卷,并提供了一系列命令来管理这些服务。

15.1 docker-compose up

docker-compose up 命令用于启动由 docker-compose.yml 文件定义的所有服务。如果服务尚未构建,up 命令会先构建它们。

$ docker-compose up
  • 常用参数:

    • -d: 在后台模式启动服务。
    • --build: 强制重新构建服务镜像。
    • --force-recreate: 强制重新创建容器。
  • 示例: 在后台模式启动所有服务:

$ docker-compose up -d

15.2 docker-compose down

docker-compose down 命令用于停止并删除由 docker-compose.yml 文件定义的所有服务和网络。

$ docker-compose down
  • 常用参数:

    • --volumes: 删除服务所使用的所有数据卷。
    • --rmi: 删除服务所使用的镜像。
  • 示例: 停止并删除所有服务和网络,同时删除数据卷:

$ docker-compose down --volumes

15.3 docker-compose ps

docker-compose ps 命令用于显示由 docker-compose.yml 文件定义的所有服务的状态。它显示了服务的名称、命令、状态、端口等信息。

$ docker-compose ps
  • 示例: 显示所有服务的状态:
$ docker-compose ps

15.4 docker-compose logs

docker-compose logs 命令用于查看由 docker-compose.yml 文件定义的所有服务的日志。这对于调试和监控服务运行情况非常有帮助。

$ docker-compose logs
  • 常用参数:

    • -f: 实时跟踪日志输出。
    • --tail: 只显示最近的日志行数。
  • 示例: 实时跟踪所有服务的日志输出:

$ docker-compose logs -f

15.5 docker-compose build

docker-compose build 命令用于根据 docker-compose.yml 文件重新构建服务镜像。这通常用于更新基础镜像或代码更改后的重新构建。

$ docker-compose build
  • 常用参数:

    • --no-cache: 不使用缓存构建镜像。
    • --pull: 始终拉取最新的基础镜像。
  • 示例: 使用最新的基础镜像重新构建服务:

$ docker-compose build --pull

15.6 docker-compose exec

docker-compose exec 命令允许你在指定的服务容器内执行命令。与 docker exec 类似,这对于在运行中的服务内进行调试非常有用。

$ docker-compose exec <SERVICE> <COMMAND>
  • 示例: 在 web 服务容器内打开一个 bash 交互式命令行:
$ docker-compose exec web bash

15.7 docker-compose scale

docker-compose scale 命令用于调整服务的副本数量。与 Swarm 模式下的 docker service update --replicas 类似,这对于横向扩展应用非常有用。

$ docker-compose scale <SERVICE>=<NUMBER_OF_REPLICAS>
  • 示例: 将 web 服务的副本数量调整为 3:
$ docker-compose scale web=3

16. Docker 网络命令

Docker 提供了强大的网络管理功能,你可以使用这些命令创建、管理和监控 Docker 网络,从而为容器化应用提供隔离和连接。

16.1 docker network ls

docker network ls 命令用于列出所有 Docker 网络。它显示了网络的名称、ID、驱动程序类型和范围(local 或 global)。

$ docker network ls
  • 示例: 列出所有 Docker 网络:
$ docker network ls

16.2 docker network create

docker network create 命令用于创建一个新的 Docker 网络。你可以为网络指定名称和驱动程序。

$ docker network create <NETWORK_NAME>
  • 常用驱动程序:

    • bridge: 默认驱动程序,适用于单机网络。
    • overlay: 适用于跨主机的 Swarm 集群网络。
    • macvlan: 允许容器拥有自己的 MAC 地址并与主机网络进行直接通信。
    • host: 使用主机的网络栈(通常用于高性能网络)。
  • 示例: 创建一个名为 my_network 的桥接网络:

$ docker network create --driver bridge my_network

16.3 docker network rm

docker network rm 命令用于删除一个或多个 Docker 网络。在删除网络之前,请确保没有容器在使用这些网络。

$ docker network rm <NETWORK_NAME>
  • 示例: 删除名为 my_network 的网络:
$ docker network rm my_network

16.4 docker network inspect

docker network inspect 命令用于查看 Docker 网络的详细信息,包括网络配置、已连接的容器、IP 地址等。

$ docker network inspect <NETWORK_NAME>
  • 示例: 查看名为 my_network 的网络详细信息:
$ docker network inspect my_network

16.5 docker network connect

docker network connect 命令用于将一个容器连接到一个 Docker 网络。这允许容器通过指定的网络与其他容器进行通信。

$ docker network connect <NETWORK_NAME> <CONTAINER>
  • 示例: 将容器 nginx_container 连接到 my_network 网络:
$ docker network connect my_network nginx_container

16.6 docker network disconnect

docker network disconnect 命令用于将一个容器从指定的 Docker 网络中断开。这有助于管理网络连接和隔离容器。

$ docker network disconnect <NETWORK_NAME> <CONTAINER>
  • 示例: 将容器 nginx_containermy_network 网络中断开:
$ docker network disconnect my_network nginx_container

17. Docker 卷管理命令

Docker 卷用于持久化和共享容器数据。以下是一些常用的 Docker 卷管理命令。

17.1 docker volume ls

docker volume ls 命令用于列出所有 Docker 卷。它显示了卷的名称和驱动程序。

$ docker volume ls
  • 示例: 列出所有 Docker 卷:
$ docker volume ls

17.2 docker volume create

docker volume create 命令用于创建一个新的 Docker 卷。你可以为卷指定名称和驱动程序。

$ docker volume create <VOLUME_NAME>
  • 示例: 创建一个名为 my_volume 的卷:
$ docker volume create my_volume

17.3 docker volume inspect

docker volume inspect 命令用于查看 Docker 卷的详细信息,包括卷的驱动程序、挂载点、创建时间等。

$ docker volume inspect <VOLUME_NAME>
  • 示例: 查看名为 my_volume 的卷详细信息:
$ docker volume inspect my_volume

17.4 docker volume rm

docker volume rm 命令用于删除一个或多个 Docker 卷。在删除卷之前,请确保没有容器在使用这些卷。

$ docker volume rm <VOLUME_NAME>
  • 示例: 删除名为 my_volume 的卷:
$ docker volume rm my_volume

17.5 docker volume prune

docker volume prune 命令用于删除所有未被使用的 Docker 卷。这个命令有助于清理系统中的旧卷,释放存储空间。

$ docker volume prune
  • 示例: 删除所有未使用的 Docker 卷:
$ docker volume prune

18. Docker 容器数据管理

Docker 提供了管理容器数据的功能,包括挂载卷、绑定挂载和配置数据目录。

18.1 数据卷(Volumes)

数据卷是 Docker 提供的持久化数据机制。它们能够在容器生命周期之外保留数据,并且可以在多个容器之间共享。

  • 创建和挂载数据卷:
$ docker run -d -v <VOLUME_NAME>:<CONTAINER_PATH> <IMAGE>
  • 示例: 使用名为 my_volume 的卷挂载到容器的 /data 目录:
$ docker run -d -v my_volume:/data nginx

18.2 绑定挂载(Bind Mounts)

绑定挂载将主机文件系统中的目录或文件挂载到容器内。这允许容器访问主机文件系统中的特定路径。

  • 创建和挂载绑定挂载:
$ docker run -d -v <HOST_PATH>:<CONTAINER_PATH> <IMAGE>
  • 示例: 将主机的 /host/data 目录挂载到容器的 /data 目录:
$ docker run -d -v /host/data:/data nginx

18.3 Dockerfile 中的数据卷

Dockerfile 中,你可以使用 VOLUME 指令定义容器内的数据卷。这将创建一个匿名卷,并将其挂载到容器的指定目录。

  • 示例: 在 Dockerfile 中定义数据卷:
VOLUME ["/data"]
  • 使用: 构建镜像并运行容器:
$ docker build -t my_image .
$ docker run -d my_image

18.4 数据卷容器(Data Containers)

数据卷容器是只包含数据卷的容器。其他容器可以通过 --volumes-from 选项将数据卷从数据卷容器挂载过来。这种方法用于在多个容器之间共享数据。

  • 创建数据卷容器:
$ docker run -d --name data_container -v /data alpine
  • 使用数据卷容器:
$ docker run -d --volumes-from data_container nginx

19. Docker 配置管理

Docker 提供了多种方式来管理配置,包括配置文件、环境变量和 secrets。以下是一些管理 Docker 配置的方法。

19.1 配置文件

Docker 容器可以通过挂载配置文件来管理应用配置。你可以将主机上的配置文件挂载到容器内,从而实现配置的管理和更新。

  • 示例: 将主机的 /host/config 文件夹挂载到容器的 /etc/config 目录:
$ docker run -d -v /host/config:/etc/config nginx

19.2 环境变量

你可以通过 -e 选项在运行容器时设置环境变量。这些环境变量可以用于配置容器内的应用。

  • 示例: 设置环境变量 ENV_VAR 并运行容器:
$ docker run -d -e ENV_VAR=value nginx

19.3 Docker secrets

Docker secrets 适用于 Swarm 模式中的敏感数据管理。你可以创建 secrets 并将它们提供给服务,从而实现对敏感数据的安全管理。

  • 创建 secret:
$ echo "my_secret_value" | docker secret create my_secret -
  • 在服务中使用 secret:
$ docker service create --name my_service --secret my_secret nginx

20. Docker 资源监控与调优

Docker 提供了一些工具和命令来监控容器的资源使用情况,并对容器进行性能调优。

20.1 资源限制

你可以使用 docker run 命令的 --memory--cpus 选项来限制容器的内存和 CPU 使用。

  • 示例: 限制容器的内存为 512MB 和 CPU 使用为 0.5 核:
$ docker run --memory 512m --cpus 0.5 nginx

20.2 监控工具

Docker 允许你使用第三方监控工具来跟踪容器的资源使用情况。一些常见的监控工具包括 Prometheus、Grafana 和 Datadog。

  • 使用 Docker stats:
$ docker stats

这个命令会显示所有容器的实时资源使用情况,包括 CPU、内存、网络和 I/O。

  • 集成 Datadog:

Datadog 提供了 Docker 监控的完整解决方案,包括集成 Docker 的 Agent 来跟踪容器的指标和日志。

  • 安装 Datadog Agent:
$ docker run -d --name datadog-agent \
  -e DD_API_KEY=<YOUR_DATADOG_API_KEY> \
  -v /var/run/docker.sock:/var/run/docker.sock \
  datadog/agent:latest
  • 使用 cAdvisor:

cAdvisor 是一个开源工具,可以提供容器的详细性能数据,如 CPU、内存、网络和磁盘 I/O。

  • 启动 cAdvisor:
$ docker run -d \
  --name=cadvisor \
  --privileged \
  -p 8080:8080 \
  google/cadvisor:latest

访问 http://localhost:8080 可以查看容器的性能数据。

20.3 性能调优

  • 调整 I/O 性能:

对于高性能 I/O 密集型应用,你可以使用 Docker 的存储驱动(如 overlay2)和配置卷来优化性能。

  • 优化网络性能:

调整 Docker 网络设置,使用自定义网络驱动(如 macvlan)来提高网络性能。配置合理的网络策略也有助于改善性能。

  • CPU 和内存限制:

为容器设置适当的 CPU 和内存限制,避免资源争用,提高容器性能。

  • 设置 CPU 限制:
$ docker run --cpus="1.5" <IMAGE>
  • 设置内存限制:
$ docker run --memory="1g" <IMAGE>

21. Docker 与云服务集成

Docker 可以与各种云服务平台集成,提供更强大的容器管理和自动化功能。

21.1 Docker 与 AWS

  • ECS (Elastic Container Service):

    AWS ECS 是一种高性能容器管理服务,支持 Docker 容器的部署和扩展。可以使用 AWS CLI 和 ECS 控制台来管理容器服务。

    • 创建 ECS 集群:
$ aws ecs create-cluster --cluster-name my-cluster
  • 部署服务到 ECS:
$ aws ecs create-service --cluster my-cluster --service-name my-service --task-definition my-task
  • ECR (Elastic Container Registry):

AWS ECR 是一个托管 Docker 镜像的服务。可以将镜像推送到 ECR 并在 ECS 中使用。

  • 登录 ECR:
$ aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
  • 推送镜像到 ECR:
$ docker tag my_image:latest <account-id>.dkr.ecr.<region>.amazonaws.com/my_repo:latest
$ docker push <account-id>.dkr.ecr.<region>.amazonaws.com/my_repo:latest

21.2 Docker 与 Azure

  • Azure Container Instances (ACI):

    Azure ACI 提供了无服务器容器服务,适用于快速运行 Docker 容器。

    • 创建 ACI 实例:
$ az container create --resource-group myResourceGroup --name mycontainer --image my_image --cpu 1 --memory 1.5
  • Azure Kubernetes Service (AKS):

    AKS 是 Azure 的托管 Kubernetes 服务,支持部署和管理 Docker 容器。

    • 创建 AKS 集群:
$ az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 1 --enable-addons monitoring --generate-ssh-keys
  • 部署到 AKS:
$ kubectl apply -f deployment.yaml

21.3 Docker 与 Google Cloud

  • Google Kubernetes Engine (GKE):

    GKE 是 Google Cloud 提供的托管 Kubernetes 服务,支持 Docker 容器的部署和管理。

    • 创建 GKE 集群:
$ gcloud container clusters create my-cluster --num-nodes=1
  • 部署到 GKE:
$ kubectl apply -f deployment.yaml
  • Google Container Registry (GCR):

    GCR 是 Google Cloud 提供的托管 Docker 镜像服务。

    • 登录 GCR:
$ gcloud auth configure-docker
  • 推送镜像到 GCR:
$ docker tag my_image gcr.io/my-project/my_image:latest
$ docker push gcr.io/my-project/my_image:latest

22. Docker 安全最佳实践

确保 Docker 容器的安全性对于保护应用和数据至关重要。以下是一些 Docker 安全最佳实践。

22.1 使用非 root 用户

容器应使用非 root 用户运行,以减少潜在的安全风险。可以通过 Dockerfile 的 USER 指令设置容器用户。

  • 示例:
FROM ubuntu
RUN useradd -m myuser
USER myuser

22.2 限制容器权限

使用 Docker 的安全选项,如 --cap-drop--security-opt,来限制容器的权限。

  • 示例:
$ docker run --cap-drop ALL --security-opt no-new-privileges nginx

22.3 定期扫描镜像

使用工具如 Docker Bench for Security 和 Trivy 定期扫描 Docker 镜像,以发现潜在的漏洞和安全问题。

  • 使用 Trivy 扫描镜像:
$ trivy image my_image

22.4 更新和修补

定期更新 Docker 和容器镜像,确保使用最新的安全修补程序和版本。

  • 示例:
$ docker pull nginx:latest

22.5 使用 Docker Content Trust

启用 Docker Content Trust 以确保你从 Docker Hub 获取的镜像是经过签名的,防止受到篡改。

  • 启用 Docker Content Trust:
$ export DOCKER_CONTENT_TRUST=1

23. Docker 性能优化

为了确保 Docker 容器的最佳性能,可以对 Docker 进行优化。以下是一些性能优化的建议。

23.1 优化镜像大小

  • 减少镜像层数:

    使用 RUN 指令合并命令,减少镜像层数,优化镜像大小。

    • 示例:
RUN apt-get update && apt-get install -y \
  curl \
  vim \
  && rm -rf /var/lib/apt/lists/*
  • 选择合适的基础镜像:

    选择体积小且功能足够的基础镜像,例如使用 alpine 代替 ubuntu

    • 示例:
FROM alpine:latest

23.2 优化容器启动时间

  • 预编译应用:

    在构建镜像时预编译应用,减少容器启动时的编译时间。

    • 示例:
COPY precompiled-app /app/
  • 减少容器启动脚本的复杂度:

    避免在启动脚本中执行复杂的操作,减少容器启动时间。

23.3 配置资源限制

  • 设置适当的 CPU 和内存限制:

    为容器设置合理的 CPU 和内存限制,确保容器在资源使用上的平衡。

    • 示例:
$ docker run --memory="2g" --cpus="1.0" my_image

23.4 使用 Docker Compose 进行服务管理

  • 定义服务:

    使用 Docker Compose 文件来定义和管理多个服务,从而提高容器的组织性和性能管理能力。

    • 示例:
version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3天前
|
安全 Docker 容器
|
3天前
|
网络安全 数据安全/隐私保护 Docker
|
2月前
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
189 56
|
2天前
|
存储 关系型数据库 MySQL
|
12天前
|
安全 网络安全 开发者
Docker学习笔记(一):Docker命令总结
本文介绍了Docker的基本概念、优点以及常用命令。Docker是一个开源的应用容器引擎,它通过容器打包应用程序及其依赖项,实现快速部署和迁移。主要优点包括轻量级、可移植性、易于管理、安全性和开源性。文章还区分了镜像和容器的概念,并提供了构建镜像、查看容器、运行容器、停止和删除容器等常用Docker命令的示例。
101 0
|
18天前
|
Linux 网络安全 Docker
安装后无法使用 Docker 命令
【10月更文挑战第3天】
44 2
|
24天前
|
安全 Shell Linux
docker进入容器命令
docker进入容器命令
|
24天前
|
运维 数据库 开发者
docker回顾--docker compose详细解释,安装,与常用命令
docker回顾--docker compose详细解释,安装,与常用命令
|
10天前
|
网络协议 Docker 容器
docker pull命令拉取镜像失败的解决方案
docker pull命令拉取镜像失败的解决方案
196 0
|
2月前
|
Linux Docker 容器
linux之docker命令
linux之docker命令