容器是 docker 的核心概念,它让开发者能够以统一的方式将他们的应用程序及其依赖项打包到一个可移植的容器中,这个容器可以在任何安装了 Docker 引擎的服务器上运行,从而实现虚拟化。
本文主要介绍 docker 容器的创建、启动、终止、容器内执行、删除等各种操作。
创建容器 docker create
docker create 命令用于创建 Docker 容器。
命令格式:
代码语言:bash复制docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
# OPTIONS 为可选参数
# IMAGE 是要创建的容器所基于的镜像
# COMMAND 和 ARG 是容器启动时要运行的命令和参数
命令示例:
代码语言:bash复制# 创建一个基于 Ubuntu 镜像的容器
docker create -it ubuntu:latest
该命令将创建一个新的容器,并使用 -it 选项将容器的标准输入和输出重定向到终端。
如果运行容器时使用的镜像在本地不存在,Docker会自动从Docker镜像仓库中下载。默认是从Docker Hub公共镜像源下载,如果不指定版本,默认下载最新版本。
使用 docker create 创建的容器处于停止状态,需使用 docker start 命令来启动容器。
容器操作是docker技术栈的核心,命令参数很多,下方表格列出部分常用参数:
参数 | 说明 |
---|---|
-e, --env=[] | 设置环境变量 |
-p, --publish=[] | 指定如何映射到本地主机端口 |
-v, --volume=[] | 挂载卷 |
--name | 设置容器的名称 |
--network | 指定容器网络模式 |
--restart | 容器的重启策略 |
--rm | 容器退出后是否自动删除 |
-it | 分配一个伪终端并绑定到容器的标准输入 |
查看容器 docker ps
docker ps 命令用于查看所有正在运行中的容器列表。
命令格式及示例:
代码语言:bash复制# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 可能返回以下内容
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f884d757aa45 ubuntu:latest "/bin/bash" About an hour ago Up 2 seconds elegant_ellis
返回列 | 说明 |
---|---|
CONTAINER ID | 容器的唯一标识符 |
IMAGE | 容器使用的镜像 |
COMMAND | 容器启动时执行的命令 |
CREATED | 容器的创建时间 |
STATUS | 容器的状态 |
NAMES | 容器的名称 |
启动容器 docker start
docker start 命令用于启动一个已经停止的容器。
命令格式:
代码语言:bash复制docker start [OPTIONS] CONTAINER [CONTAINER...]
# OPTIONS 为可选参数
# CONTAINER 是要启动的容器的名称或 ID,如要一次启动多个容器,可以使用逗号将它们隔开
命令示例:
代码语言:bash复制# 启动 Ubuntu 容器(这里是ID)
docker start f884d757aa45
# 启动 Ubuntu 容器(这里是名称)
docker start elegant_ellis
创建并启动容器 docker run
docker run 命令用于创建的同时并启动一个容器。
命令格式:
代码语言:bash复制docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# OPTIONS 命令参数
# IMAGE 要使用的镜像名称
# COMMAND 容器启动时要执行的命令
# ARG 传递给命令的参数
以下是常用的 docker run 选项:
参数 | 说明 |
---|---|
-d 或 --detach | 在后台运行容器,并返回容器 ID |
-e 或 --env | 设置环境变量 |
-p 或 --publish | 将容器的端口映射到本地主机端口 |
-v 或 --volume | 挂载卷 |
--name | 为容器指定一个名称 |
--network | 指定容器网络模式 |
--restart | 设置容器的重启策略 |
--rm | 容器退出后自动删除容器 |
-it 或 --interactive --tty | 分配一个伪终端并绑定到容器的标准输入 |
命令示例:
代码语言:bash复制# 创建并启动 nginx 容器同时映射端口且在后台运行
docker run -d -p 80:80 nginx
# 创建并启动 php 容器(运行后会自动终止)
docker run php
# 创建并启动 nginx 容器且允许用户交互
docker run -it ubuntu
# 可能会返回
root@87931907c7c7:/# 此处输入的命令在容器中运行,输入 exit 退出容器
查看容器输出 docker logs
docker logs 命令用于查看容器的输出,该命令将显示容器的标准输出和标准错误流的内容。
命令示例:
代码语言:bash复制# 查看 ubuntu 容器的日志(通过ID)
docker logs d78a02526470
以下是常用的参数选项:
参数 | 说明 |
---|---|
-f 或 --follow | 实时跟踪日志输出 |
--tail | 只显示最新的几行日志,可以指定行数 |
-t 或 --timestamps | 显示时间戳 |
--since | 只显示指定时间之后的日志 |
--until | 只显示指定时间之前的日志 |
暂停容器 docker pause
docker pause 命令用于暂停一个正在运行的容器,该命令将暂停容器的所有进程,使其进入暂停状态。
命令格式:
代码语言:bash复制docker pause CONTAINER [CONTAINER...]
# CONTAINER 是要暂停的容器的名称或 ID,指定一个或多个容器来同时暂停。
命令示例:
代码语言:bash复制# 输入命令
docker pause d78a02526470
# 查看容器
docker ps
# 可能返回以下内容,状态为Paused
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d78a02526470 nginx "/docker-entrypoint.…" About an hour ago Up About an hour (Paused) 0.0.0.0:80->80/tcp, :::80->80/tcp elegant_pascal
恢复被暂停的容器 docker unpause
docker unpause 命令用于恢复一个或多个之前被暂停的容器中的所有进程。
命令格式:
代码语言:bash复制docker unpause [OPTIONS] CONTAINER [CONTAINER...]
# CONTAINER 是要恢复的容器的名称或 ID,可以指定一个或多个容器同时恢复。
命令示例:
代码语言:bash复制# 输入命令
docker unpause d78a02526470
# 查看容器
docker ps
# 可能返回以下内容,状态已恢复运行
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d78a02526470 nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp, :::80->80/tcp elegant_pascal
终止容器 docker stop
docker stop 命令用于终止一个正在运行的容器。该命令将向容器发送信号,并等待一段时间以便容器进行清理和保存操作。如果容器在规定的时间内没有响应,则 Docker 将强制停止容器。
命令格式:
代码语言:bash复制docker stop [OPTIONS] CONTAINER [CONTAINER...]
# OPTIONS 命令参数
# CONTAINER 是要终止的容器的名称或 ID,可以指定一个或多个容器。
# -t 或 --time:指定等待容器响应的时间(以秒为单位),默认为 10 秒。
命令示例:
代码语言:bash复制# 输入命令
docker stop d78a02526470
# 查看容器
docker ps -a
对于终止的容器,可以通过 docker start 命令来启动,也可以通过 docker restart 命令先终止再启动
进入容器 docker attach
在使用 -d 参数时,容器会进入后台,用户无法对其操作,此时可以使用 docker attach 进入容器。
docker attach 命令用于进入正在运行的容器,并查看容器的标准输出、标准错误和标准输入流。
命令格式:
代码语言:bash复制docker attach [OPTIONS] CONTAINER
# OPTIONS 命令参数
# CONTAINER 是要附加的容器的名称或 ID
常用的命令参数包括:
参数 | 说明 |
---|---|
-i 或 --interactive | 以交互模式运行容器 |
-t 或 --tty | 分配一个伪终端(TTY) |
命令示例:
代码语言:bash复制# 进入 ubuntu 容器内部(通过ID)
docker attach 87931907c7c7
# 可能返回以下内容
root@87931907c7c7:/# (此处输入的命令针对于容器)
执行完该命令后将能够与容器进行交互,并查看容器的输出和输入流。
对容器执行命令 docker exec
docker exec 命令用于在正在运行的容器中直接执行命令。
命令格式:
代码语言:bash复制docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# OPTIONS 命令参数
# CONTAINER 是要执行命令的容器的名称或 ID
# COMMAND 是要执行的命令
# ARG 是可选的命令参数
常用的选项包括:
参数 | 说明 |
---|---|
-d 或 --detach | 在后台运行命令 |
-i 或 --interactive | 以交互模式运行容器 |
-t 或 --tty | 分配一个伪终端(TTY) |
命令示例:
代码语言:bash复制# 对 ubuntu 容器直接执行命令(通过ID)
docker exec 87931907c7c7 ls
# 可能返回以下内容,等于进入内部执行 ls 命令
bin
boot
dev
etc
home
lib
lib32
lib64
libx32
media
# 使命令在后台运行,并且不会阻塞你的终端或命令行界面。
docker exec -d 87931907c7c7 ls
删除容器 docker rm
docker rm 命令用于删除一个或多个容器。
命令格式:
代码语言:bash复制docker rm [OPTIONS] CONTAINER [CONTAINER...]
# OPTIONS 命令参数
# CONTAINER 是要执行命令的容器的名称或 ID,可以指定一个或多个容器
常用选项包括:
参数 | 说明 |
---|---|
-f 或 --force | 强制删除正在运行的容器 |
-l 或 --link | 删除容器间的网络连接,而非容器本身 |
-v 或 --volumes | 删除与容器关联的卷 |
命令示例:
代码语言:bash复制# 删除容器(通过ID)
docker rm 87931907c7c7
# 强制删除正在运行的容器(通过ID)
docker rm -f 87931907c7c7
# 删除容器间的网络连接(通过ID)
docker rm -l 87931907c7c7
# 删除与容器关联的卷(通过ID)
docker rm -v 87931907c7c7
删除容器操作不可逆,请谨慎操作并确认已完成相关备份。