docker技术入门与实战 第3版学习笔记之第4章

第4章 操作docker容器

容器是docker的另一个核心概念,简单的来说,容器就是镜像的一个运行实例。镜像是静态只读的文件,而容器带有运行是需要的可写文件层,同事容器中的应用进程是出于运行状态。

创建容器

新建容器

可以使用docker [container] create -it [--name 容器名称]命令创建一个容器,创建的容器是停止状态,可以使用docker  start 进项名称 命令启动

name可以不传递,不传递会自动起一个

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

 17286@LAPTOP-IV46MOMH  ~  docker create -it ubuntu:latest

Unable to find image'ubuntu:latest'locally

latest: Pulling from library/ubuntu

Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322

Status: Downloaded newer imageforubuntu:latest

2293fd544e1ab63491257e9b75c565990430a7c0050a2510085bd9ae559514f3

 17286@LAPTOP-IV46MOMH  ~  docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 17286@LAPTOP-IV46MOMH  ~   docker ps -a

CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS    PORTS     NAMES

2293fd544e1a   ubuntu:latest"bash"26 seconds ago   Created             objective_murdock

「create 命令与容器运行模式相关的选项」

选项说明

-a, --attach=[]是否绑定到标准输入、输出和错误

-d,--detach=truefalse

--detach-keys=""从 attach 模式退出的快捷键

--entrypoint=""镜像存在入口命令时,覆盖为新的命令

--expose=[]指定容器会暴露出来的端口或者端口范围

--group-add=[]运行容器的用户组

-i, --interactive=truefalse

--ipc=""容器的 IPC 命令空间,可以为其他容器或者主机

--isolation="default"容器使用的隔离级别

--log-driver="json-file"指定容器的日志驱动类型,可以为 json-file、syslog、journald、gelf、fluentd、awslogs、splunk、etwlogs、gcplogs 或 none

--log-opt=[]传递给日志驱动的选项

--net="bridge"指定容器网络模式,包括 bridge、none、其他容器内网络、host 的网络或者某个现有网络等

--net-alias=[]容器在网络中的别名

-P,--publish-all=truefalse

-p,--publish=[]指定如何映射到本地主机端口,例如 -p 11234-12234:1234-2234

--pid=host容器的 PID 命名空间

--userns=""启动 userns-remap 时配置用户命名空间的模式

--uts=host容器的 UTS 命名空间

--restart="no"容器的重启策略,包括 no、on-failure[:max-retry]、always、unless-stopped 等

--rm=truefalse

-t,--tty=truefalse

--tmpfs=[]挂载临时文件系统到容器

