技术改变生活

Technology changes life,Life-long learning

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

原文始发于:02 Docker 容器实操演示

点赞