02 Docker 容器实操演示

1、试运行一个容器

$ docker run ubuntu:15.10 /bin/echo "Hello world"

各个参数解析:
docker: Docker 的二进制执行文件
run: 与前面的 docker 组合来运行一个容器
ubuntu:15.10 指定镜像,Docker 首先从本地上查找镜像是否存在,如不存在,就会从镜像仓库 Docker Hub 下载
/bin/echo "Hello world": 在启动的容器里执行的命令

以上命令完整的意思可以解释为:
Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 /bin/echo "Hello world",然后输出结果。

2、运行交互式的容器

$ docker run -i -t ubuntu:15.10 /bin/bash

$ docker run -it ubuntu:15.10 /bin/bash

各个参数解析:
-t: 在新容器内指定一个伪终端或终端
-i: 允许你对容器内的标准输入(STDIN)进行交互
此时我们已进入一个 ubuntu15.10 系统的容器,用 ps -ef 查看下进程列表试试

3、启动容器 --【daemon模式】
$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do date; sleep 1; done"

输出结果中,我们没有看到 date 的返回值,而是一串长字符,它是容器ID,是唯一的,可通过容器 ID 来查看操作容器
上述命令运行多次试试,意味着什么?容器与镜像的关系

4、查看正在运行的容器及已生成的容器

$ docker ps # 查看正在运行的容器

$ docker ps -a # 查看所有容器,包括运行中(Up)及退出的(Exited)

CONTAINER ID: 容器ID
NAMES: 自动分配的容器名称
PORTS: 端口没配置为空
容器是概念,静态,非动态

5、创建一个容器,但不启动

$ docker create ubuntu:15.10 /bin/sh -c "while true; do date; sleep 1; done"

$ docker logs container id

【docker ps -a】列表里有显示,状态为Created
【docker ps】列表里没显示

6、启动一个已创建的容器,变成运行状态

$ docker start container id

$ docker start container name

$ docker start container01, container02,container03

【docker ps -a】列表里有显示,状态为【Up XX seconds】
【docker ps】列表里有显示,容器已经运行起来
综上所述:run = create + start

7、重启容器

$ docker restart container id

$ docker restart container name

$ docker restart container01, container02,container03

重启的容器状态改变,【docker ps】列表里的 STATUS 更新了时间
重启一个不在运行状态的容器,相当于启动容器【docker start】
重启的用途:
Tomcat 应用 OOM 了,重启应用会自愈
重启会释放文件句柄

8、暂停/恢复容器

$ docker pause container id

$ docker pause container name

$ docker unpause container id

$ docker unpause container name

暂停容器中所有的进程,STATUS 变为【Paused】
恢复容器中所有的进程,STATUS 恢复
处于暂停状态的容器不会占用 CPU 资源,直到通过 unpause 恢复运行,但仍占用内存,相当于进程不调度使用 CPU
用途:
对容器的文件系统打个快照,不运行程序,保持现场
让渡 CPU 资源给其它容器,宿主机使用

9、停止容器

$ docker stop container id

$ docker stop container name

$ docker ps

$ docker ps -a

10、删除容器

$ docker rm container id # 可删除不在运行状态的容器,运行中容器不能删除

$ docker rm container name

$ docker rm -f container id # 强制删除,无论容器是否在运行状态

$ docker rm -f container name

11、杀死一个或多个指定容器,实际上是发送信号给容器进程,默认 SIGKILL
docker kill -s KILL container id #指定信号-s KILL
docker kill container id #默认信号为SIGKILL

各个参数解析:
-s, --signal=KILL: Signal to send to the container 指定发送的信号
本质就是 Linux 的杀死进程,效果相当于删除,区别就是rm优雅有收尾处理,kill 简单快速

12、进入容器

$ docker attach container id

$ docker exec -it container id /bin/bash

attach 直接进入容器启动命令的终端,不会启动新的进程,可直接查看进程的标准输出
exec 则是在容器中打开新的终端,并且可以启动新的进程,类似 SSH 进VM,可操作
如果想直接在终端中查看启动命令的输出用 attach,其他情况使用exec
/bin/bash:根据镜像的 OS 版本 bash 不同

13、查看容器日志

$ docker logs container id

$ docker logs container name

$ docker logs -f container id

容器的标准输出日志,看看上述 daemon 模式启动的容器日志
-f 的作用与 tail -f 类似,能够动态查看日志的产生
容器启动的时候使用 --log-driver 来选择 Docker 日志驱动,默认的是 json-file

14、获取容器实时事件

$ docker events --since="1467302400"

$ docker events -f "image"="ubuntu" --since="1467302400"

$ docker events -f "image"="ubuntu:15.10" --since="1467302400" --until="1468302400"

OPTIONS说明:
-f :根据条件过滤事件
--since :从指定的时间戳后显示所有事件
--until :流水时间显示到指定的时间为止

15、显示容器的进程信息

$ docker top container id

$ docker top container name

16、显示容器文件系统的前后变化

$ docker diff container id

$ docker diff container name

进入容器,做些 mkdir,touch 操作后,执行命令

17、获取容器/镜像的元数据

$ docker inspect container id

$ docker inspect container name

$ docker inspect image name

docker inspect --format '{{.RootFS}}' ubuntu:15.10
docker inspect --format="{{ .State.Status }}, {{.Id}}" d1bc262e0a33

18、查看容器的端口映射

$ docker port container id

$ docker port container name

只有做了端口映射的才有显示
$ docker run -d -p 80:80 nginx:1.13
80/tcp -> 0.0.0.0:80

19、容器重命名

$ docker rename container01 container02

20、查看容器实时资源使用情况

$ docker stats

$ docker stats container id

$ docker stats container name

监控相关,容器使用CPU,内存,网络,存储IO等

21、查看本机全部容器使用的卷

$ docker volume ls

22、删除未被容器使用的卷

$ docker volume prune

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

推荐阅读更多精彩内容

  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,383评论 0 27
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,523评论 15 147
  • 简述docker一些常用的操作 查看到docker是否正常运行docker info 返回所有docker所有容器...
    翼动晴空阅读 1,003评论 0 10
  • 夜闻夏雨扰百户,淅淅沥沥落梦中。 醉夜相思离人愁,冷落庭院月光尽。 古时易安待德甫,终也无力再相寻。 夜雨不分对与...
    蠕动的大黄虫子阅读 185评论 0 0
  • 明月未曾老,年华已逝去。 硝烟四处起,烽火八方连。 年年叹月圆,夜夜思家还。 孤灯泪已尽,梦呓续团圆。
    思念方便面阅读 154评论 0 1