Docker常用命令

Docker常用命令

Windows安装

Docker: Accelerated Container Application Development

如果碰到Docker Desktop - WSL update failed:

打开CMD,执行:

wsl --set-default-version 2
wsl --update

images-镜像

以下是Docker关于镜像的相关命令:

1. 搜索镜像

docker search [镜像名]

例如:docker search nginx

2. 下载镜像

docker pull [镜像名]:[标签]

例如:docker pull nginx:latest

3. 下载镜像

docker images [选项]

选项:
-a:列出所有镜像(包括中间层)
-q:只显示镜像ID
--digests:显示镜像摘要信息
--no-trunc:显示完整的镜像信息

4. 删除镜像

docker rmi [镜像ID或镜像名]

选项:
-f:强制删除镜像
-a:删除所有镜像

5. 构建镜像

docker build -t [镜像名]:[标签] [Dockerfile所在路径]

例如:docker build -t nginx:1.0 .

6. 导入镜像

docker load -i 镜像保存文件位置

例如:docker load -i /data/nginx.tar

7. 保存镜像

docker save -o 保存的目标文件名称 镜像名

例如:docker save -o /data/nginx.tar nginx

8. 给镜像打标签

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

例如:docker tag nginx 10.10.10.200/software/nginx:1.26

container-容器

1. 容器生命周期管理

  • docker run:启动一个新容器。例如:

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

    常用选项:

    • -d:后台运行容器。
    • -it:以交互模式运行容器,并打开终端。
    • --name:为容器命名。
    • -p:端口映射,将主机的端口映射到容器。
    • -v:卷挂载,将主机目录映射到容器内的目录。
  • docker start:启动一个已经停止的容器。例如:

    docker start <container_name|container_id>
    
  • docker stop:停止运行的容器。例如:

    docker stop <container_name|container_id>
    
  • docker restart:重启容器。例如:

    docker restart <container_name|container_id>
    
  • docker kill:强制停止容器。例如:

    docker kill <container_name|container_id>
    
  • docker rm:删除一个已停止的容器。例如:

    docker rm <container_name|container_id>
    
  • docker exec:在正在运行的容器中执行命令。例如:

    docker exec -it <container_name|container_id> <command>
    

2. 查看容器状态

  • docker ps:列出当前正在运行的容器。例如:

    docker ps
    

    常用选项:

    • -a:列出所有容器,包括已停止的容器。
  • docker inspect:查看容器的详细信息。例如:

    docker inspect <container_name|container_id>
    
  • docker logs:查看容器的日志输出。例如:

    docker logs <container_name|container_id>
    

    常用选项:

    • -f:实时查看日志。
    • --tail:只查看最近的若干行日志。

3. 容器资源管理

  • docker top:查看容器中的进程。例如:

    docker top <container_name|container_id>
    
  • docker stats:实时显示容器的资源使用情况(CPU、内存、网络等)。例如:

    docker stats
    

4. 容器文件系统管理

  • docker cp:在容器和主机之间拷贝文件。例如:

    docker cp <container_name|container_id>:<container_path> <host_path>
    
  • docker commit:将当前容器的更改提交为一个新镜像。例如:

    docker commit <container_name|container_id> <new_image_name>
    

5. 网络管理

  • docker network ls:列出 Docker 网络。
  • docker network create:创建新的 Docker 网络。
  • docker network connect:将容器连接到某个网络。
  • docker network disconnect:将容器从网络中断开。

6. 容器卷管理

  • docker volume ls:列出所有卷。
  • docker volume create:创建一个新卷。
  • docker volume rm:删除卷。

7. 停止和删除所有容器(批量操作)

  • 停止所有容器
    docker stop $(docker ps -q)
    
  • 删除所有容器
    docker rm $(docker ps -a -q)
    

8. 其他

  • docker attach:附加到运行中的容器终端。例如:
    docker attach <container_name|container_id>
    

Dockerfile

1. 基本概念

  • Dockerfile:一个文本文件,其中包含了一系列指令,Docker 引擎根据这些指令构建镜像。
  • 镜像:Dockerfile 构建后生成的可执行软件包,包含了运行应用所需的代码、库、环境变量等。
  • :Docker 镜像由多个层(Layer)构成,每一条指令都会创建一个新的层。层是不可变的,这使得 Docker 镜像更为高效和可重用。

2. 常用指令

