在前面我们在运行hello world程序的时候,对于大概的流程已经有了一个了解,现在我们大概的总结一下

像数据库一样, docker中对于image, instance也有自己的增删改查操作

增加

通过dokcer run命令,我们可以增加
[root@centos7-docker ~]# docker run -i -t ubuntu /bin/bash
和之前说的一样,在本地发现,使用本地,如果没发现,去远程下载, 添加到本地
通过
[root@centos7-docker ~]# docker help run
我们可以找到-i, -t的意思
-i, --interactive=false    Keep STDIN open even if not attached
保证容器的STDIN是开启的
-t, --tty=false            Allocate a pseudo-TTY
告诉docker要为创建的容器分配一个伪tty终端

这个过程发生了什么呢?
1. 检查本地是否存在ubuntu镜像
2. 本地不存在ubuntu镜像,就从远程的Docker Hub Registry上下载并保存到本机
3. docker使用这个ubuntu镜像创建了一个新的容器,这个容器拥有自己的网络,IP,以及一个用来与宿主机进行通信的桥接网络接口
4. 我们告诉 docker在这个新容器中运行什么命令,在这里我们运行/bin/bash, 启动一个 bash shell

执行玩之后, 我们会看到启动一个新的tty界面
root@94dc722fc8f8:/#
我们可以在上面像普通的ubuntu机器一样执行各种shell命令
root@94dc722fc8f8:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:01
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:1/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2690 (2.6 KB)  TX bytes:648 (648.0 B)


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
看这里有2个网卡

root@94dc722fc8f8:/# ping 192.168.56.101
PING 192.168.56.101 (192.168.56.101) 56(84) bytes of data.
64 bytes from 192.168.56.101: icmp_seq=1 ttl=64 time=0.252 ms
64 bytes from 192.168.56.101: icmp_seq=2 ttl=64 time=0.087 ms
64 bytes from 192.168.56.101: icmp_seq=3 ttl=64 time=0.084 ms
^C
--- 192.168.56.101 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.084/0.141/0.252/0.078 ms
ping主机能够通, 1+92.168.56.101是我主机的ip地址

root@94dc722fc8f8:/# df -h
Filesystem                                                                                           Size  Used Avail Use% Mounted on
/dev/mapper/docker-253:1-201487135-94dc722fc8f8eab8ed720f92efbbc841665f994f7080ea0be21e3bd2c8cd1a63  9.8G  245M  9.0G   3% /
tmpfs                                                                                                3.9G     0  3.9G   0% /dev
shm                                                                                                   64M     0   64M   0% /dev/shm
tmpfs                                                                                                3.9G     0  3.9G   0% /run/secrets
/dev/mapper/centos-root                                                                               50G  2.6G   48G   6% /etc/hosts
tmpfs                                                                                                3.9G     0  3.9G   0% /proc/kcore
tmpfs                                                                                                3.9G     0  3.9G   0% /proc/timer_stats、
这个磁盘分配方式有点诡异,暂时还搞不清楚原因,留待以后解决

root@94dc722fc8f8:/# fdisk -l
这个没有任何的输入,很奇怪,不知道原因,留待以后解决

root@94dc722fc8f8:/# apt-get -y install vim
会安装vim

root@94dc722fc8f8:/# exit

退出容器,返回host,这个时候, 容器会停止运行,但容器仍然存在,可以使用start重新启动


[root@centos7-docker ~]# docker run --name named_container -i -t ubuntu /bin/bash
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
     root@4d846810260e:/#
使用--name来给一个container命令
[root@centos7-docker ~]# docker ps -a
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS                     PORTS               NAMES
4d846810260e        ubuntu:latest            "/bin/bash"         40 seconds ago      Exited (0) 8 seconds ago                       named_container

创建守护式容器
[root@centos7-docker ~]# docker run --name daemon_container -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
9dfadd6cae2dfe204d8ec135300fbaba2637b024c8ae9ca57c9f25a30b685275
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
使用-d来创建守护式容器
[root@centos7-docker ~]# docker ps -a
CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS                        PORTS               NAMES
e4cf01bce7e2        ubuntu:latest            "/bin/bash -C 'while   20 seconds ago      Exited (127) 19 seconds ago                       daemon_container
[root@centos7-docker ~]# docker logs daemon_container
hello world
hello world
hello world
hello world
hello world
[root@centos7-docker ~]# docker top daemon_container
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                5879                1064                0                   15:31               ?                   00:00:00            /bin/sh -c while true; do echo hello world; sleep 1; done
root                5985                5879                0                   15:32               ?                   00:00:00            sleep 1

删除

[root@centos7-docker ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker-whale                latest              beda7d481894        5 days ago          255.5 MB
[root@centos7-docker ~]# docker rmi docker-whale
Untagged: docker-whale:latest
Deleted: beda7d4818948a398cd3526158c2f373ffd4516ca8855f1e03baff2ce09de42d
Deleted: 71517881cee5b6704029758530c1c0e56ded612561cbe90a8b7aa5fefe475cd2
删除iamge

[root@centos7-docker ~]# docker ps -a
[root@centos7-docker ~]# docker rm determined_morse
删除container

[root@centos7-docker ~]# docker stop determined_morse
determined_morse

停止
[root@centos7-docker ~]# docker kill 94dc722fc8f8
94dc722fc8f8

杀死
[root@centos7-docker ~]# docker ps -a
CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS                       PORTS               NAMES
1c9f942ce05a        ubuntu:latest            "/bin/bash"            18 hours ago        Exited (0) 17 seconds ago                        determined_morse
94dc722fc8f8        ubuntu:latest            "/bin/bash"            4 days ago          Exited (137) 4 seconds ago                       hungry_leakey





更新



查询

[root@centos7-docker ~]# docker images

列出所有的image


[root@centos7-docker ~]# docker ps

列出active的容器

[root@centos7-docker ~]# docker ps -a

列出所有的容器

能看见“CONTAINER ID”,“NAMES”等列


[root@centos7-docker ~]# docker start determined_morse

这里使用的是NAME来标识容器

[root@centos7-docker ~]# docker start 94dc722fc8f8

这里使用UUID来标识容器

[root@centos7-docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1c9f942ce05a        ubuntu:latest       "/bin/bash"         18 hours ago        Up 3 minutes                            determined_morse
94dc722fc8f8        ubuntu:latest       "/bin/bash"         4 days ago          Up 6 seconds                            hungry_leakey

这个时候我们可以看见状态都变了

docker重新启动的时候,会沿用docker run命令时指定的参数来运行


[root@centos7-docker ~]# docker attach determined_morse
root@1c9f942ce05a:/#

使用docker attach 也可以重新附着到容器上

[root@centos7-docker ~]# docker restart determined_morse

重启


[root@centos7-docker ~]# docker logs determined_morse

查看容器日志,看容器内部都在干什么

[root@centos7-docker ~]# docker top determined_morse

查看容器内的进程


我们有时候也需要在docker中给容器运行一些进程,可以分成后台任务和交互式任务

[root@centos7-docker ~]# docker exec -d determined_morse touch /tmp/test.txt

touch创建/tmp/test.txt

[root@centos7-docker ~]# docker exec -t -i determined_morse /bin/bash
root@1c9f942ce05a:/#

交互式任务,进入容器打开shell

root@1c9f942ce05a:/# ll /tmp/test.txt
-rw-r--r-- 1 root root 0 Aug  1 03:23 /tmp/test.txt

测试刚才通过后台任务新建的文件


[root@centos7-docker ~]# docker inspect determined_morse

深入获取容器的信息




Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