1.5 Docker 容器管理
2018-05-13
1.5 Docker 容器管理
之前已经用过已有的镜像启动容器了,还可以正式的创建一个容器,但是不启动。
docker create 命令,原有的 docker run 命令用来创建一个 container 并创建一个线程来执行它,而 docker create 命令只是单纯地创建一个 container,并不执行,如果我们需要启动这个 container 的话,用 docekr start 命令即可。这样我们可以我们可以预先准备好多个 container,配置好相应的挂载存储和端口映射,并在需要的时候才启动这些 container,而在 1.2 版本以前,我们只能傻傻地用 docker run 命令启动一个 container,然后用 docker stop 命令来停止它,这样做显然很麻烦。
root@ubuntu:~# docker create -it ubuntu_with_net_and_wget
3556f94292bd67db3017cd274227811cc27364441f2f5741ea61a5a74188baba
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3556f94292bd ubuntu_with_net_and_wget:latest "/bin/bash" 16 seconds ago focused_sammet
611c89a8028f ubuntu-16.04-x86_64:latest "/bin/bash" 34 minutes ago Exited (0) 34 minutes ago sharp_sammet
81678fc4d6c7 ubuntu:latest "/bin/bash" 3 hours ago Up 2 hours happy_newton
root@ubuntu:~# docker start 3556f94292bd
3556f94292bd
root@ubuntu:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3556f94292bd ubuntu_with_net_and_wget:latest "/bin/bash" About a minute ago Up 10 seconds focused_sammet
81678fc4d6c7 ubuntu:latest "/bin/bash" 3 hours ago Up 2 hours happy_newton
对于 docker start,有 start 就有 stop 和 restart。
docker run -it Ubuntu /bin/bash 以某一镜像开启容器,这样进入一个虚拟终端中,我们可以运行一些命令,使用命令 exit 或者 Ctrl+D 退出该 bash,当退出后这个容器也会停止。
docker run -d 可以让容器在后台运行
root@ubuntu:~# docker run -itd ubuntu:v1 /bin/bash
c94dfc94f26f0eb8de00b7d634ef732f6f64057efb994040574ce23733314ec1
root@ubuntu:~# docker ps //并没有进入docker界面
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c94dfc94f26f ubuntu:v1 "/bin/bash" 6 seconds ago Up 5 seconds desperate_poincare
3556f94292bd ubuntu_with_net_and_wget:latest "/bin/bash" 12 minutes ago Up 11 minutes focused_sammet
81678fc4d6c7 ubuntu:latest "/bin/bash" 3 hours ago Up 2 hours happy_newton
进入该后台运行的容器
# docker exec -it container_id bash //可以临时打开一个虚拟终端,并且exit后,容器依然运行着
root@ubuntu:~# docker exec -it c94dfc94f26f /bin/bash
root@c94dfc94f26f:/#
root@c94dfc94f26f:/# exitroot@ubuntu:~#
root@ubuntu:~#
还可用 docker attach 命令进入一个后台运行的容器
# docker attach container_id //这种方式想要退出终端,就得用exit了,这样容器也就退出了
# docker attach c94dfc94f26f /bin/bash
后台运行容器并执行命令
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3556f94292bd ubuntu_with_net_and_wget:latest "/bin/bash" 30 minutes ago Up 29 minutes focused_sammet
81678fc4d6c7 ubuntu:latest "/bin/bash" 3 hours ago Up 3 hours
root@ubuntu:~# docker run -d ubuntu:v1 bash -c "while :; do echo 123;sleep 1;done"
48b4dc2675b263edff518f260517fd734ebe83605f68a6d3b31036fdf04e9742
root@ubuntu:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48b4dc2675b2 ubuntu:v1 "bash -c 'while :; d 14 seconds ago Up 14 seconds sad_banach
3556f94292bd ubuntu_with_net_and_wget:latest "/bin/bash" 32 minutes ago Up 31 minutes focused_sammet
81678fc4d6c7 ubuntu:latest "/bin/bash" 3 hours ago Up 3 hours happy_newton
docker logs 可以获取到容器的运行历史信息,用法如下
# docker logs container_id
docker logs命令查看docker终端输出
root@ubuntu:~# docker logs 48b4dc2675b2
123
123
123
123
123
123
root@ubuntu:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3556f94292bd ubuntu_with_net_and_wget:latest "/bin/bash" 35 minutes ago Up 33 minutes focused_sammet
81678fc4d6c7 ubuntu:latest "/bin/bash" 3 hours ago Up 3 hours happy_newton
我们可以看到其中有 NAMES 这一列,这一项可以再运行容器时就指定
root@ubuntu:~# docker run -itd --name name1 ubuntu:v1 /bin/bash
6dec20a19497b255a58521190655688c382ebddebd889218347128b72e0eee6e
root@ubuntu:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6dec20a19497 ubuntu:v1 "/bin/bash" 7 seconds ago Up 6 seconds name1
3556f94292bd ubuntu_with_net_and_wget:latest "/bin/bash" 40 minutes ago Up 39 minutes focused_sammet
81678fc4d6c7 ubuntu:latest "/bin/bash" 3 hours ago Up 3 hours happy_newton
删除一个容器
#docker rm 6532 //删除一个已停止的容器
#docker rm -f 6532 //删除一个任意状态的容器
还可以在以 run 形式运行容器时加入- -rm 选项,使其退出关闭时就自动删除,不能与-d 选项一起用
root@ubuntu:~# docker run -it --rm ubuntu:v1 bash -c "sleep 30"
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6dec20a19497 ubuntu:v1 "/bin/bash" 16 hours ago Up 16 hours name1
3556f94292bd ubuntu_with_net_and_wget:latest "/bin/bash" 16 hours ago Up 16 hours focused_sammet
81678fc4d6c7 ubuntu:latest "/bin/bash" 19 hours ago Up 19 hours happy_newton
容器迁移
容器导出
# docker export container_id > file.tar //导出容器,可以迁移到其他机器上,需要导入
root@ubuntu:~# docker export 6dec20a19497 > ubuntu_v1.tar
root@ubuntu:~# ls
ubuntu-16.04-x86_64.tar.gz ubuntu_v1.tar ubuntu_with_net_and_wget.tar
root@ubuntu:~# du -sh ubuntu_v1.tar
111M ubuntu_v1.tar
容器导入
先导入为镜像
root@ubuntu:~# cat ubuntu_v1.tar | docker import - ubuntu_v2
7ccdacdace595efda823ec8baa304648810ac2786c9906edf29596dd2dd2b144
root@ubuntu:~# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu_v2 latest 7ccdacdace59 13 seconds ago 110.3 MB
ubuntu-16.04-x86_64 latest be6ed5c5eae2 18 hours ago 500.1 MB
再去以这个镜像去启动容器
root@ubuntu:~# docker run -itd ubuntu_v2 bash
f369b57e550da53a3e0539e5c033aefcd90fef61305fc2eaed925853e5b56d74