1

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

无常
21 声望0 粉丝