接上章:https://blog.csdn.net/weixin_46546303/article/details/139305721?spm=1001.2014.3001.5502
容器生命周期管理类
create、exec、kill、pause、restart、rm、run、start、stop、unpause
docker create
描述信息
docker container create(或简写:)从指定的图像创建一个新的容器,但不启动它。
创建容器时,Docker 守护程序会在指定镜像上创建可写容器层,并准备运行指定命令。容器 ID 随后会打印到STDOUT。这类似于 ,docker run -d 只是容器从未启动过。然后,您可以使用docker container start (或简写:docker start)命令随时启动容器。
命令格式:
`docker create [OPTIONS] IMAGE [COMMAND] [ARG...]`
可用选项
--add-host ##添加自定义主机到IP的映射(主机:IP)
-a, --attach ##连接到 STDIN、STDOUT 或 STDERR
--blkio-weight uint16 ##块IO(相对权重),介于10到1000之间,或0表示禁用(默认为0)
--blkio-weight-device list ##块IO权重(相对设备权重)(默认值[])
--cap-add list ##添加Linux功能
--cap-drop list ##丢弃Linux功能
--cgroup-parent string ##容器的可选父级cgroup
--cidfile string ##将容器ID写入文件
--cpu-period int ##限制CPU CFS(完全公平调度程序)周期
--cpu-quota int ##Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int ##限制CPU CFS(完全公平调度程序)配额
--cpu-rt-runtime int ##限制CPU实时运行时间(微秒)
-c, --cpu-shares int ##CPU份额(相对权重)
--cpus decimal ##CPU数量
--cpuset-cpus string ##允许执行的CPU(0-3,0,1)
--cpuset-mems string ##允许执行的内存(0-3,0,1)
--device list ##向容器中添加主机设备
--device-cgroup-rule list ##向cgroup允许的设备列表添加规则
--device-read-bps list ##限制设备的读取速率(字节/秒)(默认值[])
--device-read-iops list ##限制设备的读取速率(IO/秒)(默认值[])
--device-write-bps list ##限制设备的写入速率(字节/秒)(默认值[])
--device-write-iops list ##限制设备的写入速率(IO/秒)(默认值[])
--disable-content-trust ##跳过镜像验证(默认为true)
--dns list ##设置自定义DNS服务器
--dns-option list ##设置DNS选项
--dns-search list ##设置自定义DNS搜索域
--entrypoint string ##覆盖镜像的默认入口点
-e, --env list ##设置环境变量
--env-file list ##读取环境变量文件
--expose list ##暴露一个或某个端口范围
--group-add list ##添加要加入的其他组
--health-cmd string ##运行命令以检查运行状况
--health-interval duration ##运行检查的间隔时间(MS||S||M||H)(默认0s)
--health-retries int ##连续失败需要报告不健康
--health-start-period duration ##开始运行前容器初始化的开始周期-重试倒计时(ms||s||m||h)(默认0s)
--health-timeout duration ##允许一次检查运行的最长时间(MS||S||M||H)(默认0s)
--help ##打印用法
-h, --hostname string ##容器主机名
--init ##在容器内运行一个init,用于转发信号和获取进程
-i, --interactive ##即使未连接,也要保持STDIN打开
--ip string ##IPv4地址(如172.30.100.104)
--ip6 string ##IPv6地址(如2001:DB8::33)
--ipc string ##使用IPC模式
--isolation string ##容器隔离技术
--kernel-memory bytes ##内核内存限制
-l, --label list ##在容器上设置元数据
--label-file list ##读取标签分隔行文件
--link list ##添加到另一个容器的链接
--link-local-ip list ##容器IPv4/IPv6本地链路地址
--log-driver string ##容器的日志记录驱动程序
--log-opt list ##日志驱动程序选项
--mac-address string ##容器MAC地址(例如,92:d0:c6:0a:29:33)
-m, --memory bytes ##内存限制
--memory-reservation bytes ##内存软限制
--memory-swap bytes ##交换分区限制等于内存加交换:'-1',以启用无限制交换
--memory-swappiness int ##调整容器内存交换度(0到100)(默认值-1)
--mount mount ##将文件系统挂载附加到容器
--name string ##为容器指定一个名称
--network string ##将容器连接到网络(默认值为“default”)
--network-alias list ##为容器添加网络作用域别名
--no-healthcheck ##禁用任何容器指定的健康检查
--oom-kill-disable ##禁用OOM
--oom-score-adj int ##调整主机的OOM首选项(-1000到1000)
--pid string ##要使用的PID命名空间
--pids-limit int ##调谐容器PID限制(设置-1表示无限制)
--privileged ##赋予此容器扩展权限
-p, --publish list ##将容器的端口发布到主机
-P, --publish-all ##将所有公开的端口发布到随机端口
--read-only ##将容器的根文件系统挂载为只读
--restart string ##重新启动策略,以便在容器退出时应用(默认值为“否”)
--rm ##退出时自动移除容器
--runtime string ##用于此容器的运行时
--security-opt list ##安全选项
--shm-size bytes ##/dev/shm的大小
--stop-signal string ##停止容器的信号(默认为“SIGTERM”)
--stop-timeout int ##停止容器的超时时间(秒)
--storage-opt list ##容器的存储驱动程序选项
--sysctl map ##Sysctl选项(默认映射[])
--tmpfs list ##挂载一个tmpfs目录
-t, --tty ##分配伪TTY
--ulimit ulimit ##Ulimit选项(默认值[])
-u, --user string ##用户名或UID(格式:<name||uid>[:<group||gid>])
--userns string ##要使用的用户命名空间
--uts string ##要使用的UTS命名空间
-v, --volume list ##绑定挂载一个卷
--volume-driver string ##容器的可选Volume驱动程序
--volumes-from list ##从指定的容器挂载卷
-w, --workdir string ##容器内的工作目录
示例,此处只演示高频选项
root@xxx:~# docker create nginx:latest ##根据nginx镜像创建一个容器,未指定容器名字,docker将会自动分配容器名,创建完成之后未运行,处于Created状态
b22fc7bdc7ab944e1fd49236c586791883920cad15912f9faa899a1834f2446f
root@xxx:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@xxx:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b22fc7bdc7ab nginx:latest "/docker-entrypoint.…" 9 seconds ago Created eager_dhawan
root@xxx:~# docker create -it \ ##-it :分配一个伪终端,并保持交互
> -p 10001:80 \ ## -p:将容器的80端口映射到宿主机的10001端口
> -v /data/nginx/html:/var/www/html \ ## 将宿主机/data/nginx/html挂载到容器/var/www/html
> -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \ ##将宿主机data/nginx/conf/nginx.conf只读挂载到/etc/nginx/nginx.conf
> -v /data/nginx/log:/var/log/nginx:rw \ ##将宿主机/data/nginx/log读写挂载到/var/log/nginx
> --name web_server1 \ ##指定容器名字
> nginx /bin/bash ##使用nginx镜像 指定启动容器运行指令
dc0cb0d54b1541a4a218d6bd953dc8a4cbf9e89fd4337e11057bd3c048dc02de
root@xxx:~# docker ps ##查看运行中的容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@xxx:~# docker ps -a ##查看所有容器信息,包含运行中的和非运行状态的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc0cb0d54b15 nginx "/docker-entrypoint.…" 13 seconds ago Created web_server1
b22fc7bdc7ab nginx:latest "/docker-entrypoint.…" 18 minutes ago Created eager_dhawan
root@xxx:~# docker start dc0cb0d54b15
dc0cb0d54b15
root@xxx:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc0cb0d54b15 nginx "/docker-entrypoint.…" 28 seconds ago Up 2 seconds 0.0.0.0:10001->80/tcp web_server1
备注:docker create使用较少,一般用于想要提前设置容器配置以便在需要时可以立即启动时,此功能非常有用。新容器的初始状态为created
docker exec
描述信息
docker exec命令:在正在运行的容器中运行新命令。
指定的命令docker exec仅在容器的主进程(PID 1)运行时运行,并且如果容器重新启动,该命令也不会重新启动。
该命令在容器的默认工作目录中运行。
命令格式
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
可用选项
-d, --detach ##分离模式:在后台运行命令
--detach-keys string ##覆盖用于分离容器的密钥序列
-e, --env list ##设置环境变量
-i, --interactive ##即使未连接,也要保持STDIN打开
--privileged ##赋予命令扩展权限
-t, --tty ##分配伪TTY
-u, --user string ##用户名或UID(格式:<name||uid>[:<group||gid>])
-w, --workdir string ##容器内的工作目录
示例
root@xxx:~# docker run --name ubuntu_server-01 -d -i -t ubuntu:16.04 /bin/bash ##创建一个后台运行名为ubuntu_server-01的容器,并分配一个伪终端保持交互模式,-i选项设置为保持STDIN连接(-i),以防止/bin/bash进程立即退出。
92a6ea1b024b2b240e80cb9396db1f660c89230dbfb1f843f8015817db14992a
root@xxx:~# docker ps ##查看运行中的容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
92a6ea1b024b ubuntu:16.04 "/bin/bash" 3 seconds ago Up 2 seconds ubuntu_server-01
root@xxx:~# docker exec -d ubuntu_server-01 touch /tmp/testfile ##后台在ubuntu_server-01容器内创建/tmp/testfile文件
root@xxx:~# docker exec -it ubuntu_server-01 /bin/bash ##在容器ubuntu_server-01中启动一个新的shell会话,并分配一个伪终端保持交互模式,相当于进入了这个容器
root@92a6ea1b024b:/# ls /tmp ##在容器内,可以看到刚才创建的testfile文件
testfile
root@92a6ea1b024b:/# env ##容器内的环境变量
HOSTNAME=92a6ea1b024b
TERM=xterm
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
HOME=/root
root@xxx:~# docker exec -e VAR_A=1 -e VAR_B=2 ubuntu_server-01 env ##在ubuntu_server-01创建一个新的shell会话,并将环境变量$VAR_A设置为1,并将$VAR_B设置为2。
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=92a6ea1b024b
VAR_A=1
VAR_B=2
HOME=/root
##因没有分配终端,所以执行后只打印出env执行结果,该进程结束。这些环境变量仅对该命令启动的进程有效,对容器内运行的其他进程不可用,该命令会继承在创建容器时设置的环境变量。使用--env(或-e简写)可覆盖全局环境变量,或为启动的进程设置其他环境变量
root@xxx:~# docker exec ubuntu_server-01 pwd ##默认情况下,docker exec命令在创建容器时在相同的工作目录中运行。
/
root@xxx:~# docker exec -w /root ubuntu_server-01 pwd ##-w指定要执行命令的工作目录
/root
###docker exec COMMAND应该是可执行文件,链式命令或带引号的命令将不起作用
root@xxx:~# docker exec -it ubuntu_server-01 sh -c "echo a && echo b" ##正常执行
a
b
root@xxx:~# docker exec -it ubuntu_server-01 "echo a && echo b" ##异常报错
OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"echo a && echo b\": executable file not found in $PATH": unknown
docker kill
描述信息
杀死一个或多个正在运行的容器
命令格式
docker kill [OPTIONS] CONTAINER [CONTAINER...]
可用选项
-s, --signal ##发送给容器的信号(默认为“kill”)
示例
root@xxx:~# docker ps ##查看运行中的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
92a6ea1b024b ubuntu:16.04 "/bin/bash" 5 days ago Up 5 days ubuntu_server-01
dc0cb0d54b15 nginx "/docker-entrypoint.…" 5 days ago Up 5 days 0.0.0.0:10001->80/tcp web_server1
root@xxx:~# docker kill ubuntu_server-01 ##将KILL信号发送到容器,杀死容器
ubuntu_server-01
root@xxx:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc0cb0d54b15 nginx "/docker-entrypoint.…" 5 days ago Up 5 days 0.0.0.0:10001->80/tcp web_server1
root@xxx:~# docker ps -a ##查看到容器ubuntu_server-01已退出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
92a6ea1b024b ubuntu:16.04 "/bin/bash" 5 days ago Exited (137) 19 seconds ago ubuntu_server-01
dc0cb0d54b15 nginx "/docker-entrypoint.…" 5 days ago Up 5 days 0.0.0.0:10001->80/tcp web_server1
root@xxx:~# docker kill --signal=SIGHUP ubuntu_server-01 ##向容器发送自定义信号,按名称或数字指定自定义信号。该SIG前缀是可选的
###按名称或数字指定自定义信号。该SIG前缀是可选的,下面的例子是等价的
root@xxx:~# docker kill --signal=SIGHUP ubuntu_server-01
root@xxx:~# docker kill --signal=HUP ubuntu_server-01
root@xxx:~# docker kill --signal=1 ubuntu_server-01
补充知识:
Linux 下的信号分为可靠信号和不可靠信号,或称为实时信号和非实时信号,信号是从1开始编号的,不存在0号信号。对应于 Linux 的信号值为 1-31 和 34-64。0信号用来测试对应进程是否存在或者是否由权限给其发送信号
docker pause
描述信息
暂停一个或多个容器中的所有进程
命令格式
docker pause CONTAINER [CONTAINER...]
示例
root@xxx:~# docker pause ubuntu_server-01 ##暂停容器ubuntu_server-01
ubuntu_server-01
root@xxx:~# root@dg03dev80403584wq4c:~# docker ps ##暂停后,容器依旧是up状态,但是显示Pause
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
92a6ea1b024b ubuntu:16.04 "/bin/bash" 5 days ago Up 33 seconds (Paused) ubuntu_server-01
dc0cb0d54b15 nginx "/docker-entrypoint.…" 5 days ago Up 5 days 0.0.0.0:10001->80/tcp web_server1
root@xxx:~# docker exec -it ubuntu_server-01 /bin/bash ##尝试进入容器执行命令报错
Error response from daemon: Container ubuntu_server-01 is paused, unpause the container before execdocker pause ubuntu_server-01
ubuntu_server-01
docker restart
描述信息
重新启动一个或多个容器`
命令格式
docker restart [OPTIONS] CONTAINER [CONTAINER...]
可用选项
-t, --time ##杀死它之前等待停止的秒数(默认 10)
示例
root@xxx:~# docker restart ubuntu_server-01 ##重启容器ubuntu_server-01
ubuntu_server-01
root@xxx:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
92a6ea1b024b ubuntu:16.04 "/bin/bash" 5 days ago Up 6 seconds ubuntu_server-01
dc0cb0d54b15 nginx "/docker-entrypoint.…" 6 days ago Up 6 days 0.0.0.0:10001->80/tcp web_server1
docker rm
描述信息
删除一个或多个容器
命令格式
docker rm [OPTIONS] CONTAINER [CONTAINER...]
可用选项
-f, --force ##强制删除正在运行的容器(使用SIGKILL)
-l, --link ##删除指定的链接
-v, --volumes ##删除与容器关联的卷
示例
###同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来通信,也可以通过宿主机的ip加上容器暴露出的端口号来通信,前者会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip,后者的通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信。通过docker的link机制可以通过一个name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器,后续会在详细讲
root@xxx:~# docker run -itd --name redis-master redis:3.0 /bin/bash ##使用redis:3.0镜像创建一个名为redis-master的容器,并后台执行/bin/bash
1c6b1acfe1eab4e2a01abd06d073eda261b0242c44c9ba0ad6310f6bbde9bb94
root@xxx:~# docker run -itd --name redis-slave1 --link redis-master:master redis:3.0 /bin/bash ##使用redis:3.0镜像创建一个名为redis-slave1的容器,并链接到redis-master,redis-master的链接标签为master,并后台执行/bin/bash
68879f1c8643240fa8ab117e80edca1af7ff087d56221519175c3fd235e4bc28
root@xxx:~# docker run -itd --name redis-slave2 --link redis-master:master redis:3.0 /bin/bash ##使用redis:3.0镜像创建一个名为redis-slave2的容器,并链接到redis-master,redis-master的链接标签为master,并后台执行/bin/bash
9d8b689f4b856ac59a3fb8927faff6d0c99d863f6e5ae6852b99c8ee02046c8b
root@xxx:~# docker ps ##查看运行中的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec079420b80b redis:3.0 "docker-entrypoint.s…" 53 seconds ago Up 52 seconds 6379/tcp redis-slave2
5da26d257045 redis:3.0 "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp redis-slave1
1c6b1acfe1ea redis:3.0 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 6379/tcp redis-master
92a6ea1b024b ubuntu:16.04 "/bin/bash" 5 days ago Up 31 minutes ubuntu_server-01
dc0cb0d54b15 nginx "/docker-entrypoint.…" 6 days ago Up 6 days 0.0.0.0:10001->80/tcp web_server1
root@xxx:~# docker rm ubuntu_server-01 ##尝试删除运行中的容器,报错
Error response from daemon: You cannot remove a running container 92a6ea1b024b2b240e80cb9396db1f660c89230dbfb1f843f8015817db14992a. Stop the container before attempting removal or force remove
root@xxx:~# docker stop ubuntu_server-01 ##停止运行中的容器ubuntu_server-01
ubuntu_server-01
root@xxx:~# docker rm ubuntu_server-01 ##删除停止的容器ubuntu_server-01
ubuntu_server-01
root@xxx:~# docker ps -a ##查看所有容器验证ubuntu_server-01 已被删除
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec079420b80b redis:3.0 "docker-entrypoint.s…" 20 minutes ago Up 20 minutes 6379/tcp redis-slave2
5da26d257045 redis:3.0 "docker-entrypoint.s…" 20 minutes ago Up 20 minutes 6379/tcp redis-slave1
1c6b1acfe1ea redis:3.0 "docker-entrypoint.s…" 24 minutes ago Up 24 minutes 6379/tcp redis-master
dc0cb0d54b15 nginx "/docker-entrypoint.…" 6 days ago Up 6 days 0.0.0.0:10001->80/tcp web_server1
b22fc7bdc7ab nginx:latest "/docker-entrypoint.…" 6 days ago Created eager_dhawan
root@xxx:~# docker run --name ubuntu_server-01 -d -i -t ubuntu:16.04 /bin/bash ##重新创建容器ubuntu_server-01
1f5eff05ac16cf8f1c7946c3ceb0e95ee47b5230bd5f88291271fe720f622049
root@xxx:~# docker ps ##查看运行中的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f5eff05ac16 ubuntu:16.04 "/bin/bash" 32 seconds ago Up 32 seconds ubuntu_server-01
ec079420b80b redis:3.0 "docker-entrypoint.s…" 23 minutes ago Up 22 minutes 6379/tcp redis-slave2
5da26d257045 redis:3.0 "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 6379/tcp redis-slave1
1c6b1acfe1ea redis:3.0 "docker-entrypoint.s…" 27 minutes ago Up 27 minutes 6379/tcp redis-master
dc0cb0d54b15 nginx "/docker-entrypoint.…" 6 days ago Up 6 days 0.0.0.0:10001->80/tcp web_server1
root@xxx:~# docker rm -f ubuntu_server-01 ##强制删除运行中的容器ubuntu_server-01
ubuntu_server-01
root@xxx:~# docker ps -a ##验证容器ubuntu_server-01已被删除
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec079420b80b redis:3.0 "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 6379/tcp redis-slave2
5da26d257045 redis:3.0 "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 6379/tcp redis-slave1
1c6b1acfe1ea redis:3.0 "docker-entrypoint.s…" 27 minutes ago Up 27 minutes 6379/tcp redis-master
dc0cb0d54b15 nginx "/docker-entrypoint.…" 6 days ago Up 6 days 0.0.0.0:10001->80/tcp web_server1
b22fc7bdc7ab nginx:latest
root@xxx:~# docker exec -it redis-slave2 /bin/bash ##进入运行中的容器redis-slave2
root@xxx:~# cat /etc/hosts ## 容器中,查看主机关系信息
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.253.4 master 1c6b1acfe1ea redis-master ##这里是link信息,链接到192.168.253.4 redis-master这个容器
192.168.253.6 ec079420b80b ##容器redis-slave2 ip 主机名
root@ec079420b80b:/data# exit ##退出容器redis-slave2
exit
root@xxx:~# docker rm -l /redis-slave2/master ##删除redis-slave2和redis-master的网桥网络上指定的链接关系,格式"/容器名/链接目标标签"
/redis-slave2/master
root@xxx:~# docker exec -it redis-slave2 /bin/bash ##进入运行中的容器redis-slave2
root@ec079420b80b:/data# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.253.6 ec079420b80b ##链接关系已经消失
root@xxx:~# docker ps ##docker rm -l 只删除容器链接,不删除出容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec079420b80b redis:3.0 "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp redis-slave2
5da26d257045 redis:3.0 "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp redis-slave1
1c6b1acfe1ea redis:3.0 "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp redis-master
dc0cb0d54b15 nginx "/docker-entrypoint.…" 6 days ago Up 6 days 0.0.0.0:10001->80/tcp web_server1
root@xxx:~# docker rm -v web_server1 ##删除容器web_server1以及与其关联的所有卷。请注意,如果使用名称指定了卷,则不会将其删除。
web_server1
###关于卷的删除放在数据卷在详细展开
root@xxx:~# docker rm $(docker ps --filter status=exited -q) ##删除所有退出状态容器
root@xxx:~# docker ps --filter status=exited -q | xargs docker rm
docker run
由于docker run参数较多,将单开一张讲解
docker start
描述信息
启动一个或多个已停止的容器
命令格式
docker start [OPTIONS] CONTAINER [CONTAINER...]
可用选项
-a, --attach ##连接STDOUT/STDERR和前向信号
--detach-keys string ##覆盖用于分离容器的密钥序列
-i, --interactive ##连接容器的标准输入
示例
root@xxx:~# docker ps -a ##查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a20e113e64c6 ubuntu:16.04 "/bin/bash" 19 seconds ago Exited (0) 4 seconds ago ubuntu_server-01
root@xxx:~# docker start ubuntu_server-01 ##启动停止状态的容器ubuntu_server-01
ubuntu_server-01
root@xxx:~# docker ps ##查看运行中的容器验证状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a20e113e64c6 ubuntu:16.04 "/bin/bash" About a minute ago Up 3 seconds ubuntu_server-01
root@xxx:~# docker stop ubuntu_server-01 ##停止运行中的容器ubuntu_server-01
ubuntu_server-01
root@xxx:~# docker start -a ubuntu_server-01 ##启动停止中的容器ubuntu_server-01,并进入容器,输入任何指令都不会在终端显示,按ctrl+c终止
root@a20e113e64c6:/# exit
^C
root@xxx:~# docker ps ##ctrl+c终止后,查看容器依旧是运行状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a20e113e64c6 ubuntu:16.04 "/bin/bash" 2 minutes ago Up 21 seconds ubuntu_server-01
root@xxx:~# docker stop ubuntu_server-01 ####停止运行中的容器ubuntu_server-01
ubuntu_server-01
root@xxx:~# docker ps -a ##查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a20e113e64c6 ubuntu:16.04 "/bin/bash" 15 minutes ago Exited (0) 14 seconds ago ubuntu_server-01
root@xxx:~# docker start -i ubuntu_server-01 ##启动停止中的容器ubuntu_server-01,链接到容器标准输入,当退出标准输入之后,然后状态依旧显示为退出
root@a20e113e64c6:/# exit
exit
root@xxx:~# docker ps -a ##查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a20e113e64c6 ubuntu:16.04 "/bin/bash" 28 minutes ago Exited (0) 4 seconds ago ubuntu_server-01
root@xxx:~# docker start -ia ubuntu_server-01 ##和docker start -i 效果差不多
root@a20e113e64c6:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@a20e113e64c6:/# exit
exit
root@xxx:~# docker ps -a ##查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a20e113e64c6 ubuntu:16.04 "/bin/bash" 31 minutes ago Exited (0) 12 seconds ago ubuntu_server-01
docker stop
描述信息
停止一个或多个运行中的容器,当运行docker stop命令时,默认情况下Docker将发送SIGTERM信号给容器中的主进程以请求其优雅地停止,等待一段时间(默认10秒)后,如果主进程仍未停止,则Docker将发送SIGKILL信号给容器以强制其停止。
命令格式
docker stop [OPTIONS] CONTAINER [CONTAINER...]
可用选项
-t, --time int ##杀死它之前等待停止的秒数(默认 10)
示例
root@xxx:~# docker stop ubuntu_server-01
ubuntu_server-01
docker unpause
描述信息
取消暂停一个或多个容器中的所有进程
命令格式
docker unpause CONTAINER [CONTAINER...]
示例
root@xxx:~# docker pause ubuntu_server-01 ##挂起运行中的容器ubuntu_server-01
ubuntu_server-01
root@xxx:~# docker ps -a ##查看所有容器,验证ubuntu_server-01状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a20e113e64c6 ubuntu:16.04 "/bin/bash" 6 hours ago Up 29 seconds (Paused) ubuntu_server-01
root@xxx:~# docker unpause ubuntu_server-01 ##解除容器ubuntu_server-01挂起状态
ubuntu_server-01
root@xxx:~# docker ps -a ####查看所有容器,验证ubuntu_server-01状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a20e113e64c6 ubuntu:16.04 "/bin/bash" 6 hours ago Up 46 seconds ubuntu_server-01