Docke 1.12 基础篇:48条命令(5)

本文针对Docker1.12的48条命令,列出了container相关的18条命令,上一篇文章我们学习了容器生状态管理的几条命令,这这一篇中我们来看一下剩下的9条命令都能做什么。

container相关的命令

项番命令详解
No.1attachAttach to a running container
No.9execRun a command in a running container
No.3commitCreate a new image from a container’s changes
No.4cpCopy files/folders between a container and the local filesystem
No.7diffInspect changes on a container’s filesystem
No.10exportExport a container’s filesystem as a tar archive
No.13importImport the contents from a tarball to create a filesystem image
No.29renameRename a container
No.31rmRemove one or more containers

事前准备

先启动一个container准备用来霍霍。

[root@liumiaocn ~]# docker run --name=nginx -d -p80:80 nginx
46be04227f8ae236ec47acf0dcb20e65389cb88e6d724439d6305813ce6b7f4e
[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
46be04227f8a        nginx               "nginx -g 'daemon off"   2 seconds ago       Up 1 seconds        0.0.0.0:80->80/tcp, 443/tcp   nginx
[root@liumiaocn ~]#

exec

通过exec可以连接到一个正在运行的container执行一条命令,比如

[root@liumiaocn ~]# docker exec nginx hostname
46be04227f8a
[root@liumiaocn ~]#

在实际中下面的方法用的更多,类似于连接到一个container中,然后可以执行各种操作

[root@liumiaocn ~]# docker exec -it nginx /bin/bash
root@46be04227f8a:/# hostname
46be04227f8a
root@46be04227f8a:/# pwd
/
root@46be04227f8a:/# exit
exit
[root@liumiaocn ~]#

退出后也不会有副作用

[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
46be04227f8a        nginx               "nginx -g 'daemon off"   2 minutes ago       Up About a minute   0.0.0.0:80->80/tcp, 443/tcp   nginx
[root@liumiaocn ~]#

attach

attach到一个正在运行的container上,可以看到现在container的状况,按ctrl+C退出会伴随着container的退出,

[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
46be04227f8a        nginx               "nginx -g 'daemon off"   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp, 443/tcp   nginx
[root@liumiaocn ~]# docker attach nginx
^C[root@liumiaocn ~]#
[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@liumiaocn ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
46be04227f8a        nginx               "nginx -g 'daemon off"   3 minutes ago       Exited (0) 7 seconds ago                       nginx
[root@liumiaocn ~]#

cp

docker cp用于将本地文件copy到某容器内
在host上创建一个helloworld.txt的文件

[root@liumiaocn ~]# echo "Hello world" >/tmp/helloworld.txt

启动一个busybox的container,确认该container的/tmp下什么也没有

[root@liumiaocn ~]# docker run --name busybox -it busybox /bin/sh
/ # cd /tmp
/tmp # ls -l
total 0
/tmp #

docker cp

[root@liumiaocn ~]# docker cp /tmp/helloworld.txt busybox:/tmp
[root@liumiaocn ~]#

确认container中的结果

/tmp # ls -l /tmp
total 4
-rw-r--r--    1 root     root            12 Sep 24 06:41 helloworld.txt
/tmp # cat /tmp/helloworld.txt
Hello world
/tmp #
[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
44f08d7f4732        busybox             "/bin/sh"           6 minutes ago       Up 6 minutes                            busybox
[root@liumiaocn ~]#

diff

docker是分层的,由镜像文件创建成容器,比如我们在docker cp中创建的container(44f08d7f4732),它有什么变化呢,至少我们把helloworld.txt给copy到该container
的/tmp下了,我们怎样才能看到这个差别呢

[root@liumiaocn ~]# docker diff busybox
C /root
A /root/.ash_history
C /tmp
A /tmp/helloworld.txt
[root@liumiaocn ~]#

commit

但是当我们在这个时候同时在一个新的终端启动一个busybox的container的时候,这个新的container的/tmp下什么也没有.

[root@liumiaocn ~]# docker run -it busybox /bin/sh
/ # ls /tmp
/ # exit
[root@liumiaocn ~]#

为了证明这不是幻觉,使用ps -a来看一下刚才这个container是的确存在过的,只是我们退出了而已

[root@liumiaocn ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
63d08b54575c        busybox             "/bin/sh"           20 seconds ago      Exited (0) 14 seconds ago                       angry_northcutt
44f08d7f4732        busybox             "/bin/sh"           10 minutes ago      Up 10 minutes                                   busybox
[root@liumiaocn ~]#

使用commit就可以解决这个问题了,把当前的变更保存到镜像中,在/tmp下显示一个文件不是什么好的例子,但是如果在一个Ubuntu的Base上
安装完JDK做一次commit,在安装完JDK之后的版本上再安装Tomcat再做一次commit,是不是你就可以得到了三个版本的镜像了,当然更多的做法是通过
dockerfile来实现的,但是commit倒也简单有效。

[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
44f08d7f4732        busybox             "/bin/sh"           15 minutes ago      Up 15 minutes                           busybox
[root@liumiaocn ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
busybox                   latest              2b8fd9751c4c        3 months ago        1.093 MB
74th/redmine-all-in-one   latest              cbd38a5bb23d        7 months ago        1.515 GB
[root@liumiaocn ~]# docker commit 44f08d7f4732 busybox:v2
sha256:185ccb97f18acf478b9a3a63964fcab96d2f2cc753e6ec16341013bbc0daa342
[root@liumiaocn ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
busybox                   v2                  185ccb97f18a        20 seconds ago      1.093 MB
busybox                   latest              2b8fd9751c4c        3 months ago        1.093 MB
74th/redmine-all-in-one   latest              cbd38a5bb23d        7 months ago        1.515 GB
[root@liumiaocn ~]#

使用这个新生成的镜像busybox:v2启动一下确认/tmp下确实存在刚才的变化内容。

[root@liumiaocn ~]# docker run -it busybox:v2 /bin/sh
/ # cd /tmp
/tmp # ls -l
total 4
-rw-r--r--    1 root     root            12 Sep 24 06:41 helloworld.txt
/tmp # cat helloworld.txt
Hello world
/tmp # exit
[root@liumiaocn ~]#

使用commit生成的新的镜像可以看出history的变化内容

[root@liumiaocn ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
busybox                   v2                  185ccb97f18a        13 minutes ago      1.093 MB
busybox                   latest              2b8fd9751c4c        3 months ago        1.093 MB
74th/redmine-all-in-one   latest              cbd38a5bb23d        7 months ago        1.515 GB
[root@liumiaocn ~]# docker history busybox:v2
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
185ccb97f18a        13 minutes ago      /bin/sh                                         73 B
2b8fd9751c4c        3 months ago        /bin/sh -c #(nop) CMD ["sh"]                    0 B
<missing>           3 months ago        /bin/sh -c #(nop) ADD file:9ca60502d646bdd815   1.093 MB
[root@liumiaocn ~]#

export

上面使用commit将正在运行的container做成了新的镜像文件,export则是可以用来将正在运行的container生成tar文件
启动一个container

[root@liumiaocn ~]# docker run -it busybox:v2 /bin/sh
/ #

确认container然后将其export出来

[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ea51341f60a5        busybox:v2          "/bin/sh"           19 seconds ago      Up 18 seconds                           goofy_roentgen
[root@liumiaocn ~]# docker export ea51341f60a5 >busyboxv3.tar
[root@liumiaocn ~]# ll busyboxv3.tar
-rw-r--r--. 1 root root 1299968 Sep 24 15:18 busyboxv3.tar
[root@liumiaocn ~]#

rename

用于将container的名称进行修改

[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
ea51341f60a5        busybox:v2          "/bin/sh"           About a minute ago   Up About a minute                       goofy_roentgen
[root@liumiaocn ~]# docker rename goofy_roentgen busybox
[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ea51341f60a5        busybox:v2          "/bin/sh"           2 minutes ago       Up 2 minutes                            busybox
[root@liumiaocn ~]#

rm

删除container,如果删除正在运行中的container,要么stop之后再rm,要么加上-f选项

[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ea51341f60a5        busybox:v2          "/bin/sh"           3 minutes ago       Up 3 minutes                            busybox
[root@liumiaocn ~]# docker rm -f busybox
busybox
[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@liumiaocn ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@liumiaocn ~]#

import

从tar文件生成docker管理的镜像文件,与save/load的区别在于,这个会丢history的内容

[root@liumiaocn ~]# ll busyboxv3.tar
-rw-r--r--. 1 root root 1299968 Sep 24 15:18 busyboxv3.tar
[root@liumiaocn ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
busybox                   v2                  185ccb97f18a        25 minutes ago      1.093 MB
busybox                   latest              2b8fd9751c4c        3 months ago        1.093 MB
74th/redmine-all-in-one   latest              cbd38a5bb23d        7 months ago        1.515 GB
[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@liumiaocn ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@liumiaocn ~]# docker import busyboxv3.tar busybox:v3
sha256:8227b6ef55ac3ffc6f4f2a0bf3ed31f96e32cd1275eeaa9f92cfd35eda9de0e1
[root@liumiaocn ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@liumiaocn ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@liumiaocn ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
busybox                   v3                  8227b6ef55ac        9 seconds ago       1.093 MB
busybox                   v2                  185ccb97f18a        26 minutes ago      1.093 MB
busybox                   latest              2b8fd9751c4c        3 months ago        1.093 MB
74th/redmine-all-in-one   latest              cbd38a5bb23d        7 months ago        1.515 GB
[root@liumiaocn ~]# docker history busybox:v3
IMAGE               CREATED             CREATED BY          SIZE                COMMENT
8227b6ef55ac        19 seconds ago                          1.093 MB            Imported from -
[root@liumiaocn ~]#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值