docker安装完成之后可以使用docker info
命令查看dcoker是否正常,使用docker info
命令会返还所有容器和镜像的数量、docker使用的执行取得和存储驱动以及docker的基本配置。
可以看到容器运行是基于镜像的,执行docker run -i -t ubuntu /bin/bash
命令后先去本地找ubtunru镜像没找到,然后去镜像仓库拉取镜像。拆分来看可以分为两步:docker pull ubuntu
和docker run -i -t ubuntu /bin/bash
这里执行docker run命令指定-i和-t两个参数,-i标志保证容器中STDIN是开启的,持久的标准输入是交互式shell的“半边天”, -t标志则是另外“半边天”,它告诉Docker为要创建的容器分配一个伪tty终端,这样新建的容器才能提供一个交互式shell。最后的/bin/bash是指定在容器运行/bin/bash命令启动一个bash shell。
检查容器主机名
root@31f246585bb5:/# hostname
31f246585bb5
检查容器/etc/hosts文件
root@31f246585bb5:/# 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 31f246585bb5
安装软件包查看(net-tools和iproute2)网络
最开始执行apt-get install net-tools遇到报错:Unable to locate package, 这是因为Docker 镜像在制作时为了精简清除了apt仓库信息,执行apt-get update命令来更新仓库信息然后安装即可。
apt-get update
apt-get install net-tools iproute2
root@31f246585bb5:/# ip add
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
6: eth0@if7: <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 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
使用docker ps -a
可以查看所有运行状态和未运行状态的所有容器。Docker会为创建的容器自动生成一个随机的名称。如果不想使用自动生成的名称,可以使用--name标志实现。
[root@localhost yum.repos.d]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31f246585bb5 ubuntu "/bin/bash" 35 minutes ago Exited (0) 12 seconds ago adoring_ellis
[root@localhost yum.repos.d]# docker run --name flow_contianer -i -t ubuntu /bin/bash
使用容器自定义名称更利于管理容器,值得注意的是,容器的命名必须是唯一的,如果试图创建两个名称相同的容器,则命令将会失败。如果要使用的容器名称已存在,可以先用docker rm
命令删除已有的同名容器再创建。
除此之外还可以使用docker rename 原容器名 新容器名
来重命名容器名称。
使用命令docker start 容器名称/容器ID
来启动已经停止运行的容器。也可以使用docker restart 容器名称/容器ID
来重启一个容器。
# 运行已停止的容器
[root@localhost yum.repos.d]# docker start 31f246585bb5
31f246585bb5
# 查看正在运行的容器
[root@localhost yum.repos.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31f246585bb5 ubuntu "/bin/bash" 2 hours ago Up 7 seconds adoring_ellis
# 交互式进入容器shell
[root@localhost yum.repos.d]# docker exec -it 31f246585bb5 /bin/bash
root@31f246585bb5:/#
Docker容器重新启动的时候,会沿用docker run命令时指定的参数来运行,因此容器重新启动后悔运行一个交互式会话shell,使用docker attach
可以重新附着到容器的会话上。但是使用这种方式exit之后容器会停止运行。
[root@localhost yum.repos.d]# docker attach 31f246585bb5
root@31f246585bb5:/# exit
exit
[root@localhost yum.repos.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
除了创建交互式运行的容器(interactive container), 也可以创建长期运行的容器。守护式容器(daemonized container)没有交互式会话,非常适合运行应用程序和服务。大多数时候我们都需要以守护式方式来运行我们的容器。
[root@localhost yum.repos.d]# docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
48aaf822792dff2af594f0148dbe9107349fd311a682287498bc4c2546b8e98e
[root@localhost yum.repos.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48aaf822792d ubuntu "/bin/sh -c 'while t…" 15 seconds ago Up 3 seconds daemon_dave
[root@localhost yum.repos.d]# docker exec -it 48aaf822792d /bin/bash
root@48aaf822792d:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.9 0.0 4616 692 ? Ss 05:24 0:00 /bin/sh -c while true; do echo hello world; sleep 1; done
root 62 9.8 0.2 18496 2032 pts/0 Ss 05:25 0:00 /bin/bash
root 76 0.0 0.1 34388 1496 pts/0 R+ 05:25 0:00 ps -aux
root 77 0.0 0.0 4520 380 ? S 05:25 0:00 sleep 1
这里docker run -d选项会将容器放到后台执行并返回容器ID。
这个守护式容器内部在干些什么?可以使用docker logs命令来获取容器的日志
[root@localhost yum.repos.d]# docker logs daemon_dave
hello world
hello world
hello world
hello world
hello world
...
# 可以使用docker logs -f daemon_dave来动态监控docker日志
[root@localhost yum.repos.d]# docker logs -f daemon_dave
# 和tail命令类似,也可以直接跟踪容器日志的片段,例如获取日志最后10行内容:
docker logs --tail 10 daemon
# 跟踪容器最新日志而不必读取整个日志文件
docker logs --tail 0 -f daemon_dave
# 查看容器内所有进程
docker top daemon_dave
在宿主机里的/var/lib/docker/containers/容器ID/容器ID-json.log就是容器日志输出路径,不过这个在容器运行起来id是不同的,如果需要用到Logstash去收集日志建议采用输出到容器内固定目录然后在通过-V挂载出来到宿主机里。
使用docker top 容器名/容器ID
可以查看进程信息,使用docker stats
则可以查看所有容器的CPU、内存、网络IO及存储IO的性能和指标。
[root@localhost yum.repos.d]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
48aaf822792d daemon_dave 5.17% 212KiB / 974.6MiB 0.02% 648B / 0B 0B / 0B 2
docker stop 容器名/容器ID
docker inspect 容器名/容器ID
除了docker inspect 查看外,还可以浏览宿主机/var/lib/docker/container/目录下去了解docker工作原理。
docker rm 容器名/容器ID
# 强制删除,不管容器运行与否
docker rm -f 容器名/容器ID
# 删除所有容器快捷命令(docker -q只返回容器ID)
docker rm `docker ps -a -q`
原文:https://www.cnblogs.com/liao-lin/p/10418407.html