主题
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 内核提供的各种隔离技术(如命名空间和控制组)来隔离应用程序。 | 虚拟机通过模拟硬件和网络设备来实现应用程序的隔离性。每个虚拟机都具有自己的文件系统、网络配置和用户空间进程。 |
安全性 | 容器之间共享操作系统内核,因此如果一个容器被攻击,可能会影响到其他容器。 | 虚拟机的安全性通常比容器更高,因为虚拟机之间具有更高的隔离性,攻击一个虚拟机不会影响其他虚拟机。 |