运行容器:create、run、pause、unpause、stop、kill、start、restart、attach、exec、logs、rm、ps/ls;容器交互;容器资源限额:memory/cpu-shares/blkio-weight;底层技术:cgroup 和 namespace;配置docker跨host远程管理
###docker inspect 4ce62f5581b5 |grep RestartPolicy -A2 确认容器是否自动拉起

docker容器运行相关操作:create、run、pause、unpause、stop、kill、start、restart、attach、exec、logs、rm、ps/ls =================================================================================================================================== create 创建容器 run 运行容器 pause 暂停容器 unpause 取消暂停继续运行容器 stop 发送 SIGTERM 停止容器 kill 发送 SIGKILL 快速停止容器 start 启动容器 restart 重启容器 attach attach 到容器启动进程的终端 exec 在容器中启动新进程,通常使用 "-it" 参数 logs 显示容器启动进程的控制台输出,用 "-f" 持续打印 rm 从磁盘中删除容器 ps 列出运行容器 docker container ls #等效 docker ps docker container ps #等效 docker ps ------------------------------------------------------------------------------------------ 运行一个新容器 docker run [OPTIONS] IMAGE [COMMAND] #run一个新容器时,要么就用镜像ID;如果用镜像名称的话要带上版本号,否则默认使用最新版本! docker run 170e243861ec docker run mypython:3.6 #本地没有镜像,则会自动去docker hub搜索并下载 # 运行容器,需要做数据挂载 #安装启动mysql,需要配置密码的,这是要注意点!(所以这里启动一个新容器时,使用了-e进行设置密码) docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 --network/--net #指定自定义容器网络 --ip #指定容器IP --link=CONTAINER_NAME:ALIAS #使用这个选项去run一个容器将在此容器的/etc/hosts文件中增加一个主机名ALIAS,这个主机名是名为CONTAINER_NAME 的容器的IP地址的别名。这使得新容器的内部进程可以访问主机名为ALIAS的容器而不用知道它的IP。 --link=CONTAINER_NAME:ALIAS,可以设置多个--link,这个参数只对run的容器有效,不会影响到其他容器,实现方式其实就是在容器文件/etc/hosts中添加解析,所以这个解析只对容器自身有效 --name #设置容器名称 -it #-i交互式操作,-t终端 -h #设置容器的主机名 -dns x.x.x.x #设置dns --dns-search #DNS搜索设置 --rm #退出后即删除容器 --add-host hostname:IP #注入host -d #后台运行;同时想要容器挂在后台,有-d参数是不够的,还需要容器本身有可运行的内容 -P(大写) #将容器内部使用的网络端口随机映射到我们使用的主机上。 -p 4444:5000 #指定端口映射,容器端口5000映射到本地端口4444 -e 环境变量key:环境变量value #设置环境变量并传递进容器中,例如-e MYSQL_ROOT_PASSWORD=123456;-e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" --restart=always #容器自动重启(重启docker守护进程后,没有该参数的容器是不会自动up的) /bin/bash #放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。 #####容器必须有一个前台的守护进程,否则该容器启动后会自动退出。 查看容器 docker ps -a #查看本地的容器进程 docker logs -f bf08b7f2cd89 #查看容器的日志 docker top wizardly_chandrasekhar #查看容器内部运行的进程 docker inspect bf08b7f2cd89 #查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。 docker stats bf08b7f2cd89 操作容器 docker start/restart/stop <容器 ID> docker start b750bbbcfd88 #启动已停止的容器 docker stop <容器 ID> #停止容器 docker restart <容器 ID> #重启容器 docker attach #(不建议用这种方式)进入容器,attach如果从这个容器退出,会导致容器的停止。 docker exec -it 71be3370b9d3 /bin/bash #进入容器,推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。 docker rm -f 1e560fca3906 #删除容器 docker rm -f `docker ps -aq` #批量删除容器,实验常用命令 exit #容器直接退出 ctrl +P +Q #容器不停止退出

stop/start/restart/kill/rm/create/run ================================================================================ 容器在 docker host 中实际上是一个进程,docker stop 命令本质上是向该进程发送一个 SIGTERM 信号。如果想快速停止容器,可使用 docker kill 命令,其作用是向容器进程发送 SIGKILL 信号。 --restart 容器因某种错误而停止运行时,自动重启 --restart=always --restart=on-failure:3 只有当容器的启动进程退出时,--restart 才生效。 退出包括正常退出或者非正常退出。 启动进程正常退出或发生 OOM,此时 docker 会根据 --restart 的策略判断是否需要重启容器。但如果容器是因为执行 docker stop 或docker kill 退出,则不会自动重启。 --------------------------------- docker rm docker rm -v $(docker ps -aq -f status=exited) docker create #可以先创建容器,稍后再启动 docker run 命令实际上是 docker create 和 docker start 的组合。

