(二)archlinux中的第一个容器

写在前面:最近进了华&为某个项目组,需要用到Docker。所以趁着当当网前阵子图书做活动,所以买了一本《第一本Docker书》。接下来的内容参考本书和互联网,就当是自己学习的一个记录。如有侵权,请告知(by.su@qq.com),本人第一时间处理。谢谢!

本文永久更新地址:https://my.oschina.net/bysu/blog/1805153

【若要到岸,请摇船:开源中国 不最醉不龟归】

1.运行以下命令创建我们的第一个容器 

sudo docker run -i -t base/archlinux /bin/bash

#如果需要使用ubuntu镜像
sudo docker run -i -t ubuntu /bin/bash

#如果需要使用centOS镜像
sudo docker run -i -t centos /bin/bash

#如果需要使用centOS7镜像
sudo docker pull openshift/base-centos7 /bin/bash

不过有可能出现如下异常,出现该异常可以试着更换一下源,或者试一下通过docker pull来先把镜像拉取到本地。

103028_iaXO_2910125.png

若无异常,则进入我们的第一个容器

103413_ASBW_2910125.png

命令中的-i保证容器中STDIN开启,-t标志则是让docker为创建容器分配一个伪tty终端。这两个参数是创建交互式容器最基本的参数。如若没有这两个参数,创建的是一个运行于后台的容器。

命令中的/bin/bash则是告诉docker成功过创建一个新的容器后,启动一个bash shell。

其中的archlinux、centos等Linux发行版字样则是告知docker基于什么镜像来创建容器。其他镜像可以到docker下载你需要的镜像,如下图,找到你需要的镜像,右侧的Docker Pull Command栏会跟你说对应的镜像拉取命令。

                104833_cQyl_2910125.png

可以通过先拉取镜像到本地,执行上面的docker run命令如果检测到本地的镜像,docker则不再到Docker Hub Registry查看是否有对应的镜像,如果本地无对应的镜像,则到Docker Hub Registry中查看,如果查找到,则下载到本地:

#拉取archlinux镜像
sudo docker pull base/archlinux

2.现在来使用我们刚刚创建好的第一个容器

在使用容器之前我们先来熟悉几个常用的命令。

#查看目前有几个容器,多少个暂停,多少个停止,多少个正在运行
[bysu@subaoya ~]$ sudo docker info

#######下面就是运行后的一部分结果############
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
########################################

[bysu@subaoya ~]$ sudo docker ps  #查看正在运行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              
d092d144e887        base/archlinux      "/bin/bash"         35 minutes ago      Up 12 minutes  
PORTS               NAMES
                    sad_rosalind
[bysu@subaoya ~]$ sudo docker ps -a   #查看所有状态的容器
CONTAINER ID   IMAGE           COMMAND       CREATED        STATUS    PORTS     NAMES
2552cacc1928   base/archlinux  "/bin/bash"   33 seconds     Exite d26 seconds   ecstatic_galileo
d092d144e887   base/archlinux  "/bin/bash"   35 minutes ago Up 12 minutes       sad_rosalind

[bysu@subaoya ~]$ sudo docker ps -a|grep Up|awk '{print $1}'   #查看正在运行的容器名
d092d144e887

#查看所有容器的名字
sudo docker ps -a -q

#######下面就是运行结果############
bfacc5ccb74d
a56a719eb52a
0fc9b2bc3e84

#删除不在运行的所有容器
sudo docker rm $(sudo docker ps -a -q)

#######下面就是运行结果############
bfacc5ccb74d
0fc9b2bc3e84
Error response from daemon: You cannot remove a running container a56a719eb52ae8bb3ecbe22bc1b029f203206b0f7144e74992038bb76c56b6ea. Stop the container before attempting removal or force remove

#停止一个正在运行的容器
sudo docker stop a56a719eb52a

#######下面就是运行结果############
a56a719eb52a

通过前面的方式创建容器时,可以给容器命名。如果创建时不指定名字,则会随机生成容器名字。

sudo docker run --name my_first_container -i -t base/archlinux /bin/bash

131313_godd_2910125.png

