在Docker系列一中,已经安装并启动了Docker,在该系列中,将进行一些基本的操作:
创建并启动第一个Docker
命令: docker run
sudo docker run --name nginx -i -t ubuntu /bin/bash
参数说明:
- -i : 保证容器中STDIN是开启的
- -t : 通知docker要为创建的容器分配一个伪tty终端
- 告诉docker使用基于ubuntu的镜像来创建容器 –> Docker首先会检查本地是否存在ubuntu镜像,如果本地没有,docker将连接官方维护的Docker Hub Registry,查看Docker Hub是否有该镜像,有则下载到本地。
- 告诉Docker要在容器中运行的命令
启动后,目前以root身份登录容器,可以在该容器执行普通linux命令,如安装软件等,要退出容器回到宿主机的命令行终端,执行命令exit
即可。
退出容器后,容器只是停止运行,它依然存在本地的。执行命令docker ps -a
查看当前系统中的所有容器列表,包括运行中和已停止的,如下:
- 执行命令
docker rm <容器名称/ID>
可以删除一个容器,注意,运行中得docker容器是无法删除的 - 执行命令
docker ps -l
可以查看最后一次运行的容器,包括正在运行和已经停止的。 - 执行命令
sudo docker start <容器名称/ID>
可以启动一个已经停止的容器,重新启动容器时,会沿用docker run命令时指定的参数来运行,因此在重新启动后会运行一个交互式会话shell。另外,也可以使用sudo docker attach <容器名称/ID>
来附着到该容器的会话上。 - 执行命令
sudo docker stop <容器名称/ID>
可以停止一个正在运行的容器,该命令会向Docker容器进程发送SIGTERM信号,如果需要快速停止容器,可以执行命令sudo docker kill <容器名称/ID>
创建守护式容器
命令:
sudo docker run --name nginx -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
参数说明:
- -d : docker会将容器放到后台运行
- 告诉Docker要在容器中运行的命令,这里在命令使用了一个while循环,该循环会一直打印hello world,直到容器或其进程停止运行。
该命令运行后,没有交互式shell,仅仅返回一个容器的ID,然后回到了主机的命令行之中,此时,执行命令docker ps
会看在正在运行的这个容器。
既然我们现在回到了主机的命令行之中,我们也是可以看下这个后台运行的容器在干些什么,执行命令:sudo docker logs <容器名字/ID>
—> Docker会输出最后的日志项并返回,我们可以使用-f参数来监控Docker的日志,与tail -f命令类似,sudo docker logs -ft <容器名字/ID>
(t参数是输出时间戳),退出日志监控,按键Ctrl + C 即可。
要查看该守护容器的进程,执行命令sudo docker top <容器名字/ID>
在Docker1.3版本后,可以通过docker exec命令在容器内部额外启动新进程,如下:
sudo docker exec -d <容器名字/ID> touch ~/test.txt
* -d 参数表明需要运行一个后台进程
配置新建的容器可以进行重启
在默认情况下,docker不会重启容器,需要在启动时使用--restart
标志。如:
sudo docker run --restart=always --name nginx -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
在这个命令中,重启标志为always,说明物理无论容器的退出代码是什么,Docker都会自动重启该容器,也可以另外配置更详细,如:
sudo docker run --restart=on-failure:5 --name ......
这里的–restart参数值为on-failure,指只有当容器的退出代码为非0值时才自动重启,并且最多重启5次。
下面,创建一个用于反向代理的容器,如下:
这里只返回容器的id,可以执行这个命令来查看容器的信息docker inspect nginx1711
因为没有只是新创建一个容器,没有安装Nginx,也没有执行任何其他命令,所以可以看到它的状态是停止的。
这个命令返回的配置信息很多,可以使用-f或--format
来选定查看的结果:
docker inspect --format='{{ .State.Running }}' nginx1711