一文详解Docker容器(Container)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 一文详解Docker容器(Container)

基本介绍

Docker容器(Container) 是独立运行的一个或一组应用。 Docker容器(Container) 是从 Docker镜像(Images) 创建的运行实例,它可以被启动、开始、停止、 删除。 每个 Docker容器(Container) 都是相互隔离的、保证安全的平台。Docker容器(container) 和 Docker镜像(Images) 以及 Docker仓库 并称为 Docker 的三大核心概念。

容器保护三个状态:

  • 运行:进程正常运行
  • 暂停:进程暂停,CPU不再运行,并不释放内存
  • 停止:进程终止,回收进程占用的内存、CPU等资源

单个 Docker 镜像启动多个容器的示意图:

常用命令

docker run :创建一个新的容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run --name containerName -p 80:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器
  • --name : 给容器起一个名字,比如叫做mn
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx

-p参数,是将容器端口映射到宿主机端口。

默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。

现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这样就能访问到nginx了:

docker exec -it mn bash

命令解读:

  • docker exec :进入容器内部,执行一个命令
  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • mn :要进入的容器的名称
  • bash:进入容器后执行的命令,bash是一个linux终端交互命令  
选项 说明
-d, --detach=false 指定容器运行于前台还是后台,默认为 false。
-i, --interactive=false 打开 STDIN,用于控制台交互。
-t, --tty=false 分配 tty 设备,该可以支持终端登录,默认为 false。
-u, --user="" 指定容器的用户。
-a, --attach=[] 登录容器(必须是以 docker run -d 启动的容器)。
-w, --workdir="" 指定容器的工作目录。
-c, --cpu-shares=0 设置容器 CPU 权重,在 CPU 共享场景使用。
-e, --env=[] 指定环境变量,容器中可以使用该环境变量。
-m, --memory="" 指定容器的内存上限。
-P, --publish-all=false 指定容器暴露的端口。
-p, --publish=[] 指定容器暴露的端口。
-h, --hostname="" 指定容器的主机名。
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录。
–volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录。
–cap-add=[] 添加权限。
–cap-drop=[] 删除权限。
–cidfile="" 运行容器后,在指定文件中写入容器 PID 值,一种典型的监控系统用法。
–cpuset="" 设置容器可以使用哪些 CPU,此参数可以用来容器独占 CPU。
–device=[] 添加主机设备给容器,相当于设备直通。
–dns=[] 指定容器的 dns 服务器。
–dns-search=[] 指定容器的 dns 搜索域名,写入到容器的 /etc/resolv.conf 文件。
–entrypoint="" 覆盖 image 的入口点。
–env-file=[] 指定环境变量文件,文件格式为每行一个环境变量。
–expose=[] 指定容器暴露的端口,即修改镜像的暴露端口。
–link=[] 指定容器间的关联,使用其他容器的 IP、env 等信息。
–lxc-conf=[] 指定容器的配置文件,只有在指定 --exec-driver=lxc 时使用。
–name="" 指定容器名字,后续可以通过名字进行容器管理,links 特性需要使用名字。
–net=“bridge” 器网络设置:
1. bridge 使用 docker daemon 指定的网桥。
2. host //容器使用主机的网络。
3. container:NAME_or_ID >//使用其他容器的网路,共享 IP 和 PORT 等网络资源。
4. none 容器使用自己的网络(类似–net=bridge),但是不进行配置。
–privileged=false 指定容器是否为特权容器,特权容器拥有所有的 capabilities。
–restart=“no” 指定容器停止后的重启策略:
1. no:容器退出时不重启。
2. on-failure:容器故障退出(返回值非零)时重启。
3. always:容器退出时总是重启。
–rm=false 指定容器停止后自动删除容器(不支持以 docker run -d 启动的容器)。
–sig-proxy=true 设置由代理接受并处理信号,但是 SIGCHLD、SIGSTOP 和 SIGKILL 不能被代理。

docker ps :列出 Docker容器相关信息

docker ps [OPTIONS]
选项 说明
无参 默认显示正在运行的容器。
-a 显示所有的容器,包括未运行的。
-f 根据条件过滤显示的内容。
–format 指定返回值的模板文件。
-l 显示最近创建的容器。
-n 列出最近创建的n个容器。
–no-trunc 不截断输出。
-q 静默模式,只显示容器编号。
-s 显示总的文件大小。

docker stop :停止一个运行中的 Docker容器

docker stop [OPTIONS] CONTAINER [CONTAINER...]

docker rm : 删除一个或者多个已经停止的 Docker容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]
参数 说明
-f 通过 SIGKILL 信号强制删除一个运行中的容器。
-l 移除容器间的网络连接,而非容器本身。
-v:-v 删除与容器关联的卷。

docker pause :暂停 Docker容器 中所有的进程

docker pause 命令可以用来暂停 Docker容器 中所有的进程。该命令后面的 CONTAINER 可以是容器Id,或者是容器名。

docker pause [OPTIONS] CONTAINER [CONTAINER...]

docker unpause : 恢复 Docker容器 中所有的进程

docker unpause 命令可以用来恢复 Docker容器 中所有的进程。该命令后面的 CONTAINER 可以是容器Id,或者是容器名。

docker unpause [OPTIONS] CONTAINER [CONTAINER...]

docker kill : 杀掉一个或者多个正在运行的 Docker容器

docker kill 命令可以用来杀掉一个或者多个正在运行的 Docker容器。该命令后面的 CONTAINER 可以是容器Id,或者是容器名。

docker kill [OPTIONS] CONTAINER [CONTAINER...]
参数 说明
-s 向容器发送一个信号。

docker exec : 运行的 Docker容器 中执行命令

docker exec 命令可以用来在运行的 Docker容器 中执行命令。 docker exec命令是需要容器处于运行中且 PID 1 进程也处于运行中才能执行的操作。该命令后面的参数 container 可以是容器 Id 或者是容器名。

docker exec [options] container command [arg...]
参数 描述
–detach, -d 后台运行模式,在后台执行命令相关命令。
–detach-keys 覆盖容器后台运行的一些参数信息。
–env, -e 设置环境变量。
–interactive, -i 展示容器输入信息 STDIN。
–privileged 为命令提供一些扩展权限。
–tty, -t 命令行交互模式。
–user, -u 设置用户名。


相关文章
|
2天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
19 6
|
2天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
13 5
|
2天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
19 3
|
2天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
13 2
|
7天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
34 5
|
11天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
9天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
8天前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
23 1
|
12天前
|
运维 持续交付 虚拟化
深入解析Docker容器化技术的核心原理
深入解析Docker容器化技术的核心原理
34 1
|
5天前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
17 0