以下是一些常用的 Dockerfile 指令:

指令 说明
FROM 指定基础镜像,Dockerfile 的第一行通常是此指令。
MAINTAINER 指定维护者信息(不推荐使用,使用 LABEL 替代)。
LABEL 添加元数据到镜像,例如作者、版本等。
RUN 在构建镜像时执行命令(例如安装软件包)。
CMD 指定容器启动时要执行的命令,可以被 docker run 命令覆盖。
ENTRYPOINT 设置容器启动时的默认命令,不能被 docker run 轻易覆盖。
COPY 将文件或目录从主机复制到镜像中。
ADD 类似于 COPY,但还支持 URL 和自动解压压缩文件。
ENV 设置环境变量。
EXPOSE 声明容器监听的端口,但并不会实际映射到主机。
VOLUME 创建挂载点,用于持久化数据。
WORKDIR 设置工作目录,后续指令将在此目录下执行。
ARG 定义构建时可用的变量。
USER 指定运行时的用户。
SHELL 指定默认的 shell,用于运行后续指令。

3. Dockerfile 示例

FROM python:3.10-slim 

LABEL maintainer="panhu"
LABEL version=1.0
LABEL desc="A docker bigv"

WORKDIR /app

ARG APP_VER=1.0
ENV APP_ENV=1.0

COPY . /app/
EXPOSE 5000

ENV FLASK_RUN_HOST=0.0.0.0
ENV FLASK_RUN_PORT=5000

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD curl --fail http://localhost:5000/ || exit 1

RUN pip install flask


CMD ["python", "app.py"]

4. 构建镜像

使用 Dockerfile 构建镜像的命令:

docker build -t my-app .

volume-卷

1. 基本概念

  • Dockerfile:一个文本文件,其中包含了一系列指令,Docker 引擎根据这些指令构建镜像。
  • 镜像:Dockerfile 构建后生成的可执行软件包,包含了运行应用所需的代码、库、环境变量等。
  • :Docker 镜像由多个层(Layer)构成,每一条指令都会创建一个新的层。层是不可变的,这使得 Docker 镜像更为高效和可重用。

2. 常用指令

以下是一些常用的 Dockerfile 指令:

指令 说明
FROM 指定基础镜像,Dockerfile 的第一行通常是此指令。
MAINTAINER 指定维护者信息(不推荐使用,使用 LABEL 替代)。
LABEL 添加元数据到镜像,例如作者、版本等。
RUN 在构建镜像时执行命令(例如安装软件包)。
CMD 指定容器启动时要执行的命令,可以被 docker run 命令覆盖。
ENTRYPOINT 设置容器启动时的默认命令,不能被 docker run 轻易覆盖。
COPY 将文件或目录从主机复制到镜像中。
ADD 类似于 COPY,但还支持 URL 和自动解压压缩文件。
ENV 设置环境变量。
EXPOSE 声明容器监听的端口,但并不会实际映射到主机。
VOLUME 创建挂载点,用于持久化数据。
WORKDIR 设置工作目录,后续指令将在此目录下执行。
ARG 定义构建时可用的变量。
USER 指定运行时的用户。
SHELL 指定默认的 shell,用于运行后续指令。

3. Dockerfile 示例

FROM python:3.10-slim 

LABEL maintainer="panhu"
LABEL version=1.0
LABEL desc="A docker bigv"

WORKDIR /app

ARG APP_VER=1.0
ENV APP_ENV=1.0

COPY . /app/
EXPOSE 5000

ENV FLASK_RUN_HOST=0.0.0.0
ENV FLASK_RUN_PORT=5000

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD curl --fail http://localhost:5000/ || exit 1

RUN pip install flask


CMD ["python", "app.py"]

4. 构建镜像

使用 Dockerfile 构建镜像的命令:

docker build -t my-app .

network-网络

Docker 网络是 Docker 容器之间以及容器与外部世界之间通信的基础。Docker 提供了多种网络模式,方便开发者根据需要选择合适的网络配置。