一般地,上述创建容器成功,也直接进入容器,我第一时间想到的是exit(不知道有没其他命令切出容器,如果需要用到的,自行搜索引擎),如此这般之后,就有可能出现刚刚切出的容器已经停止运行。这会导致你后续如果想通过docker exec -it my_first_container bash 或者sudo docker attach my_first_container再次进入容器 my_first_container,会出现异常,需要先通过命令sudo docker start my_first_container,重新启动该容器。以上命令中容器名可以用容器ID替换。

查看主机名

hostname

111535_gAeD_2910125.png

查看网络接口

ifconfig

ifconfig命令不存在的问题,参考

安装其他软件跟archlinux中是一样的。

3.创建守护式容器

守护式容器可以长期运行,没有交互式会话,一般用于作为运行应用程序和服务的载体。其创建命令如下:

sudo docker run --name my_daemon -d base/archlinux /bin/sh -c "while true;do echo hello docker;sleep 1;done"

上述命令中,-d参数告知docker将容器放后台运行。

由于上面创建的容器放在后台,我们作为容器的“创世者”,它是死是活我们多少总有点关心的。

sudo docker ps -a

通过status字段,得知它还活着。竟然得知还活着,那自然而然又想知道ta过得好不好——有没在正常工作了。可以通过查看日志,得知ta的近况如何。

sudo docker logs my_daemon

实时查看日志可以使用下列命令。

sudo docker logs -f my_daemon

#实时查看最新日志
sudo docker logs --tail 0 -f my_daemon

#实时查看最新日志,加上-t标志为每条日志项加上时间戳,方便调试
sudo docker logs --tail 0 -ft my_daemon

退出请Ctrl+c,用过Linux的应该都知道。

[bysu@subaoya ~]$ sudo docker attach my_daemon
hello docker
hello docker

....

上面标红的代码执行后,无法通过Ctrl+c退出容器。无奈的我只能把xshell给X掉重连。有知道怎么关掉的麻烦告知一下(也许是无法关闭)。

4.Docker日志驱动

执行docker run命令时通过--log-driver选项来实现。如果通过该选项指定syslog,将容器的所有日志输出重定向到syslog,则会同时禁用docker logs命令,具体命令如下:

sudo docker run --name my_log_daemon --log-driver="syslog" -d base/archlinux /bin/sh -c "while true;do echo hello logs;sleep 30;done"

如果要禁用容器所有的日志,则可用选项none,该选项同样会禁用docker logs命令。

5.查看容器内的进行

使用sudo docker top my_first_container可以查看容器内的进程

154946_fMeh_2910125.png

6.Docker统计信息

可以通过docker stats命令,动态查看多个容器的CPU,内存,网速,IO,这能快速监控一台主机上的一组容器。

155418_E6OE_2910125.png

7.在容器内部运行进程

通过docker exec命令在容器内部额外启动新进程。在容器内可以运行的进程有两种类型:后台任务和交互式任务。

容器中运行后台任务

sudo docker exec -d my_first_container touch /etc/createFile

容器中运行交互命令

sudo docker exec -t -i my_first_container /bin/bash

如果容器在创建时就是交互式的,可以直接sudo docker attach命令附到原本的容器上,效果等同上面这条命令。

8.停止守护式容器

sudo docker stop 容器名/容器ID

9.自动重启容器

可通过--restart标志让docker自动重启容器。--restart标志会检查容器退出的代码,并据此来决定是否要重启容器。Docker默认不会重启容器。

总是自动重启容器的命令

sudo docker run --restart=always --name my_daemon -d base/archlinux /bin/sh -c "while true;do echo hello docker;sleep 60;done"

--restart标志被设置为always,无论容器退出的代码是什么,Docker都会自动重启该容器。

如果--restart标志被设置为on-failure,则只有容器退出的代码为非0值时,才会自动重启。同时还可以设置一个可选参数,标志重启次数。

sudo docker run --restart=on-failure:5 --name my_daemon -d base/archlinux /bin/sh -c "while true;do echo hello docker;sleep 60;done"

当该容器退出代码为非0时,Docker会尝试最多5次的重启。

10.深入容器

 

未完待续...

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值