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来先把镜像拉取到本地。
若无异常,则进入我们的第一个容器
命令中的-i保证容器中STDIN开启,-t标志则是让docker为创建容器分配一个伪tty终端。这两个参数是创建交互式容器最基本的参数。如若没有这两个参数,创建的是一个运行于后台的容器。
命令中的/bin/bash则是告诉docker成功过创建一个新的容器后,启动一个bash shell。
可以通过先拉取镜像到本地,执行上面的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
一般地,上述创建容器成功,也直接进入容器,我第一时间想到的是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
查看网络接口
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可以查看容器内的进程
6.Docker统计信息
可以通过docker stats命令,动态查看多个容器的CPU,内存,网速,IO,这能快速监控一台主机上的一组容器。
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次的重启。