Docker的命令之容器管理 Container

Docker的容器概念这里不再详细叙述,可自行百度,通俗可理解为虚拟机,但远优越于虚拟机,这里只介绍,使用命令对 container (容器)进行操作,使用 docker container –help ,可以查看所有container(容器)相关的命令。

Usage:    docker container COMMAND

Manage containers

Options:
      --help   Print usage

Commands:
  attach      Attach local standard input, output, and error streams to 
              a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  inspect     Display detailed information on one or more containers
  kill        Kill one or more running containers
  logs        Fetch the logs of a container
  ls          List containers
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  prune       Remove all stopped containers
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  run         Run a command in a new container
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker container COMMAND --help' for more information on a command.
# 可以使用 docker container COMMAND --help ,继续查看使用说明。

一、详细介绍

export
等同于 docker export
将容器导出。
例如:docker export 89bbe6d629e2 -o c.tar
例如:docker export 89bbe6d629e2 | gzip > c1.tar.gz
commit、export、import、save、load的区别
start
等同于 docker start
启动已退出的容器
例如:docker start 9961bcc26a46
stop
等同于 docker stop
停止容器
例如:docker stop 89bbe6d629e2
restart
等同于 docker restart
重启容器
例如:docker restart f6ef0e0b3a1c
kill
等同于 docker kill

杀掉一个运行中的容器
例如:docker kill f6ef0e0b3a1c ,此时默认是KILL 信号
例如:docker kill -s KILL mynginx

Tips 2:kill和stop的区别
docker stop会向容器发送一个SIGTERM信号,然后过一段时间再发送SIGKILL信号。
我们知道,处理良好的程序可以捕捉SIGTERM信号,并进行清理动作然后退出。但是也可能可以忽略该信号。但是经过-t(默认10S)时间后,会再发送SIGKILL信号触发进程的最终的退出。

docker kill会向容器发送一个信号(SIGKILL或者其他信号)。
相比来说,docker stop可以更优雅的关闭容器,容器里的进程可以很好的退出。docker kill相当于快速地强制关闭容器。但是关闭容器并非是docker kill的唯一功能,向容器发送信号也是很有用的功能。

inspect
等同于 docker inspect
查看容器详细信息
例如:docker inspect 89bbe6d629e2
ls
等同于 docker ps
查看容器列表
例如:docker ps
例如:docker ps -a -q
attach
等同于 docker attach

连接到正在运行中的容器
例如:docker attach f6ef0e0b3a1c

exec
等同于docker exec

在运行的容器中执行命令
格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG…]

参数选项
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端

例如:
docker exec -it jovial_austin /bin/bash

Tips 1:注进入容器,且exit后不会停止容器的最佳方式。

rm
等同于 docker rm
删除容器
例如:docker rm -f linux
pause
等同于 docker pause
暂停容器中所有的进程
例如:docker pause f6ef0e0b3a1c
unpause
等同于 unpause
恢复容器中所有的进程
例如:docker  unpause f6ef0e0b3a1c
run
等同于docker run
创建一个新的容器并运行一个命令
语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -name “nginx-lb”: 为容器指定一个名称;
– -dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
– -dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h “mars”: 指定容器的hostname;
-e username=”ritchie”: 设置环境变量;
– -env-file []: 从指定文件读入环境变量;
- -cpuset “0-2″ or –cpuset “0,1,2”: 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;单位:bytes
- -net “bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container/自定义,默认bridge,选项的区别参考:–net 选项的区别
–ip 指定IPv4地址
–ip6 指定IPv6地址
– -link []: 添加链接到另一个容器;
- -expose []: 开放一个端口或一组端口;例如:使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data
例如:docker run -p 80:80 -v /data:/data -d nginx:latest
-p,–publish:端口映射
-P(大写) :随机开发三个映射端口到容器的80 443 22端口
例如:docker create -it –name=linux –net=bridge centos7.3:v1 bash
例如:docker create -it –name=ins01 –net=br10 –ip=192.168.10.100 centos7.3:v1
例如:docker create -i –name=php01 –net=br10 –ip=192.168.10.10 -p=10080:80 centos7.3:v1 bash
例如:docker create -i –name=php03 –net=br10 –ip=192.168.10.10 -p=80:80 –expose={“22″,”443″} centos7.3:v1
例如:docker create -it –name=php01 –net=br10 -v /data/www:/data:ro centos7.3:v1 bash
例如:docker create -it –name=ins01 –net=br10 –ip=192.168.10.10 –expose=9000 -v=php-data:/data/www -v=php-conf:/data/conf -v=php-logs:/data/logs centos:latest
create
等同于 docker create
用法同 docker run,创建一个新的容器但不启动它
top
等同于 docker ps
查看容器中运行的进程信息,支持 ps 命令参数
容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。例如:docker top mymysql
commit
等同于 docker commit
从容器中创建镜像
语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
例如:docker commit -m “centos、php7.16、ngix、php-fpm” -p 375c8825bf66  bindocker:latest
commit、export、import、save、load的区别
cp
等同于 docker cp
用于容器与主机之间的数据拷贝。
语法
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
OPTIONS说明:
-L :保持源目标中的链接
例如:docker cp /www/abc 96f7f14e99ab:/www/
例如:
docker cp /www/abc 96f7f14e99ab:/www
diff
等同于 docker diff
检查容器里文件结构的更改。
语法 :docker diff [OPTIONS] CONTAINER
例如:查看容器mymysql的文件结构更改。
docker diff mysql
logs
等同于 docker logs
获取容器的日志
语法:docker logs [OPTIONS] CONTAINER
OPTIONS说明:
-f : 跟踪日志输出
–since :显示某个开始时间的所有日志
-t : 显示时间戳
–tail :仅列出最新N条容器日志
实例:跟踪查看容器mynginx的日志输出。
docker logs -f mynginx
port
等同于 docker port
列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。
语法:docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
实例:查看容器mynginx的端口映射情况。
docker port 0020ddaca8dc
prune 删除已停止的容器,不清空运行、暂停的容器
例如:docker container prune
rename
等同于 docker rename
重新命名容器
例如:docker rename happy_beaver linuxBase
stats
等同于 docker stats
显示容器的内存、硬盘使用情况等
例如:docker stats
wait 阻塞运行直到容器停止,然后打印出它的退出代码。
语法: docker wait [OPTIONS] CONTAINER [CONTAINER…]
实例:docker wait 0020ddaca8dc

