Docker 容器命令

Docker 容器命令

docker ps

docker ps
docker ps -a
docker ps --size

docker ps 是 Docker 的一个命令,用于查看当前正在运行的容器。

命令格式:

docker ps [OPTIONS]

常用选项:

  • -a--all:显示所有容器(包括未运行的)
  • -q--quiet:只显示容器的 ID
  • --no-trunc:不截断输出(例如容器名、命令等)
  • --format:使用 Go 模板格式化输出内容

示例解释:

示例 1:

docker ps

显示当前正在运行的容器,包括:

  • 容器 ID(CONTAINER ID)
  • 镜像(IMAGE)
  • 命令(COMMAND)
  • 创建时间(CREATED)
  • 状态(STATUS)
  • 端口(PORTS)
  • 容器名(NAMES)

示例输出:

CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                    NAMES
abc123456789   nginx:latest  "nginx -g 'daemon of…"   5 minutes ago    Up 5 minutes    0.0.0.0:80->80/tcp       webserver

示例 2:

docker ps -a

显示所有容器,包括已停止的容器。

docker run

docker run 是 Docker 中最常用的命令之一,用于创建并启动一个容器。它基于指定的镜像运行一个新的容器实例,可以指定容器运行的配置参数,例如端口映射、环境变量、挂载卷等。

基本语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • IMAGE:镜像名称,例如 nginxubuntu
  • COMMAND:可选,覆盖镜像默认执行命令。
  • OPTIONS:可选参数,用于配置容器行为。

常见参数说明

参数 含义
-d 后台运行容器(detached 模式)
-it 交互模式运行容器,-i 保持输入流打开,-t 分配伪终端
--name 指定容器名称
-p 主机端口:容器端口 端口映射,例如 -p 8080:80
-v 主机路径:容器路径 卷挂载,将主机目录挂载到容器中
--rm 容器退出时自动删除
-e 设置环境变量,例如 -e ENV_VAR=value

示例

  1. 运行一个 Ubuntu 容器并进入交互模式
docker run -it ubuntu bash

意思是:以 ubuntu 镜像运行一个容器,进入 bash 交互终端。

  1. 运行 Nginx 并映射端口
docker run -d -p 8080:80 nginx

意思是:以后台方式运行 nginx,并将主机的 8080 端口映射到容器的 80 端口。

  1. 运行带挂载卷的容器
docker run -v /host/path:/container/path ubuntu

意思是:将主机的 /host/path 目录挂载到容器的 /container/path

  1. 设置环境变量
docker run -e MY_ENV=prod ubuntu

重启策略

使用 Docker 的 --restart 来指定容器的重启策略。

重启策略控制 Docker 守护进程退出后是否重新启动容器。

Docker 支持以下重启策略:

Policy Result
no 当容器退出时,不要自动重启容器。这是默认值。
on-failure[:max-retries] 仅当容器以非零退出状态退出时重新启动。可选地,限制Docker守护进程尝试重新启动的次数。
unless-stopped 重新启动容器,除非它被显式停止或 Docker 本身被停止或重新启动。
always 无论退出状态如何,总是重新启动容器。当您指定 always 时,Docker 守护进程将尝试无限期地重新启动容器。容器也将始终在守护进程启动时启动,而不管容器的当前状态如何。

说明

  • --restart=no:容器退出时不重启。
  • --restart=always:无论容器是如何退出的,都会重启。
  • --restart=on-failure:只有在容器非正常退出(退出状态非 0)时才会重启。
  • --restart=unless-stopped:容器会一直重启,除非被手动停止。

关于手动停止了,如果 Docker 守护进程不被重启,都不会被启动,如果使用了类似systemctl restart docker命令重启 Docker 守护进程,那么 unless-stopped 的容器已经被手动停止了就不会自动重启,always 的会自动重启。

固定物理地址

有些服务的授权或激活机制依赖于网络接口的 物理地址(MAC 地址)
由于 Docker 容器默认每次启动都会分配一个新的虚拟 MAC 地址,这会导致激活信息失效或授权失效。

为了解决这个问题,可以在启动容器时通过 --mac-address 参数显式指定一个固定的 MAC 地址,例如:

docker run --mac-address 02:42:ac:11:00:01 ...

这样可以确保每次启动的容器网络接口使用相同的 MAC 地址,从而满足服务对物理地址不变的要求。

docker exec

在运行的容器中执行命令

命令使用

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

描述

docker exec命令在运行的容器中运行一个新命令。

COMMAND在容器的默认目录下运行。如果底层映像在Dockerfile中使用WORKDIR指令指定了自定义目录,则使用此目录。

COMMAND必须是可执行文件。链式或加引号的命令不起作用。

一般进入容器可以使用

docker exec -it mycontainer bash
docker exec -it mycontainer /bin/bash

选项