Docker 网络的核心概念

  1. 网络驱动
    Docker 支持多种网络驱动,每种驱动适用于不同的场景。主要的网络驱动包括:

    • bridge:默认驱动,适用于在同一主机上隔离容器网络。通常用于容器之间的通信。
    • host:直接使用宿主机的网络栈,容器与宿主机共享网络接口,适合对性能要求较高的场景。
    • overlay:跨主机通信,适用于集群环境(如 Docker Swarm 或 Kubernetes)。容器可以在不同主机上通过虚拟网络进行通信。
    • macvlan:允许为容器分配一个独立的 MAC 地址,使容器能够直接与物理网络设备通信。
    • none:没有网络,适用于需要完全隔离的容器。
  2. 网络命名空间
    每个 Docker 容器都有自己的网络命名空间,这意味着每个容器都有独立的网络接口和路由表。

  3. IP 地址
    每个容器在其网络中都有一个唯一的 IP 地址,可以通过该地址与其他容器或外部网络通信。

常见 Docker 网络操作

以下是一些常见的 Docker 网络操作命令:

1. 查看网络

列出所有 Docker 网络:

docker network ls

2. 创建网络

使用以下命令创建一个新的 Docker 网络:

docker network create my-network

你可以指定网络驱动:

docker network create --driver bridge my-network

3. 查看网络详细信息

查看某个网络的详细信息:

docker network inspect my-network

4. 删除网络

删除一个网络(确保没有容器使用该网络):

docker network rm my-network

5. 连接和断开容器

将容器连接到指定网络:

docker network connect my-network my-container

将容器从网络中断开:

docker network disconnect my-network my-container

Docker 网络模式

1. Bridge 网络

  • 使用场景:默认情况下,Docker 会在创建容器时使用 bridge 网络。这适合在单一主机上隔离和连接多个容器。
  • 示例
    docker run -d --name my-container --network bridge my-image
    

2. Host 网络

  • 使用场景:容器与宿主机共享网络接口,适用于对延迟和带宽要求较高的应用。
  • 示例
    docker run -d --network host my-image
    

3. Overlay 网络

  • 使用场景:在 Docker Swarm 或 Kubernetes 中使用,支持跨主机的容器通信。
  • 示例
    docker network create -d overlay my-overlay-network
    

4. Macvlan 网络

  • 使用场景:适合需要直接与物理网络通信的应用,例如在特定的网络环境中。
  • 示例
    docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my-macvlan-network
    

Docker-Compose

1. 启动服务

docker-compose up
  • 作用:根据 docker-compose.yml 文件启动所有定义的服务。如果镜像不存在,它会自动构建或拉取所需的镜像。
  • 常用选项
    • -d:后台运行容器(detached mode),不显示日志输出。
      docker-compose up -d
      
    • --build:强制重新构建服务,即使已经存在镜像。
      docker-compose up --build
      

2. 停止服务

docker-compose stop
  • 作用:停止正在运行的服务,但不删除容器。
  • 停止后,容器的状态会保留,容器数据不会丢失。

3. 停止并删除所有服务

docker-compose down
  • 作用:停止并删除所有服务、网络和卷(除非显式定义了 volumes 持久化)。
  • 常用选项
    • --volumes:同时删除与服务相关联的卷(慎用!可能会丢失持久化的数据)。
      docker-compose down --volumes
      
    • --rmi:删除与服务关联的镜像。
      docker-compose down --rmi all
      

4. 查看容器状态

docker-compose ps
  • 作用:查看当前 docker-compose.yml 定义的容器的运行状态,包括容器名、状态、端口映射等信息。

5. 重启服务

docker-compose restart
  • 作用:重新启动所有服务,或者可以通过指定服务名来重启某个服务。
  • 示例
    docker-compose restart python-app
    

6. 构建服务

docker-compose build
  • 作用:根据 docker-compose.yml 文件中的定义重新构建服务镜像。
  • 常用选项
    • --no-cache:在构建镜像时不使用缓存,强制构建新镜像。
      docker-compose build --no-cache
      

7. 查看服务日志

docker-compose logs
  • 作用:查看服务的日志输出,类似于使用 docker logs 查看单个容器的日志。
  • 常用选项
    • -f:实时查看日志(类似 tail -f)。
      docker-compose logs -f
      
    • 指定特定服务的日志:
      docker-compose logs python-app
      

8. 运行单个命令

docker-compose run <service_name> <command>
  • 作用:在指定的服务中运行命令。与 docker exec 类似,但 docker-compose run 会启动一个新容器实例来运行命令,而不是在现有的容器中执行。
  • 示例
    docker-compose run python-app python manage.py migrate
    

9. 进入容器

