022、如何运行容器(2019-01-15 周二)
之前的章节学习了如何构建Docker镜像,并通过镜像运行容器,从今天开始学习容器的各种操作,容器各种状态之间如何转换,以及实现容器的底层技术
运行容器
dokcer run 是运行容器的方法,之前我们已经学习了三种指定容器启动时执行命令的方法
1、CMD 指令
2、ENTRYPOINT 指令
3、在 docker run 命令行中指定
在下面的例子中,发现docker run运行后容器直接退出了,没有持续运行
root@docker-lab:~# docker run ubuntu pwd
/
root@docker-lab:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4f89f53eaa3 ubuntu "pwd" 6 seconds ago Exited (0) 5 seconds ago quizzical_shtern
root@docker-lab:~#
如何让容器长期运行
容器的生命周期依赖启动时执行的命令,只要该命令不结束,容器也就不会退出
下面的例子可以保证容器不会退出,但是这样占用了一个终端,当终端关闭的时候容器也就退出了,这并不是我们想要的效果
root@docker-lab:~# docker run busybox ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.070 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.103 ms
64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: seq=3 ttl=64 time=0.055 ms
64 bytes from 127.0.0.1: seq=4 ttl=64 time=0.054 ms
64 bytes from 127.0.0.1: seq=5 ttl=64 time=0.054 ms
64 bytes from 127.0.0.1: seq=6 ttl=64 time=0.060 ms
64 bytes from 127.0.0.1: seq=7 ttl=64 time=0.054 ms
64 bytes from 127.0.0.1: seq=8 ttl=64 time=0.053 ms
64 bytes from 127.0.0.1: seq=9 ttl=64 time=0.053 ms
新开一个终端进行查看
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0683d1da57ed busybox "ping 127.0.0.1" 16 seconds ago Up 16 seconds ecstatic_visvesvaraya
docker run -d 可以让容器在后台启动,不会占用终端
当容器启动是会返回一长串字符,这串字符是该容器的ID,docker ps 中也看到一个ID,但是只有12位,这12位是容器完整ID的前12个字符
docker ps 中还能看到容器的名字,如果启动容器是不使用 --name 指定容器名称,docker会自动给容器起一个名字
长ID、短ID和NAME 都能代表一个具体的容器
root@docker-lab:~# docker run -d busybox ping 127.0.0.1
40112e9d5ae06f399c1c1ed4a1033725975b9a0473025d417aeee419d61fc213
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40112e9d5ae0 busybox "ping 127.0.0.1" 6 seconds ago Up 5 seconds focused_mendeleev
root@docker-lab:~# docker stop 40112e9d5ae0
40112e9d5ae0
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40112e9d5ae0 busybox "ping 127.0.0.1" About a minute ago Exited (137) 2 seconds ago focused_mendeleev
root@docker-lab:~#
root@docker-lab:~# docker run --name test022 -d busybox ping 127.0.0.1
80971ed377ae31567097d58c43a1e818d3d099c8a3881534683e36aa57a5c519
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80971ed377ae busybox "ping 127.0.0.1" 3 seconds ago Up 2 seconds test022
40112e9d5ae0 busybox "ping 127.0.0.1" About a minute ago Exited (137) 47 seconds ago focused_mendeleev