开始使用docker
开打docker
确保你有了docker哦。
image-20200215120323946运行我们的第一个容器吧
docker run -i -t ubuntu /bin/bash
image-20200215120615006
image-20200215120629229
这段小命令发生了不少事情
- 我们使用docker run来运行一个容器
- 传入参数
-i
代表interactive,交互式的,使标准输入对容器保持打开状态,即使我们没有连接到它。 - 传入参数
-t
,它告诉Docker为我们将要创建的容器分配一个伪tty。 - 紧接着我们告诉docker,我要一个Ubuntu镜像
-
/bin/bash
,告诉docker,我要启动一个bash shell
这为我们在新容器中提供了一个交互式shell。 此行是创建容器的基本配置,我们计划与该容器在命令行上进行交互,而不是作为守护程序运行。
注意,我们这里使用的镜像类似Ubuntu这种,是由docker公司负责创建的,这类我们可以称为基础镜像或者顶级镜像,类似还有Debian,Fedora,Centos。这类镜像大部分几百兆,如果你喜欢超级超级小,可以使用Alpine。
这件美妙的事情,我们还是上个图吧。
image-20200215122723806用用它
check下hostname以及版本
hostname
cat /etc/lsb-release
image-20200215122947212
看看网络
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 952b452d9602
如果你希望快速看IP
hostname -I
接下来,我们看看跑了什么进程
ps -aux
image-20200215123939498
接下来我们下个软件吧。
apt-get update ; apt-get install -y vim
check version
vim -v
image-20200215124340915
没问题。
退出吧
exit
当我们退出后,这个容器就停止了。只要我们指定的命令/bin/bash正在运行,容器就会一直运行。一旦我们退出容器,该命令就结束了,容器也停止了。
我们可以查看容器的状态
docker ps -a
# a is all
image-20200215124417177
显示为Exited,退出了。那也代表曾经跑过哦。
如果你跑的容器很多,有时候你想知道最后一个跑的是谁
docker ps -l
# l is last
通过这个信息,我们可以看到很多内容
- CID
- image名称
- 命令
- 创建时间
- 状态
- 端口
- 名称
对于容器来讲,有三种方式标识
- 短UUID 952b452d9602
- 长UUID 952b452d9602a7ce8dd2097176d5b4a16303dcc8d28c1f0c564e7d6802468361
- 名称 比如这里的 great_neumann
OK,你可能现在不知道它的长id。
docker ps -a --no-trunc
# 最后一个参数告诉他,不要截断我的信息,我要长的
容器命名
docker会自动给你命个名,有可能来个灰色毛毛,蓝色🐳。
但是,我们还是来个自己定义的更舒服。
docker run --name qdc_container -i -t ubuntu /bin/bash
image-20200215125051580
显然参数--name 你喜欢的名字
就是用来指定名称的。
至于名称命名和一般变量命名规则差不多,一般你是不会创一个非法名称出来的吧。
注意这个名称是唯一的哦,你尝试运行上面的命令第二次,你会GG的。
image-20200215125235967- 要么干掉原来的
- 要么新的取个别的名字吧,海洋沙漠已经是我的了 :)D。
启动一个已经停止的容器
OK,我们之前退出了这个容器,它停止了,我现在希望重新让它跑起来呀。
docker start qdc_container
image-20200215125439206
我们的名字用上了,不用去copy那个臭臭id了。
ps,学习没有乐趣的话,自己去创造乐趣。
连接容器
容器起来了,我没上车怎么开呢?
attach容器。重新连接会话。
docker attach qdc_container
image-20200215125644915
搞一个持久跑的容器
除了这些交互式容器之外,我们还可以创建运行时间更长的容器。也就是守护进程容器,这类容器没有我们刚才使用的交互式会话,非常适合运行应用程序和服务。现在我们搞一个吧。
docker run --name qdc_daemon -d ubuntu /bin/sh -c "while true; do echo hello baby; sleep 1; done"
image-20200215125957229
我们使用了 -d
,就是detach在后台跑。
我们还将while循环指定为容器命令。我们的循环将一次又一次地回显hello baby,直到容器停止或进程停止。
并且它没有附加一个终端,让我们去交互。
docker ps
image-20200215130124201
虽然没交互, 但是它一直在跑。
看看里面是不是真的在循环
我们现在有一个守护进程化的容器来运行while循环;让我们看看容器内部,看看发生了什么。我们可以使用docker logs命令。docker logs命令获取容器的日志。
docker logs qdc_daemon
可以看到N多的hello baby
如果你要监视变化,加个-f
,就会一秒一个hello baby
要退出它的疯狂显示,ctrl
+ c
如果你觉得想看看时间也是可以的,时间time, 就用-t
docker logs -ft qdc_daemon
image-20200215130511239
检查容器内的进程
除了容器的日志,我们还可以检查容器内部运行的进程。我们使用docker top命令。
image-20200215131945251docker统计
除了docker top命令之外,您还可以使用docker stats命令。这显示了一个或多个正在运行的Docker容器的统计信息。我们来瞧一瞧。
docker stats
image-20200215132105011
我们可以看到一组容器及其CPU、内存、网络和存储I/O性能和指标。这对于快速监视主机上的一组容器非常有用。
在容器内跑个进程
从Docker 1.3开始,我们还可以使用Docker exec命令在容器中运行额外的进程。我们可以在容器中运行两种类型的命令:后台命令和交互式命令。后台任务在容器中运行,没有交互,交互任务留在前台。交互式任务对于打开容器中的shell之类的任务非常有用。让我们看一个后台任务的例子。
docker exec -d qdc_daemon mkdir /usr/local/love
这里-d标志表示我们正在运行一个后台进程。然后,我们指定要在其中运行命令的容器的名称和要执行的命令。我们可以使用docker exec后台命令在正在运行的容器中运行维护、监视或管理任务。
我们进去看看是不是。
docker exec -it qdc_daemon /bin/bash
image-20200215133211645
停止容器
守护进程容器,不会自己停,现在我们的那个输出都不知道多少了,让它别秀了,停一停。
docker stop qdc_daemon
自动重启
如果因为某些原因失败,你希望重启,可以添加--restart=xxx
,比如你希望不顾一切的重启。
docker run --restart=always --name qdc_daemon_tiehanhan -d ubuntu /bin/sh -c "while true; do echo hello baby; sleep 1 done"
比如我们这里的铁憨憨容器,我们可以写错了后面的代码,它其实是错误,由于你设置了总是重启,它就无脑重启了,是否需要重启,什么机制可以根据业务情况决定。
- 直接失败是否好于不停挣扎,这是个问题
探索容器的更多信息
ps能看看简答是,更细致的,就没有了。详细的用docker inspect
docker inspect qdc_daemon
信息过多,我们展示一部分
image-20200215134122312删除容器
docker rm 容器名/容器id
容器很多想一次干掉。
docker rm -f `docker ps -a -q`
image-20200215154007055