docker-compose exec <service_name> <command>
  • 作用:在运行的容器中执行命令(与 docker exec 类似)。
  • 示例
    docker-compose exec python-app bash
    
    这将启动 python-app 服务的一个交互式 bash shell。

10. 查看容器使用的网络

docker-compose network ls
  • 作用:查看当前 docker-compose 管理的网络。

11. 扩展服务

docker-compose up --scale <service_name>=<num>
  • 作用:扩展某个服务的副本数量(多实例)。例如,你想扩展某个服务以便运行多个副本(通常用于负载均衡)。
  • 示例
    docker-compose up --scale python-app=3
    
    这将启动 3 个 python-app 容器实例。

12. 查看容器使用的卷

docker-compose volume ls
  • 作用:列出当前 docker-compose 中定义的卷。

13. 删除未使用的卷

docker-compose down --volumes
  • 作用:删除当前服务相关的所有卷,通常是停止并删除服务后清理卷使用的空间。

14. 停止某个特定的服务

docker-compose stop <service_name>
  • 作用:停止指定的服务容器。

15. 开始某个特定的服务

docker-compose start <service_name>
  • 作用:启动已经停止的指定服务容器。

16. 导出容器配置

docker-compose config
  • 作用:验证并查看完整的合并后的配置。对于较复杂的 docker-compose.yml 文件,这可以帮助调试和验证配置是否正确。

proxy-代理

1. 设置 Docker 引擎的代理(全局配置)

这种方法用于让所有 Docker 容器默认通过代理访问外部网络。

步骤:

  1. 创建或修改 Docker 引擎的配置文件:

    对于 Linux 系统,Docker 的配置文件通常位于 /etc/systemd/system/docker.service.d/,或者 /etc/docker/daemon.json

    首先,创建目录(如果不存在):

    sudo mkdir -p /etc/systemd/system/docker.service.d
    
  2. 创建或编辑 Docker 服务代理配置文件:

    编辑 /etc/systemd/system/docker.service.d/http-proxy.conf 文件(如果没有该文件则创建),内容如下:

    [Service]
    Environment="HTTP_PROXY=http://host.docker.internal:proxy-port"
    Environment="HTTPS_PROXY=https://host.docker.internal:proxy-port"
    Environment="NO_PROXY=localhost,127.0.0.1"
    
    • HTTP_PROXYHTTPS_PROXY 分别设置 HTTP 和 HTTPS 的代理地址。
    • NO_PROXY 则指定不需要通过代理访问的地址,比如本地地址。
  3. 重新加载并重启 Docker 服务:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

2. 针对单个 Docker 容器设置代理

如果不想全局配置 Docker 引擎的代理,而是希望为某个特定容器配置代理,可以在运行容器时使用环境变量设置。

运行容器时指定代理:

docker run 命令中,通过 -e 参数传递代理环境变量:

docker run -e HTTP_PROXY=http://host.docker.internal:proxy-port \
           -e HTTPS_PROXY=https://host.docker.internal:proxy-port \
           -e NO_PROXY=localhost,127.0.0.1 \
           your-image

3. 配置 Dockerfile 中的代理

在构建 Docker 镜像时,也可以在 Dockerfile 中设置代理环境变量,确保在 RUN 指令执行时使用代理。

Dockerfile 示例:

FROM ubuntu:20.04

# 设置代理环境变量
ENV HTTP_PROXY=http://host.docker.internal:proxy-port
ENV HTTPS_PROXY=https://host.docker.internal:proxy-port
ENV NO_PROXY=localhost,127.0.0.1

# 后续的指令会通过代理访问网络
RUN apt-get update && apt-get install -y curl

4. 配置 Docker Compose 的代理

如果使用 Docker Compose 管理多个容器,可以在 docker-compose.yml 文件中配置环境变量。

docker-compose.yml 示例:

version: '3'
services:
  myservice:
    image: myimage
    environment:
      - HTTP_PROXY=http://host.docker.internal:proxy-port
      - HTTPS_PROXY=https://host.docker.internal:proxy-port
      - NO_PROXY=localhost,127.0.0.1

5. 验证代理


docker run --rm -it nginx bash
curl www.google.com

参考: https://github.com/echonoshy/cgft-llm

posted @ 2025-06-13 14:15  一蓑烟雨度平生  阅读(242)  评论(0)    收藏  举报