Docker容器的运行和操作

13 篇文章 1 订阅
13 篇文章 0 订阅

一、容器的运行

1、运行容器

docker run

docker run ubuntu:12.04  pwd

容器启动时执行 pwd,返回的 / 是容器中的当前目录,运行完之后,自动退出容器

2、查看所有容器

docker ps -a

docker container ls -a

-a 显示所有状态的容器,状态为Up、Exited

3、保持容器长期运行

原理:容器的生命周期依赖于启动时执行的命令,只要该命令不结束,容器也就不会退出

-d 以后台方式启动容器

docker  run  -d  ubuntu:12.04  /bin/bash  -c  "while true ; do sleep 1; done"

docker ps 中

CONTAINER ID 是容器的 “短ID”,前面启动容器时返回的是 “长ID”。短ID是长ID的前12个字符

NAMES 字段显示容器的名字,在启动容器时可以通过 --name 参数显示地为容器命名,如果不指定,docker 会自动为容器分配名字

容器的后续操作,需通过 “长ID”、“短ID” 或者 “名称” 来指定要操作的容器

容器常见用途是运行后台服务

docker  run   --name  "my-httpd"  -d   httpd

--name 指定了容器的名字

容器运行的命令是httpd-foreground,通过 docker history 可知这个命令是通过 CMD 指定的

docker   history   httpd

二、进入容器

1、docker attach

docker  run  -d  ubuntu:14.04  /bin/bash  -c  "while true ; do sleep 1; echo this is a test ; done"

通过 Ctrl+p 然后 Ctrl+q 组合键退出 attach 终端

2、docker exec

通过 docker exec 进入相同的容器

docker  exec  -it  9c627f2de965  bash

-it 以交互模式打开 pseudo-TTY,执行 bash,其结果就是打开了一个 bash 终端

进入到容器中,容器的 hostname 就是其 “短ID”

像在普通 Linux 中一样执行命令。ps -efl 显示了容器启动进程while 以及当前的 bash 进程

执行 exit 退出容器,回到 docker host

docker exec -it <container> bash|sh 是执行 exec 最常用的方式

3、attach VS exec

attach 与 exec 主要区别如下:

attach 直接进入容器 启动命令 的终端,不启动新进程

exec 在容器中打开新终端,并且可以启动新进程

若直接在终端中查看启动命令的输出,用 attach,其他情况使用 exec

若只是查看启动命令的输出,可用 docker logs 命令

docker logs  -f  9c627f2de965

-f 作用与 tail -f 类似,持续打印输出

三、容器的分类

1、服务类容器 以 daemon 的形式运行,对外提供服务。比如 web server,数据库等。通过 -d 以后台方式启动这类容器是非常合适的。如果要排查问题,可以通过 exec -it 进入容器

2、工具类容器 通常提供一个临时的工作环境,通常以 run -it 方式运行

docker  run  -it  busybox

wget www.baidu.com

exit

运行 busybox,run -it 的作用是在容器启动后就直接进入。通过 wget 验证了在容器中访问 internet。执行 exit 退出终端,同时容器停止。

工具类容器 多使用基础镜像,例如 busybox、debian、ubuntu 等

四、容器常用操作

1、stop/start/restart 容器

docker stop 可以停止Exited 运行的容器

容器在 docker host 中实际上是一个进程,docker stop 命令本质上是向该进程发送一个 SIGTERM 信号。如果想快速停止容器,可使用 docker kill 命令,其作用是向容器进程发送 SIGKILL 信号

对于处于停止状态的容器,可以通过 docker start 重新启动

docker start 会保留容器的第一次启动时的所有参数

docker restart 可以重启容器,其作用就是依次执行 docker stop 和docker start。

容器可能会因某种错误而停止运行。对于服务类容器,希望在这种情况下容器能够自动重启。启动容器时设置 --restart 就可以达到这个效果

docker  run  -d  --restart=always  httpd

--restart=always 意味着无论容器因何种原因退出(包括正常退出),就立即重启。该参数的形式还可以是 --restart=on-failure:3,意思是如果启动进程退出代码非0,则重启容器,最多重启3次

2、pause/unpause 容器

有时希望暂时让容器暂停工作一段时间,比如要对容器的文件系统打个快照,或者 dcoker host 需要使用 CPU,这时可以执行

docker pause  9c627f2de965

处于暂停状态的容器不会占用 CPU 资源,docker unpause 直接恢复运行

docker unpause  9c627f2de965

3、删除容器

使用 docker 一段时间后,host 上可能会有大量已经退出了的容器

这些容器依然会占用 host 的文件系统资源,如果确认不会再重启此类容器,可以通过 docker rm 删除

docker rm 一次可以指定多个容器,如果希望批量删除所有已经退出的容器,可以执行如下命令:

docker rm -v $(docker ps -aq -f status=exited)

对比一下:

docker rm 是删除容器,而 docker rmi 是删除镜像

4、容器各种状态之间是如何转换

 

5、先创建容器,稍后再启动

docker  create  httpd

docker  ps  -a

docker  start  92aada49e11d

docker  ps

6、只有当容器的启动进程 退出 时,--restart 才生效

退出包括正常退出或者非正常退出。这里举了两个例子:启动进程正常退出或发生 OOM,此时 docker 会根据 --restart 的策略判断是否需要重启容器。但如果容器是因为执行 docker stop 或docker kill 退出,则不会自动重启

 

详情请见,微信公众号

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值