指定容器启动时执行的命令;进入容器(attach、exec);容器用途(服务类容器、工具类容器);容器运行相关的知识点 =================================================================================================== 3种方式指定容器启动时执行的命令: 1.CMD 指令。 2.ENDPOINT 指令。 3.在 docker run 命令行中指定。 --------------------------------------------------------------------------------------- 两种进入容器的方法: docker attach #attach 到容器启动命令的终端 注:可通过 Ctrl+p 然后 Ctrl+q 组合键退出 attach 终端;使用exit的话,将会退出容器 docker exec -it <container> bash|sh attach 与 exec 主要区别如下: 1.attach 直接进入容器 启动命令 的终端,不会启动新的进程。 2.exec 则是在容器中打开新的终端,并且可以启动新的进程。 3.如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。 如果只是为了查看启动命令的输出,可以使用 docker logs 命令:docker logs -f <container> ----------------------------------------------------------------------------------------- 按用途容器大致可分为两类:服务类容器和工具类的容器。 1. 服务类容器以 daemon 的形式运行,对外提供服务。比如 web server,数据库等。通过 -d 以后台方式启动这类容器是非常合适的。如果要排查问题,可以通过 exec -it 进入容器。 2. 工具类容器通常给能我们提供一个临时的工作环境,通常以 run -it 方式运行 工具类容器多使用基础镜像,例如 busybox、debian、ubuntu 等。 ----------------------------------------------------------------------------------------- 容器运行相关的知识点: 1.当 CMD 或 Entrypoint 或 docker run 命令行指定的命令运行结束时,容器停止。 2.通过 -d 参数在后台启动容器。 3.通过 exec -it 可进入容器并执行命令。

容器资源限额:--memory/--cpu-shares/--blkio-weight ============================================================================================ -m 或 --memory:设置内存的使用限额,例如 100M, 2G。默认参数为-1,即对容器内存没有限制。 --memory-swap:设置 内存+swap 的使用限额。默认为 -m 的两倍;当-m为-1时,--memory-swap也没有限制。 docker run -m 200M --memory-swap=300M ubuntu #允许该容器最多使用 200M 的内存和 100M 的 swap。 docker run -it -m 200M ubuntu #容器最多使用 200M 物理内存和 200M swap。 progrium/stress 镜像:测试容器内存的使用 docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M --vm 1:启动 1 个内存工作线程。 --vm-bytes 280M:每个线程分配 280M 内存。 限制容器对内存的使用 - 每天5分钟玩转 Docker 容器技术(27) ---------------------------------------------------------------------- -c 或 --cpu-shares 设置容器使用 CPU 的权重。如果不指定,默认值为 1024。 与内存限额不同,通过 -c 设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值。 docker run --name "container_A" -c 1024 ubuntu docker run --name "container_B" -c 512 ubuntu container_A 的 cpu share 1024,是 container_B 的两倍。当两个容器都需要 CPU 资源时,container_A 可以得到的 CPU 是 container_B 的两倍。 限制容器对CPU的使用 - 每天5分钟玩转 Docker 容器技术(28) ---------------------------------------------------------------------- --blkio-weight 参数来改变容器 block IO 的优先级。默认情况下,所有容器能平等地读写磁盘。 --blkio-weight 与 --cpu-shares 类似,设置的是相对权重值,默认为 500。 docker run -it --name container_A --blkio-weight 600 ubuntu docker run -it --name container_B --blkio-weight 300 ubuntu bps 是 byte per second,每秒读写的数据量。 iops 是 io per second,每秒 IO 的次数。 可通过以下参数控制容器的 bps 和 iops: --device-read-bps,限制读某个设备的 bps。 --device-write-bps,限制写某个设备的 bps。 --device-read-iops,限制读某个设备的 iops。 --device-write-iops,限制写某个设备的 iops。 下面这个例子限制容器写 /dev/sda 的速率为 30 MB/s docker run -it --device-write-bps /dev/sda:30MB ubuntu 限制容器的 Block IO - 每天5分钟玩转 Docker 容器技术(29)

容器的底层实现技术:cgroup 和 namespace =========================================================================== 容器的底层实现技术:cgroup 和 namespace cgroup 实现资源限额, namespace 实现资源隔离。 cgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。 --cpu-shares、-m、--device-write-bps 实际上就是在配置 cgroup。 cgroup配置目录:/sys/fs/cgroup /sys/fs/cgroup/cpu/docker /sys/fs/cgroup/memory/docker /sys/fs/cgroup/blkio/docker --------------------------------------------------------------------------- namespace 管理着 host 中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。换句话说,namespace 实现了容器间资源的隔离。 Linux 使用了六种 namespace,分别对应六种资源:Mount、UTS、IPC、PID、Network 和 User
系统默认的network namespace目录/var/run/netns/
但是docker network namespace目录为/var/run/docker/netns/?????

实验:配置docker daemon允许远程请求(docker跨host远程管理) 默认配置下,Docker daemon 只能响应来自本地 Host 的客户端请求。 1.修改文件 vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock #修改前 ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0 --containerd=/run/containerd/containerd.sock #修改后 2.重新加载docker文件并重启docker daemon systemctl daemon-reload systemctl restart docker.service 3.远程查看docker [root@yefeng ~]# docker -H 192.168.1.111 ps #变更前 Cannot connect to the Docker daemon at tcp://192.168.1.111:2375. Is the docker daemon running? [root@yefeng ~]# docker -H 192.168.1.111 ps -a #变更后 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6462d4b17018 httpd:2.4.48-alpine "httpd-foreground" 6 months ago Exited (0) 6 months ago docker01 [root@yefeng ~]# docker -H 192.168.1.111 run -d httpd 43e93a22fe745a5554f0a3fb3fabec495328318e8438b75c8edb9caf9f8e047c
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!