Skip to content

Docker 容器(Container)

Docker 容器是由 Docker 镜像创建的运行实例,具有独立的文件系统、网络和进程空间,可以看作是镜像的动态实体。容器是轻量级的,启动时间也很快,可以方便地进行扩展和迁移。

docker container

bash
用法: docker container COMMAND

管理容器

命令:
attach    将本地标准输入、输出和错误流附加到正在运行的容器
          语法: docker container attach [OPTIONS] CONTAINER
          示例:
            - docker container attach my-container  # 用于实时查看容器的输出或与容器交互

commit    从容器的更改创建新镜像
          语法: docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
          示例:
            - docker container commit my-container my-image:latest  # 将容器的当前状态保存为新镜像,便于后续使用

cp        在容器和本地文件系统之间复制文件/文件夹
          语法: docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
                docker container cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
          示例:
            - docker container cp my-container:/app/logs ./logs  # 将容器内的日志文件复制到本地
            - docker container cp ./config.json my-container:/app/config.json  # 将本地文件复制到容器内

create    创建新容器
          语法: docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
          示例:
            - docker container create --name my-container nginx  # 创建一个名为 my-container 的 Nginx 容器

diff      检查容器文件系统上文件或目录的更改
          语法: docker container diff CONTAINER
          示例:
            - docker container diff my-container  # 查看容器文件系统的更改记录

exec      在正在运行的容器中执行命令
          语法: docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
          示例:
            - docker container exec -it my-container bash  # 以交互模式进入容器的 Bash Shell
            - docker container exec my-container ls /app  # 在容器中执行命令并列出 /app 目录内容

export    将容器的文件系统导出为 tar 归档文件
          语法: docker container export [OPTIONS] CONTAINER
          示例:
            - docker container export my-container > my-container.tar  # 将容器的文件系统导出为 tar 文件

inspect   显示一个或多个容器的详细信息
          语法: docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
          示例:
            - docker container inspect my-container  # 查看容器的详细信息

kill      终止一个或多个正在运行的容器
          语法: docker container kill [OPTIONS] CONTAINER [CONTAINER...]
          示例:
            - docker container kill my-container  # 强制终止容器

logs      获取容器的日志
          语法: docker container logs [OPTIONS] CONTAINER
          示例:
            - docker container logs -f my-container  # 实时查看容器的日志输出

ls        列出容器
          语法: docker container ls [OPTIONS]
          示例:
            - docker container ls -a  # 列出所有容器(包括已停止的)
            - docker container ls -aq # 列出所有容器的 ID

pause     暂停一个或多个容器内的所有进程
          语法: docker container pause CONTAINER [CONTAINER...]
          示例:
            - docker container pause my-container  # 暂停容器内的所有进程

port      列出容器的端口映射或特定映射
          语法: docker container port CONTAINER [PRIVATE_PORT[/PROTO]]
          示例:
            - docker container port my-container 80  # 查看容器 80 端口的映射

prune     删除所有已停止的容器
          语法: docker container prune [OPTIONS]
          示例:
            - docker container prune -f  # 强制删除所有已停止的容器

rename    重命名容器
          语法: docker container rename CONTAINER NEW_NAME
          示例:
            - docker container rename my-container new-container  # 将容器重命名为 new-container

restart   重启一个或多个容器
          语法: docker container restart [OPTIONS] CONTAINER [CONTAINER...]
          示例:
            - docker container restart my-container  # 重启容器

rm        删除一个或多个容器
          语法: docker container rm [OPTIONS] CONTAINER [CONTAINER...]
          示例:
            - docker container rm my-container  # 删除容器
            - docker container rm -f my-container  # 强制删除正在运行的容器

run       从镜像创建并运行新容器
          语法: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
          示例:
            - docker container run -d --name my-container nginx  # 以后台模式运行 Nginx 容器
            - docker container run -it --rm ubuntu bash  # 以交互模式运行临时容器并进入 Bash Shell

start     启动一个或多个已停止的容器
          语法: docker container start [OPTIONS] CONTAINER [CONTAINER...]
          示例:
            - docker container start my-container  # 启动已停止的容器

stats     实时显示容器的资源使用统计信息
          语法: docker container stats [OPTIONS] [CONTAINER...]
          示例:
            - docker container stats my-container  # 实时查看容器的资源使用情况

stop      停止一个或多个正在运行的容器
          语法: docker container stop [OPTIONS] CONTAINER [CONTAINER...]
          示例:
            - docker container stop my-container  # 停止正在运行的容器

top       显示容器的运行进程
          语法: docker container top CONTAINER [ps OPTIONS]
          示例:
            - docker container top my-container  # 查看容器内的运行进程

unpause   恢复一个或多个容器内的所有进程
          语法: docker container unpause CONTAINER [CONTAINER...]
          示例:
            - docker container unpause my-container  # 恢复容器内的所有进程

update    更新一个或多个容器的配置
          语法: docker container update [OPTIONS] CONTAINER [CONTAINER...]
          示例:
            - docker container update --memory 512M my-container  # 更新容器的内存限制为 512MB

wait      阻塞直到一个或多个容器停止,然后打印其退出代码
          语法: docker container wait CONTAINER [CONTAINER...]
          示例:
            - docker container wait my-container  # 阻塞直到容器停止并打印退出代码

docker container run

从 image 创建并运行一个新的 container。

语法:

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

OPTIONS:

  • -d, --detach: 以 detach 模式运行容器。
  • -i, --interactive:以交互模式(interactive)运行容器。
  • -t, --tty:为容器分配一个伪终端(pseudo-tty)。
  • -p, --publish list: 将主机上的端口映射到容器内部的端口上。
  • --network network: 为容器分配网络。
  • -v, --volume list: 将主机上的目录或文件挂载到容器内部。
  • -e, --env list: 设置环境变量。
  • --name string: 为容器指定名称。
  • --restart:容器退出时应用的重新启动策略。
    • always
    • no(默认)
    • on-failure
    • on-failure
    • unless-stopped
  • --rm:容器退出后立即删除。

Docker 容器 vs 虚拟机

Docker 容器和虚拟机都是用于实现应用程序的隔离性和环境独立性的技术。

#Docker 容器虚拟机
磁盘大小容器不需要运行完整的操作系统,一般为 MB 级别。操作系统需要运行完整的操作系统,一般为 GB 级别。
资源利用率容器不需要运行完整的操作系统,可以共享主机操作系统的内核,因此占用的资源较少且更加高效。虚拟机通常需要运行完整的操作系统,并在其中安装和运行所需的软件。这意味着虚拟机需要分配大量的 CPU、内存和存储资源。
启动时间容器只需要启动应用程序本身,因此启动时间很短(秒级别)。虚拟机需要启动完整的操作系统,因此启动时间较长(分钟级别)。
性能接近原生。弱于原生。
隔离性容器将应用程序封装到一个单独的进程中,并使用 Linux 内核提供的各种隔离技术(如命名空间和控制组)来隔离应用程序。虚拟机通过模拟硬件和网络设备来实现应用程序的隔离性。每个虚拟机都具有自己的文件系统、网络配置和用户空间进程。
安全性容器之间共享操作系统内核,因此如果一个容器被攻击,可能会影响到其他容器。虚拟机的安全性通常比容器更高,因为虚拟机之间具有更高的隔离性,攻击一个虚拟机不会影响其他虚拟机。

基于 MIT 许可发布