操作容器
创建并运行容器
stormfast@ubuntu:~$ docker create -it ubuntu:14.04
7ce6ec5c3a8a0156d4ddc74938d1f325f53466f01d3c322551799bc6e6c79846
stormfast@ubuntu:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ce6ec5c3a8a ubuntu:14.04 "/bin/bash" 8 seconds ago Created confident_kirch
99cd2ed8fe20 ubuntu:14.04 "/bin/bash" 2 hours ago Exited (0) 2 hours ago vibrant_edison
stormfast@ubuntu:~$ docker start 7ce
7ce
stormfast@ubuntu:~$
stormfast@ubuntu:~$
stormfast@ubuntu:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ce6ec5c3a8a ubuntu:14.04 "/bin/bash" 2 minutes ago Up About a minute confident_kirch
99cd2ed8fe20 ubuntu:14.04 "/bin/bash" 2 hours ago Exited (0) 2 hours ago vibrant_edison
注意:容器刚创建时处于停止状态,我们可以使用start命令启动
新建并运行容器
我们可以使用docker run 命令直接新建并启动容器
stormfast@ubuntu:~$ docker run ubuntu:14.04 /bin/echo 'hello world'
hello world
docker执行run命令背后的执行了一系列的标准操作:
1. 检查本地是否存在指定镜像,不存在就从公有仓库下载
2. 利用镜像创建一个容器,并启动该容器
3. 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读层
4. 从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中
5. 从网桥的地址池配置一个ip地址给容器
6. 执行用户的指定应用程序
7. 执行完毕后容器被自动终止
守护态运行容器
stormfast@ubuntu:~$ docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
9931b68874a48206a1865d7e5e02c53fa938f2beb697bc7e0624b2886e56cc7d
stormfast@ubuntu:~$ docker logs 9931
hello world
hello world
hello world
hello world
注意: 我们使用-d 让docker容器处于守护态(daemonized)形式运行,并使用docker logs命令获取容器输出信息
终止容器
我们可以使用docker stop [-t|–time[=10] container终止容器
默认情况下 会先给容器发送一个SIGTERM信号,等待超时时间后(默认10秒)会在发送一个SIGKILL信号终止容器
stormfast@ubuntu:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9931b68874a4 ubuntu:14.04 "/bin/sh -c 'while..." 6 minutes ago Up 6 minutes adoring_hawking
6dab2dce48b8 ubuntu:14.04 "/bin/echo 'hello ..." 17 minutes ago Exited (0) 17 minutes ago keen_lichterman
7ce6ec5c3a8a ubuntu:14.04 "/bin/bash" 27 minutes ago Up 26 minutes confident_kirch
99cd2ed8fe20 ubuntu:14.04 "/bin/bash" 2 hours ago Exited (0) 2 hours ago vibrant_edison
stormfast@ubuntu:~$ docker stop 9931
9931
注意:docker kill 命令会直接发送SIGKILL信号强行终止容器
进入容器
attach命令
docker attach[–detach-keys[=[]]][–no-stdin][–sig-proxy[=true]]container
–detach-keys[=[]] 指定退出attach模式的快捷键,ctrl-p ctrl-q
–no-stdin=true|false 是否关闭标准输入, 默认保持打开
–sig-proxy=true|false 是否代理收到的系统信号给应用进程,默认为trueexec命令
docker exec [-d|–detach][–detach-keys[=[]]][-i|–interactive][–privileged][-t|–tty][-u|–user[=USER]] CONTAIN COMMAND [ARG…]
-i 打开标准输入接受用户输入命令,默认false
–privileged=true|false 是否给执行命令以高权限,默认false
-t 分配伪终端,默认false
-u 执行命令的用户名或者ID- nsenter工具
导入和导出容器
导出容器
docker export [-o|–output[=”“]] CONTAINER
导入容器
docker import [-c|–changer[=[]]] [-m|–message[=MESSAGE]] file|URL|-[REPOSITORY[:TAG]]
注意:这里的导入容器,最终是导入了一个镜像文件.那么这里的容器导入和镜像导入到底有什么不一样呢?
容器快照文件将会丢弃所有的历史记录和元数据信息,体积相较于镜像导入文件要小.