windows 7, docker 1.3.2,当前使用的容器名为aoct,ID为614122c0aabb。
开启已经停止的容器
可以start + 容器名
$ sudo docker start aoct
或start + 容器ID
$ sudo docker start 614122c0aabb
查看现在正在运行的容器:
$ sudo docker ps
还可以用docker restart重启。
附到容器上
Docker容器重新启动时,会沿用docker run命令指定的参数来运行,所以重新启动后会运行一个交互式会话shell。也可以用docker attach命令重新附到该容器的会话上:
$ sudo docker attach aoct
现在就重新回到容器的巴士提示符。
也可以用容器ID:
$ sudo docker attach 614122c0aabb
创建守护式容器
除了这些交互式运行的容器(interactive container),也可以创建长期运行的容器。守护式容器(daemonized container)没有交互式会话,适合运行应用程序和服务。大多数时候是需要以守护式来运行容器。
可以通过添加 -d 参数来实现,创建一个叫aofo的容器:
sudo docker run --name aofo -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
上面的命令会让容器在后台运行。使用了一个while循环,改循环会一直打印hello world,知道容器或其进程停止运行。
与之前创建的容器相比,没有返回shell会话,只是返回了一个容器ID。
查看现在正在运行的容器:
$ sudo docker ps
容器内部在干些什么
上面创建了一个在后台运行while循环的守护型容器,可以用docker logs查看容器日志:
$ sudo docker logs aofo
可以在命令后使用-f参数来健康Docker日志,这与tail -f非常相似:
$ sudo docker logs -f aofo
然后就会看到一直输出hello world。可以通过ctrl+c来退出监控个。
查看容器内的进程
$ sudo docker top aofo
可以看到容器内的所有进程(主要是while循环)、运行进程的用户、进程ID:
在容器内部运行进程
Docker 1.3 之后可以通过docker exec命令在容器内部额外启动新进程。可以在容器内运行两种进程:后台任务、交互式任务。后台任务在容器内运行且没有交互需求,交互式二年五则保持在前台运行。对于需要早容器内部贷款shell的任务,用交互式任务.
后台任务例子:
$ sudo docker exec -d daemon aofo touch /etc/new_config_file
代码解释:-d标志标明要运行一个后台进程,后面指定要在内部执行这个命令的容器名,我用的是aofo。整句命令在aofo容器内创建了一个空文件夹new_config_file。
交互式任务例子:
$ sudo docker exec -t -i aofo /bin/bash
代码解释: 和运行交互容器一一,这里-t、-i标志位指明创建TTY并捕捉STDIN。后面指定要在内部执行这个命令的容器名,我用的是aofo。整句命令在aofo容器内创建新的bash对话,就可以在该容器运行其他命令了。
docker exec命令是在 Docker 1.3 引入的,之前版本不支持。可用nsenter命令
停止守护式容器
docker stop命令:
$ sudo docker stop aofo
也可以用容器ID只带容器名称:
$ sudo docker stop ddd958443007
如果想快速停止容器,还可以用docker kill命令:
$ sudo docker kill aofo
可以用docker ps命令产科当前运行的容器。也可以用docker ps -n x,该命令会显示最后x个容器,不论这些容器是运行还是停止的。
$ sudo docker ps -n 2
深入容器
用docker inspect获取更多的容器信息:
$ sudo docker inspect aofo
可以用-f或者--format标志来选定查看结果。
查看容器运行状态:
$ sudo docker inspect --format='{{ .State.Running }}' aofo
查看容器IP地址:
docker@boot2docker:~$ sudo docker inspect --format='{{ .NetworkSettings.IPAddress }}' aofo
我没有设置,所以返回空:
-f和--format标志支持完整的GO语言模板。用它进程查询时,可以重复利用GO语言米板的优势。
可以同时制定多个容器,并显示每个容器的结果:
$ sudo docker inspect --format='{{ .State.Running }}' aofo aoct
除了查看容器,还可以浏览/var/lob/docker目录了解Docker的工作原理,该目录存放着Docker镜像、容器、容器配置。所有容器都保存在/var/lib/docker/containers目录下。
删除容器
运行中的容器无法删除,必须先停止。使用docker rm:
$ sudo docker rm 容器ID
一次性删除所有容器:
$ sudo docker rm `docker ps -a -q`
这不是常规命令,只是小技巧。docker ps列出所有现有的容器,-a标志列出所有(all)容器,-q返回容器ID。这样就得到了容器ID列表,并传给docker rm命令,从而达到删除所有容器的目的。
【本人的学习笔记,主要是对《我的第一本Docker书》、《Docker —— 从入门到实践》的学习记录,并结合其他各种资源的学习。】