Docker-入门
docker info
Containers: 1
Images: 8
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 10
Execution Driver: native-0.2
Kernel Version: 3.13.0-43-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 1
Total Memory: 994 MiB
Name: riemanna
ID: DOIT:XN5S:WNYP:WP7Q:BEUP:EBBL:KGIX:GO3V:NDR7:YW6E:VFXT:FXHM
WARNING: No swap limit support
....
docker info
会返回 docker 所有的容器和镜像的数量,以及docker的基本配置
运行容器
sudo docker run -i -t ubuntu /bin/bash
终端显示如下
Unable to find image 'ubuntu' locally
ubuntu:latest: The image you are pulling has been verified
511136ea3c5a: Pull complete
d497ad3926c8: Pull complete
ccb62158e970: Pull complete
e791be0477f2: Pull complete
3680052c0f5c: Pull complete
22093c35d77b: Pull complete
5506de2b643b: Pull complete
Status: Downloaded newer image for ubuntu:latest
root@fcd78e1a3569:/#
-i
标志保证容器STDIN
是开启的-t
告诉Docker为创建的容器分配一个tty
终端,这样我们就可以得到一个交互式容器ubuntu
镜像名称,表示以ubuntu
镜像创建容器,docker会检测本地有没有ubuntu
镜像,如果本地没有该镜像,docker会从docker hub
仓库中拉取镜像/bin/bash
在新容器中要运行的的命令,本例中我们在容器中运行/bin/bash 命令启动了一个Bash shell
使用容器
运行容器过后,我们得到了一个容器,并且是以root
用户登录到容器中,这是一个完整的ubuntu
系统,可以用来做任何事情。
获得容器的主机名
root@b265c7e18e1c:/# hostname
b265c7e18e1c##### 检查容器的进程
容器的主机名就是该容器的ID
查看 /etc/hosts 文件
root@b265c7e18e1c:/# 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.6 b265c7e18e1c
hosts 文件 为该容器的ip地址添加了主机配置项
检查容器的进程
root@b265c7e18e1c:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 4228 3592 pts/0 Ss 02:26 0:00 /bin/bash
root 24 0.0 0.1 5880 2808 pts/0 R+ 02:32 0:00 ps -aux
容器中安装软件
apt -y update && apt install vim
用户可以在容器中安装想要的软件,当使用结束后,使用exit
命令退出容器,就可以返回宿主机的终端中,容器的状态也是退出状态
,指定的/bin/bash 命令处于运行状态的时候,的容器也才会相应地处于运行状态。一旦退出容器,/bin/bash 命令也就结束了,这时容器也随之停止了运行容器仍然是存在的
,可以用docker ps -a
命令查看当前系统中容器的列表
列出容器
docker ps
[root@k8s-master01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ab339a8f450 mysql:5.7 "docker-entrypoint.s…" 3 weeks ago Up 3 weeks 33060/tcp, 0.0.0.0:3307->3306/tcp c_mysql
d89d5a0e02d3 redis:5.0 "docker-entrypoint.s…" 4 weeks ago Up 3 weeks 0.0.0.0:6379->6379/tcp c_redis
docker ps
列出所有运行中的容器-a
列出所有的容器,报错已经停止运行容器-l
列出最后一个容器,无论容器的状态是否是运行或者是停止docker ps
可以看到容器的很多信息,CONTAINER ID
,IMAGE
,COMMAND
,CREATED
,STATUS
,PORTS
,NAMES
容器命名
在创建容器的时候如果没有为容器指定名字
,docker 会默认为我们创建的容器自动生成一个随机的名字
,如果想要执行名字的话,需要用到--name
标志来实现,
sudo docker run --name bob_the_container -i -t ubuntu /bin/bash
root@aa3f365f0f4e:/# exit
名字的规范是小写字符 a~z, 大写字母 A~Z, 数字 0~9, 下划线,圆点,横线
,可以用名字来替代容器id,这样更能方便分辨容器
重新启动容器
如果容器是退出状态,我们可以重新启动容器,docker start
,docker restart
命令都可以实现
$ sudo docker start bob_the_container
$ sudo docker restart bob_the_container
附着到容器上
docker 重启的时候会沿用docker run
命令时指定的参数来运行,bob_the_container
容器是启动一个交互式shell, 我们可以使用docker attach
,重新附着到容器的会话上,
$ sudo docker attach bob_the_container
创建守护式容器
守护式容器非常适合运行应用程序和服务,大多数时候我们都需要用守护式的方式来运行我们的容器
$ sudo docker run --name daemon_dave -d ubuntu /bin/sh -c "while
true; do echo hello world; sleep 1; done"
1333bb1a66af402138485fe44a335b382c09a887aa9f95cb9725e309ce5b7db3
-d
参数 docker 会将容器放在后台运行
在容器要运行的命令里使用了一个while 循环,该循环会一直打印hello
world,直到容器或其进程停止运行。
查看容器日志
docker logs
可以查看容器內的日志信息,可以使用-f
参数来监控 Docker 的日志, 与 linux中tail -f
命令非常相似,也可以用--tail number
来获取日志的一部分信息,例如docker logs --tail 10 daemon_dave
, 获取日志的最后10 行内容,docker logs --tail 0 -f daemon_dave
,踪某个容器的最新日志,-t
表示为每条日志项加上时间戳, 使用Ctrl + C
退出日志跟踪
$ sudo docker logs daemon_dave
hello world
hello world
hello world
hello world
hello world
hello world
hello world
. . .
$ sudo docker logs -f daemon_dave
hello world
hello world
hello world
hello world
hello world
hello world
hello world
. . .
$ sudo docker logs -ft daemon_dave
[May 10 13:06:17.934] hello world
[May 10 13:06:18.935] hello world
[May 10 13:06:19.937] hello world
[May 10 13:06:20.939] hello world
[May 10 13:06:21.942] hello world
. . .
查看容器內进程
想要在宿主机上查看容器內进程,可以使用 docker top
命令来查看
$ sudo docker top daemon_dave
PID USER COMMAND
977 root /bin/sh -c while true; do echo hello world; sleep 1;
done
1123 root sleep 1
Docker 统计信息
可以使用docker status
命令,来显示一个或多个容器的统计信息,可以看到cpu
,mem
,网络I/O
,存储I/O
使用情况
$ sudo docker stats daemon_dave daemon_kate daemon_clare daemon_sarah
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O BLOCK I/O
daemon_clare 0.10% 220 KiB/994 MiB 0.02% 1.898 KiB/648 B 12.75 MB / 0 B
daemon_dave 0.14% 212 KiB/994 MiB 0.02% 5.062 KiB/648 B 1.69 MB / 0 B
daemon_kate 0.11% 216 KiB/994 MiB 0.02% 1.402 KiB/648 B 24.43 MB / 0 B
daemon_sarah 0.12% 208 KiB/994 MiB 0.02% 718 B/648 B 11.12 MB / 0 B
在容器內运行进程
使用docker exec
命令可以在容器内部额外的启动新进程,在容器內进程有两种类型,后台任务和交互式任务
,后台任务在容器內运行且没有交互需求
,交互式任务则保持在前台运行
- 在容器內运行后台任务
$ sudo docker exec -d daemon_dave touch /etc/new_config_file
-d
表明是任务类型为后台任务
,-d
之后容器名字,以及要执行的命令
- 在容器内部运行交互式命令
$ sudo docker exec -t -i daemon_dave /bin/bash
-i
和-t
标志为我们执行的进程创建一个TTY
并捕捉STDIN
, 之后是容器名字,以及要执行的命令,经常用于进入容器,调试,docker exec
是 docker 1.3 引入,早起版本并不支持该命令
停止守护式容器
已守护式进程运行的容器,想要停止容器运行,需要使用docker stop
命令,之后可以跟容器名字
,或者容器id
$ sudo docker stop daemon_dave
docker stop
命令是向 Docker 容器进程发送SIGTERM
,信号,如果想要快速的停止容器,可以使用docker kill
命令来向容器进程发送SIGKILL
信号
自动重启容器
如果想要重启某个停止的容器,可以使用--restart
标志,--restart
标志会检查容器的退出代码
,并据此来决定是否要重启容器
默认的行为是Docker 不会重启容器
$ sudo docker run --restart=always --name daemon_dave -d ubuntu /
bin/sh -c "while true; do echo hello world; sleep 1; done"
--restart
标志被设置为always
。无论容器的退出代码是什么,Docker都会自动重启该容器。除了always,还可以将这个标志设为on-failure
,这样,只有当容器的退出代码为非0 值的时候,才会自动重启。另外,on-failure
还接受一个可选的重启次数参数`
获取容器详细信息
docker ps
能获取容器一部分信息, 想要获取一个容器更多的详细信息docker inspect
命令可以满足这个要求,它会对容器进行详细的检查,返回其配置信息,包括名称,命令, 网络配置,以及更多数据
$ sudo docker inspect daemon_dave
[{
"ID": "
c2c4e57c12c4c142271c031333823af95d64b20b5d607970c334784430bcbd0f
",
"Created": "2014-05-10T11:49:01.902029966Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo hello world; sleep 1; done"
],
"Config": {
"Hostname": "c2c4e57c12c4",
. . .
删除容器
如果容器不再使用,可以使用docker rm
命令来删除他们,注意,容器状态必须处于 停止状态,运行中的容器可以使用-f
强制删除
$ sudo docker rm 80430f8d0921
80430f8d0921
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。