Docker容器

docker基础命令

本文主要是介绍docker基础命令,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Docker命令

实验环境为centos7

运行第一个容器

首先查看docker信息:

$ sudo docker info

创建容器:

$ sudo docker run -i -t ubuntu /bin/bash

这里创建了ubuntu的镜像,并在容器中运行了/bin/bash命令启动了一个Bash shell;首先docker回检查本地是否有ubuntu镜像,如果本地没有,则会连接官网的Docker Hub Registry,查看是否有该镜像,如果有就会自动下载该镜像的最新版本;其中参数-i保证容器中STDIN是开启的,-t为创建的容器分配一个伪tty终端,使用这两个参数,新容器才能提供一个交互式的shell。

运行之后就回执行容器中的/bin/bash命令,就可以看到容器内的shell了:

root@db99828a1442:/#

其中a7d8sdfe9s8c为该容器的唯一ID,检查容器的主机,

root@db99828a1442:/# hostname
a7d8sdfe9s8c

发现容器的主机名就是该容器的ID;检查容器hosts文件,

root@db99828a1442:/# 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	db99828a1442

Docker已经在hosts文件中为该容器的IP地址添加了一条主机配置项。检查容器网络配置,

root@db99828a1442:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link 
       valid_lft forever preferred_lft forever

可以看到这里有lo环回接口,还有IP为172.17.0.2的标准eth0网络接口,和普通宿主机是完全一样的。

检查容器的进程,

root@db99828a1442:/# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1   4232  1984 ?        Ss+  12:52   0:00 /bin/bash
root         18  0.0  0.1   5888  1480 ?        R+   12:59   0:00 ps aux

容器中同样可以安装软件包,

root@db99828a1442:/# apt-get install vim

看见在容器中的所有操作都和完整系统是相同的。

当工作结束需要退出时,输入exit就可以返回宿主机了。但是同样会导致容器停止运行。这时因为运行容器时指定的命令为/bin/bash,一旦退出容器,/bin/bash命令也就结束了,这时容器也就会随之停止运行。

但是容器仍然是存在的,可以在宿主机中查看,

$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                   NAMES
db99828a1442        ubuntu              "/bin/bash"              13 days ago         Exited                                         eager_kalam

查看当前系统中容器的所有容器,docker ps只能看到正在运行的容器;docker ps -a可以显示所有容器,不管是否运行。

dockerps命令和系统的ps命令类似,可以通过指定-l标志,列出最后一个运行的容器,不管是否运行;通过指定--format标志,控制输出格式。

如果想要重新启动已经停止的容器,可以使用下面的命令,

$ sudo docker start db99

当然这里同样可以使用db99828a1442,或者容器名ubuntu来启动容器。

除了使用start命令,也可以使用restart命令重启容器,

$ sudo docker restart db99828a1442

这时运行docker ps就可以看到运行的容器了。

连接容器

附着

附着类似与“屏幕共享”,使用下面的命令,

sudo docker attach db99

如果容器正在运行,就会附着到容器上。但是如果要退出附着的话,使用exit,但是这时容器同样会退出。

EXEC

Docker 1.3之后,可以通过docker exec命令在容器内部额外启动新进程。可以在容器内运行的进程有两种:后台任务交互式任务。后台任务在容器中运行且没有交互需求,而交互式任务则保持在前台运行。

在容器中运行后台任务,

$ sudo docker exec -d db99 touch /root/hello

这里-d标志表明需要运行一个后台进程,之后指定容器名以及要执行的命令。

也可以在容器中运行交互命令,

$ sudo docker exec -t -i db99 /bin/bash

这条命令在容器中创建了新的bash会话,这样就可以在容器中运行其他命令了。如果退出当前会话,容器不会停止。

容器的日志

在Docker中可以通过docker logs命令来获取容器的日志,

$ sudo docker logs db99

Docker会输出最后几条日志并返回。同样可以使用-f标志监控Docker日志,

$ sudo docker logs -f db99

使用Ctrl+C退出日志跟踪

也可以使用--tail标志获取最后的几条日志,

$ sudo docker logs --tail 10 db99

显示最后10条日志;

$ sudo docker logs --tail 0 -f db99

跟踪容器的最新日志;

也可以加上-t标志位日志加上时间戳,

$ sudo docker logs -ft db99

Docker 1.6开始,可以通过--log-driver选项来控制容器所用的日志驱动,

$ sudo docker run --log-driver='syslog' -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1; done"

这里syslog,会将容器的日志输出重定向到Syslog,同时将禁止docker logs

容器的进程

在Docker中使用docker top查看容器内运行的进程,

$ sudo docker top db99

该命令可以看到容器内所有进程、运行进程的用户及进程ID。

容器的统计信息

同时,还可以使用docker stats命令,显示容器一个或多个容器的统计信息,

$ sudo docker stats db99

该命令能看到一个守护式容器的列表,以及它们的CPU、内存、网络I/O及存储I/O的性能和指标。

停止容器守护进程

要停止容器的守护进程,使用命令docker stop

$ sudo docker stop db99

同时可以使用docker kill命令,

$ sudo docker kill db99

自动重启容器

如果由于某种错误而导致容器停止运行,可以通过--restart标志,让Docker自动重新启动该容器。--restart标志会检查容器的退出代码,并据此来决定是否需要重启容器。Dockers默认是不会重启容器的。

$ sudo docker run --restart=always -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

这里--restart=always,意味着无论容器的退出代码是什么,Docker都会重启该容器,除了always,还可以设置为on-failure,这样只有容器的退出代码不为0时,才会自动重启,另外on-failure还接受一个可选的重启次数参数,

--restart=on-failure:5

--restart标志是Docker 1.2.0引入的

容器的详细信息

可以使用docker inspect来获取容器的详细信息,

$ sudo docker inspect db99

该命令会返回容器的配置信息,包括名称、命令、网络配置以及其它信息。

同时可以指定--format-f标志筛选结果,

$ sudo docker inspect --format='{{.State.Running}}' db99

上面的命令会返回容器的运行状态;

$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' db99

该命令返回容器的IP地址;

--format可以指定多个容器,或多个条件,

$ sudo docker inspect --format=''{{.Name}} {{.State.Running}}'' db99 s8zd

删除容器

如果容器不再使用,可以使用docker rm命令删除,

$ sudo docker rm db99

Docker 1.6.2开始,可以通过给docker rm命令指定-f标志删除运行中的Docker容器;在此版本之前,必须先使用docker stopdocker kill命令停止容器。

目前没有办法一次删除所有容器,但是可以使用下面命令,

$ sudo docker rm `sudo docker ps -a -q`

其中-a标志意味着列出所有容器,-q标志表示只返回容器的ID。

这篇关于docker基础命令的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!