-v,--volume[=[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]挂载主机上的文件卷到容器内

--volume-driver=""挂载文件卷的驱动类型

--volumes-from=[]从其他容器挂载卷

-w,--workdir=""容器内的默认工作目录

「create 命令与容器环境和配置相关的选项」

选项说明

--add-host=[]在容器内添加一个主机名到 IP 地址的映射关系(通过 /etc/hosts 文件)

--device=[]映射物理机上的设备到容器内

--dns-search=[]DNS搜索域

--dns-opt=[]自定义的 DNS 选项

--dns=[]自定义的 DNS 服务器

-e,--env=[]指定容器内环境变量

--env-file=[]从文件中读取环境变量到容器内

-h,--hostname=""指定容器内的主机名

--ip=""指定容器的 IPv4 地址

--ip6=""指定容器的 IPv6 地址

--link=[:alias]链接到其他容器

--link-local-ip=[]:容器本地地址链接表

--mac-address=""指定容器的 Mac 地址

--name=""指定容器的别名

「create 命令与容器资源限制和安全保护相关的选项」

选项说明

--blkio-weight=10~1000容器读写块设备的 I/O 性能权重,默认为 0

--blkio-weight-device=[DEVICE_NAME:WEIGHT]指定各个块设备的 I/O 性能权重

--cpu-shares=0允许容器使用 CPU 资源的相对权重,默认一个容器能用满一个核的 CPU

--cap-add=[]增加容器的 Linux 指定安全能力

--cap-drop=[]移除容器的 Linux 指定安全能力

--cgroup-parent=""容器 cgroups 限制的创建路径

--cidfile=""指定容器的进程 ID 号写到文件

--cpu-period=0限制容器在 CFS 调度器下的 CPU 占用时间片

--cpuset-cpus=""限制容器能使用那些 CPU 核心

--cpuset-mems=""NUMA 架构下使用哪些 CPU 核心的内存

--cpu-quota=0限制容器在 CFS 调度器下的 CPU 配额

--device-read-bps=[]挂载设备的读吞吐率(以 bps 为单位)限制

--device-write-bps=[]挂载设备的写吞吐率(以 bps 为单位)限制

--device-read-iops=[]挂载设备的读速率(以每秒 i/o 次数为单位)限制

--device-write-iops=[]挂载设备的写速率(以每秒 i/o 次数为单位)限制

--health-cmd=""指定检查容器健康状态的命令

--health-interval=0s执行健康检查的间隔时间,单位可以以 ms、s、m 或 h

--health-retries=int健康检查的失败重试次数,超过则认为不健康

--health-start-period=0s容器启动后进行健康检查的等待时间,单位可以为 ms、s、m 或 h

--health-timeout=0s健康检查的执行超时,单位可以为 ms、s、m 或 h

--no-healthcheck=truefalse

--init在容器中执行一个 init 进程,来响应信号和处理僵尸状态的子进程

--kernel-momory=""限制容器内核的内存大小,单位可以是 b、k、m 或 g

-m,--memory=""限制容器内应用使用的内存,单位可以时 b、k、m 或 g

--memory-reservation=""当系统中内存过低时,容器会被强制限制内存到给定值,默认情况下等于内存限制值

--memory-swap="LIMIT"限制容器使用内存和交换区的总大小

--oom-kill-disable=truefalse

--oom-score-adj=""调整容器的内存耗尽参数

--pids-limit=""限制容器的 pid 格式

--privileged=truefalse

--read-only=truefalse

--security-opt=[]指定一些安全参数,包括权限、安全能力、apparmor 等

--stop-signal=SIGTERM指定停止容器的系统信号

--shm-size=""/dev/shm 的大小

--sig-proxy=truefalse

--memory-swappiness="0~100"调整容器的内存交换区参数

-u,--user=""指定在容器内执行命令的用户信息

--userns=""指定用户命名空间

--ulimit=[]通过 ulimit 来限制最大文件数、最大进程数等

其他选项有:

-l,--lable=[] : 以键值对方式指定容器的标签信息

--lable-file=[] : 从文件中读取标签信息

启动容器

使用docker [container] start命令可以启动一个已经创建的容器

 17286@LAPTOP-IV46MOMH  ~  docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 17286@LAPTOP-IV46MOMH  ~  docker ps -a

CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS                     PORTS     NAMES

e47e42c64319   ubuntu:latest"bash"13 minutes ago   Exited (0) 2 minutes ago             web

2293fd544e1a   ubuntu:latest"bash"21 minutes ago   Created                              objective_murdock

 17286@LAPTOP-IV46MOMH  ~  docker start web

web

 17286@LAPTOP-IV46MOMH  ~  docker ps

CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS          PORTS     NAMES

e47e42c64319   ubuntu:latest"bash"13 minutes ago   Up 13 seconds             web

新建并启动容器

docker [container] run命令等价于先执行docker [container] create再执行docker [container] start。当使用docker [container] run命令创建并启动容器时,Docker 在后台运行的标准操作包括:

检查本地是否存在指定的镜像,不存在就从公有仓库下载

利用镜像创建一个容器,并启动该容器

从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去

从网桥的地址池配置一个 IP 地址给容器

执行用户指定的应用程序

执行完毕后容器被自动终止

创建并启动一个ubuntu容器,并允许用户进行交互

-i选项让docker分配一个伪终端并绑定到容器的标准输入上

-i则是让容器的标准输入保持打开

当用户在bash里面退出时,容器也会自动退出,因为里面没有运行其他的东西,容器也就停止了

 17286@LAPTOP-IV46MOMH  ~  docker run -it ubuntu:18.04 /bin/bash

Unable to find image'ubuntu:18.04'locally

18.04: Pulling from library/ubuntu

284055322776: Pull complete

Digest: sha256:0fedbd5bd9fb72089c7bbca476949e10593cebed9b1fb9edf5b79dbbacddd7d6

Status: Downloaded newer imageforubuntu:18.04

root@a0e17d0f958e:/# pwd

/

root@a0e17d0f958e:/# ls

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

root@a0e17d0f958e:/# ps

PID TTY          TIME CMD

1 pts/0    00:00:00 bash

12 pts/0    00:00:00 ps

root@a0e17d0f958e:/#

有时候执行docker run的时候因为命令无法正常执行容器会出错直接退出,常见的代码错误包括:

125 :Docker daemon 执行出错,例如指定了不支持的Docker 命令参数;

126: 所指定命令无法执行,例如权限出错;

127:容器内命令无法找到。

守护态运行

更多的时候,需要让 Docker 容器在后台以守护态形式运行。此时可以使用 -d 参数来实现

 17286@LAPTOP-IV46MOMH  ~  docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 17286@LAPTOP-IV46MOMH  ~  docker ps -a

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 17286@LAPTOP-IV46MOMH  ~  docker run -it ubuntu:18.04 /bin/bash

root@6c0e37a75b5a:/# exit

exit

 17286@LAPTOP-IV46MOMH  ~  docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 17286@LAPTOP-IV46MOMH  ~  docker ps -a

CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                      PORTS     NAMES

6c0e37a75b5a   ubuntu:18.04"/bin/bash"17 seconds ago   Exited (0) 11 seconds ago             relaxed_bhaskara

 17286@LAPTOP-IV46MOMH  ~  docker run -it -d ubuntu:18.04 /bin/bash

8693bdd50cce204166e775c39fb26a5c17a16bf56b2334a5a07e709995dfa036

 17286@LAPTOP-IV46MOMH  ~  docker ps

CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES

8693bdd50cce   ubuntu:18.04"/bin/bash"3 seconds ago   Up 3 seconds             vigilant_tesla

 17286@LAPTOP-IV46MOMH  ~  docker ps -a

CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                      PORTS     NAMES

8693bdd50cce   ubuntu:18.04"/bin/bash"7 seconds ago    Up 7 seconds                          vigilant_tesla

6c0e37a75b5a   ubuntu:18.04"/bin/bash"37 seconds ago   Exited (0) 32 seconds ago             relaxed_bhaskara

查看容器输出(日志)

可以通过docker [container] logs命令获取容器的输出信息。该命令支持的选项包括:

-details : 打印详细信息

-f,-follow : 持续保持输出

-since string: 输出从某个时间开始的日志

-tail string : 输出最近的若干信息

-t, -timestamps : 显示时间戳信息

-until string : 输出某个时间之前的日志

例如,查看某容器最新的日志输出docker logs -tail kong

停止容器

暂停容器

可以使用docker pause 容器名称将容器进行停止

PS C:\Users\fe> docker ps

CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS              PORTS     NAMES

0fce480b3756   ubuntu:18.04"/bin/bash"About a minute ago   Up About a minute             jolly_ramanujan

PS C:\Users\fe> docker pause jolly_ramanujan

jolly_ramanujan

PS C:\Users\fe> docker ps

CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS                       PORTS     NAMES

0fce480b3756   ubuntu:18.04"/bin/bash"About a minute ago   Up About a minute (Paused)             jolly_ramanujan

处于pause(暂停)的容器可以使用docker unpause 镜像名称进行恢复,这两个命令后面可以跟着多个容器名称

PS C:\Users\fe> docker ps

CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS              PORTS     NAMES

4092ec02e35a   ubuntu:18.04"/bin/bash"About a minute ago   Up About a minutetest

0fce480b3756   ubuntu:18.04"/bin/bash"6 minutes ago        Up 6 minutes                  jolly_ramanujan

PS C:\Users\fe> docker pause jolly_ramanujantest

jolly_ramanujan

test

PS C:\Users\fe> docker ps

CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                  PORTS     NAMES

4092ec02e35a   ubuntu:18.04"/bin/bash"2 minutes ago   Up 2 minutes (Paused)test

0fce480b3756   ubuntu:18.04"/bin/bash"6 minutes ago   Up 6 minutes (Paused)             jolly_ramanujan

PS C:\Users\fe> docker unpause jolly_ramanujantest

jolly_ramanujan

test

PS C:\Users\fe> docker ps

CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES

4092ec02e35a   ubuntu:18.04"/bin/bash"2 minutes ago   Up 2 minutestest

0fce480b3756   ubuntu:18.04"/bin/bash"6 minutes ago   Up 6 minutes             jolly_ramanujan

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容