二、Tips

1、–net 选项的区别

  • –net=bridge— 默认选项,用网桥的方式来连接docker容器。
  • –net=host— 高数docker跳过配置容器的独立网络栈。本质上来说,这个参数告诉docker不去打包容器的网络层。当然,docker 容器的进程仍然被限制在它自己独有的文件系统、进程列表以及其他资源中。一个快速命令 ip addr 将像你展示docker的网络,它是建立在docker 宿主主机上的,有完整的权限去访问宿主主机的网络接口。注意这不意味着docker容器可以去重新配置宿主主机的网络栈,重新配置是需要–privaleged=true 这个选项参数的,但是这个选项参数会让docker容器打开大量的端口以及其他的系统的超级管理权限的进程。这也会允许容器去访问宿主主机的网络服务,比如 D-bus。这会使docker容器里的进程有有权限去做一些意想不到的事,比如重启你的宿主主机。所以要谨慎使用这个选项参数。
  • –net=container:NAME_or_ID— 告诉docker让这个新建的容器使用已有容器的网络配置。这个新建的容器将配置新的自己的文件系统和进程列表以及其他资源限制,但是将共享这个指定的容器的网络IP地址以及端口号,使得这两个容器可以通过 loopback接口相互访问。
  • –net=none— 告诉docker为新建的容器建立一个网络栈,但不对这个网络栈进行任何配置,在这个文档的最后将介绍如何让你去建立自定义的网络配置

2、commit、export、import、save、load的区别

commit:操作对象是容器 , 将容器导出一个带分层结构的镜像

export:操作对象是容器,将容器导出一个容器快照(.tar.gz的压缩包)
import:操作对象快照,导入一个容器快照到本地镜像库

save:操作对象是镜像,导出一个镜像存储文件(.tar.gz的压缩包)
load:操作对象镜像存储文件,导入镜像存储文件到本地镜像库

使用示例:

docker export 375c8825bf66 | gzip > export.tar.gz //158M
docker save binphp:v1 | gzip > save.tar.gz //163M

docker import export.tar.gz export -m "从export.tar.gz" //镜像大小463MB
docker load -i save.tar.gz //镜像大小 483MB

使用docker image inspect export
"RootFS": {
   "Type": "layers",
   "Layers": [
       "sha256:d51dda8231502b0d9a9d42baf1b3769f0389986c5a0bd58b1df96002bcf28288"
    ]
}


使用docker image inspect binphp:v1
"RootFS": {
   "Type": "layers",
   "Layers": [
      "sha256:99b28d9413e47df267df84318788754dd39d4c8e0dc2c72c9e8922b3a91f21fa",
      "sha256:13b364098285bdb1f76ab2d15e097b24791442553982d25c3d4eea8d71a83881"
   ]
}

可以看到区别 save的镜像文件保存了修改层结构,带分层结构。可以使用docker tags 回滚,
而export的快照文件,不带分层结构,未保存修改结构,无法回滚。

如果使用import导入save保存的镜像文件,则也无法保留层结构。
docker import save.tar.gz export -m "从export.tar.gz" //镜像大小494MB

从以上得出 export => import、save => load

 

推荐相关文档:

Docker的命令之容器管理 Container》上有3条评论

  1. Pingback引用通告: Docker的命令之概述 | 精彩每一天

  2. Pingback引用通告: Docker的命令之镜像管理 Image | 精彩每一天

  3. Pingback引用通告: Docker create / Docker run 的选项详解 | 精彩每一天

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>