Docker02-容器管理
在安装好docker引擎之后,启动docker服务。安装参考官网帮助文档【https://docs.docker.com/docker-for-mac/install/】
查看docker是否正常启动
docker info
如果返回类似如下输出,则说明docker服务正常。
Containers: 9
Running: 0
Paused: 0
Stopped: 9
Images: 146
Server Version: 17.09.0-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
......
运行容器
使用docker run命令运行容器:
docker run -t -i ubuntu /bin/bash
-i :保证容器中的STDIN是开启的,让容器可以接受标准输入的字符
-t :为容器分配一个伪TTY终端,在控制台回显输出。-t 和 -i通常是成对出现的,实现容器的交互式shell,可合并简写为-ti。
ubuntu:镜像名称。
/bin/bash: 容器中运行的命令。
容器运行起来后,控制台就进入了容器的shell了:
root@8afa8dfa1abf:/#
PS: 如果你本地没有ubuntu的lastest镜像,第一次运行时会从docker registry中拉取镜像,会等待一定的时间。
现在,你可以在容器中做各种操作,就像是在和一个真正的ubuntu系统交互一样。
比如,运行hostname命令,查看hosts文件, 查看容器中的进程等等。
root@8afa8dfa1abf:/# hostname
8afa8dfa1abf
root@8afa8dfa1abf:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 8afa8dfa1abf
root@8afa8dfa1abf:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 18240 3364 pts/0 Ss 13:59 0:00 /bin/bash
root 13 0.0 0.0 34424 2808 pts/0 R+ 14:07 0:00 ps -aux
最后,输入exit退出容器中的bash,一旦bash程序退出后,此时容器会停止。可以使用docker ps -a查看:
➜ ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8afa8dfa1abf ubuntu "/bin/bash" 10 minutes ago Exited (0) 6 seconds ago admiring_banach
每个容器都是有唯一的名字的,如果docker run命令没有指定容器的名字,会自动生成一个随机的名称,这可能不是你想要的,可以使用–name参数来指定容器的名称。
docker run -ti --name ubuntu-container ubuntu /bin/bash
启动容器
如果一个容器当前在停止状态,可以使用docker start来重新启动这个容器
docker start ff70c91ddd44
我们有三中方式来指定容器:容器的短ID,长ID,容器名。上面的命令使用的是短ID。
所以,上面的重启命令等价于:
➜ ~ docker start ubuntu-container
ubuntu-container
PS:在以后的示例中,均用容器名的这种方式。
通过docker start命令启动的容器,会沿用docker run指定的参数,因此ubuntu-container会运行一个交互式shell,那么如何进到这个交互式的shell中呢?可以通过docker attach命令来重新附着容器的会话上
➜ ~ docker attach ubuntu-container
root@ff70c91ddd44:/#
PS: 输入完命令后,可能需要多按下回车才能进入。
守护式容器
除了运行交互式容器外,也可以运行守护式容器,这种容器会长期运行,适用于应用程序和服务,大多数时候我们运行的容器是守护式的。在运行容器时,通过-d来标识位守护式容器。
➜ ~ docker run --name daemon-container -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
3e94fd41798262678623e689eff3d9277814796812b96ba59e5a3ff4423e2cd1
容器中运行一个while循环,不断的输出hello world。
使用-d参数时,只会返回一个容器ID,不知道容器内部在干什么?怎么查看容器的日志输出?使用docker logs命令可获取容器内部的日志(标准输出、错误输出)
➜ ~ docker logs -f daemon-container
hello world
hello world
hello world
hello world
hello world
-f:监控日志,与tail -f类似。
如果想查看容器内运行的进程,可以使用docker top命令
➜ ~ docker top daemon-container
PID USER TIME COMMAND
8688 root 0:00 /bin/sh -c while true; do echo hello world; sleep 1; done
8982 root 0:00 sleep 1
统计信息
还可以使用docker stats命令显示容器的统计信息:
➜ ~ docker stats daemon-container
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
daemon-container 0.15% 604KiB / 2.934GiB 0.02% 1.43kB / 0B 32.8kB / 0B 2
容器中额外运行程序
如果想在一个运行中的容器中运行新的进程,可使用docker exec命令。
docker exec -d daemon-container touch /etc/new_config_file
这会以后台的方式在容器中创建一个新的文件。
我们可以使用交互式进入容器中:
➜ ~ docker exec -ti daemon-container /bin/bash
root@3e94fd417982:/# ls /etc/new_config_file
/etc/new_config_file
root@3e94fd417982:/#
可以看到,上一个命令正常执行了。
停止容器
守护式容器需要通过docker stop命令来停止
➜ ~ docker stop daemon-container
daemon-container
➜ ~ docker ps -n 1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e94fd417982 ubuntu "/bin/sh -c 'while..." 11 minutes ago Exited (137) 35 seconds ago daemon-container
命令docker ps -n x可以查看最后x个容器,不管容器是否在运行中。
查看容器详细信息
如果想查看容器的细节信息,可以使用docker inspect命令
docker inspect daemon-container
输出一大坨东西:包括名称、ID、命令、网络、配置等等。
"Id": "3e94fd41798262678623e689eff3d9277814796812b96ba59e5a3ff4423e2cd1",
"Created": "2019-10-15T14:27:01.0513945Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo hello world; sleep 1; done"
],
.......
删除容器
如果容器没用了,使用docker rm命令删除
➜ ~ docker rm daemon-container
daemon-container
如果容器在运行中,docker rm 需要指定-f才能删除。
如果要删除所有容器,可以使用下面这个小技巧:
docker rm `docker ps -a -q`