Name, shorthand 描述
--detach , -d 分离模式:后台运行命令
--detach-keys 重写分离容器的键序列
--env , -e 设置环境变量
--env-file 读入一个环境变量文件
--interactive , -i 保持标准输入打开,即使没有附加
--privileged 为该命令提供扩展权限
--tty , -t 分配伪 tty
--user, -u 用户名或 UID
--workdir , -w 容器内的工作目录

docker start

启动容器

docker stop

停止容器

docker restart

重启容器

docker rename

容器重命名

docker rename my_container my_new_container

docker rm

删除容器

docker cp

docker cp 是 Docker 提供的一个命令,用于在宿主机与容器之间复制文件或目录,语法简单实用。

一、命令格式:

docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

二、参数说明:

  • SRC_PATH:源路径,可以是本地路径或容器内路径(需加上 CONTAINER:)。
  • DEST_PATH:目标路径,可以是本地路径或容器内路径(需加上 CONTAINER:)。
  • CONTAINER:容器的名字或 ID。

三、常用示例:

  1. 从宿主机复制文件到容器中:
docker cp ./test.txt mycontainer:/app/test.txt

说明:将宿主机当前目录下的 test.txt 复制到容器 mycontainer/app/ 目录下。

  1. 从容器中复制文件到宿主机:
docker cp mycontainer:/app/test.txt ./test.txt

说明:将容器 mycontainer/app/test.txt 复制到宿主机当前目录。

  1. 复制目录:
docker cp mycontainer:/app/data ./data

说明:将容器内的 /app/data 目录复制到宿主机当前目录下。

四、注意事项:

  1. docker cp 只能用于运行中或已停止的容器(前提是容器存在)。
  2. 支持相对路径和绝对路径。
  3. 如果目标路径存在同名文件或目录,会被覆盖。
  4. 该命令不会改变文件的权限或所有权,但可能会略有不同,尤其在不同操作系统之间使用时。

docker network

在 Docker 中,网络(network)用于连接容器,使它们可以相互通信,或者与主机、外部网络通信。Docker 提供了多种网络驱动类型,以满足不同的使用场景。

Docker 网络类型(驱动)

  1. bridge(默认)

    • 容器默认使用的网络类型(除非指定)。

    • 适用于单主机上多个容器之间的通信。

    • 每个容器都会获得一个虚拟 IP,彼此通过网络桥接通信。

    • 示例:

      docker run -d --name container1 nginx
      docker run -d --name container2 busybox
      
  2. host

    • 容器与宿主机共享网络命名空间。

    • 容器不会有自己的 IP 地址,使用宿主机的 IP 和端口。

    • 适用于对性能有要求,或不需要隔离的场景。

    • 示例:

      docker run --network host nginx
      
  3. none

    • 容器没有网络连接。
    • 适用于需要完全隔离网络的场景。
  4. overlay

    • 用于 Docker Swarm 或集群环境下,跨主机容器通信。

    • 构建在多个 Docker 主机之上的虚拟网络。

    • 需要使用 docker swarm 初始化。

    • 示例:

      docker network create --driver overlay my_overlay
      
  5. macvlan

    • 为容器分配一个 MAC 地址,使其像物理设备一样存在于网络中。
    • 适用于需要容器在二层网络中表现为独立主机的场景。
  6. 自定义网络

    • 你可以通过 docker network create 创建自定义网络,并设置子网、网关等参数。
    • 容器加入同一个自定义网络后,可以使用容器名直接通信(DNS 支持)。

常用命令

  1. 查看所有网络:

    docker network ls
    
  2. 创建一个自定义桥接网络:

    docker network create --driver bridge my_network
    
  3. 查看网络详情:

    docker network inspect my_network
    
  4. 启动容器并指定网络:

    docker run -d --name my_nginx --network my_network nginx
    
  5. 将已存在的容器连接到网络:

    docker network connect my_network my_container
    
  6. 从网络中断开容器:

    docker network disconnect my_network my_container
    

Docker 网络隔离

网络是为了隔离同一个服务器上不同应用的

Docker 网络可以用于隔离同一服务器上不同应用之间的通信。

通过创建不同的 Docker 网络,可以确保应用只与需要通信的其他容器进行通信,而不会受到其他不相关容器的干扰。

docker network create my_network

# 启动 app1 并连接到自定义网络
docker run -d --name app1 --network my_network -p 3000:3000 app1_image

# 启动 app2 并连接到自定义网络
docker run -d --name app2 --network my_network -p 5000:5000 app2_image

# 将运行中的容器加入网络
docker network connect my_network app3

# 在单个主机上部署多个容器,容器之间有隔离,需要使用同一网络,容器名字代替IP地址
# 比如:app1 的配置文件中关于 app2 的IP地址用容器名字代替,比如 app2:5000
# 如果容器之间通信走内部 Docker 网络,不通过宿主机映射端口,比如启动了多个 MySQL 容器,每个容器里面都是3306端口,如果都加入到了同一个网络,比如使用的 mysql8:3306 后面的 3306,要是容器内的端口。
posted @ 2025-06-15 00:39  ioufev  阅读(73)  评论(0)    收藏  举报