docker学习笔记(四):容器管理与数据卷

147人浏览 / 0人评论

今天的学习任务是承接昨天所学的容器管理部分,然后再学习了docker的数据卷相关的使用方法。

容器管理

昨天我们学习了容器的开启、删除等操作。今天继续学习容器的启停、进入容器内部等。

进入容器 attach

比如我们需要进入一个名为c1centos的容器,我们可以使用以下命令:

docker attach c1

在容器中执行命令 exec

attach命令并不是对任何容器都有效,仅对提供了终端的容器有效。比如nginxmysql等应用容器是无法进入的。

但是我们想要在容器中执行命令,比如重启nginx容器中的nginx,或者在该容器中创建test目录该如何做呢?

docker提供了exec指令实现该功能:

docker exec n1 nginx -s reload
docker exec n1 midir test

为容器分配终端

如果我们必须要进入到正在运行的容器,但是attach又不能进入该怎么办呢?

其实这个问题也可以使用前面介绍的-it来分配一个终端。

docker exec -it n1

这个命令在很多时候都非常有用,特别是需要自己制作一些公用镜像的时候。前段时间公司出现了一个问题,就是需要为一个镜像安装字体。从概念上讲,安装字体后的镜像就已经不是原来的进行了,这时候我们相当于是要在原有镜像的基础上创建新的镜像。

我们可以将原来的镜像启动起来,实例化一个容器,然后进入到该容器,再安装字体,安装完后可以使用docker export n1的方式将容器导出生成镜像。

停止容器

docker stop n1

这个地方有一点需要注意,该镜像在创建的时候使用了--restart=always选项不会影响手动停止操作。

启动容器

docker start n1

在看到这个命令的时候,可以和docker run nginx对比一下。

docker run nginx docker start n1
作用 创建并运行一个容器 开启一个容器
参数 景象名称 容器名称或者ID

查看容器中运行的程序

docker top n1

该命令相当于执行了一次ps指令。

查看容器详细信息

docker inspect n1

该命令会展示关于容器的一些参数信息,包括网络、数据卷等。

数据卷

从第一天的学习中,我们知道了docker的底层接口是分层的。镜像是一些的只读层组成,容器在镜像的基础上加了一个可读写层,我们称之为容器层

由于这个容器层的原因,所以容器在停止、重启操作过程中,数据不会丢失。一旦我们删除了容器,那么容器层也会被删除。就像windows的C盘一样,一旦重装系统C盘的数据就会被损坏。为了让容器中的数据能给容器的保存下来,docker提供了数据卷,通过在物理机上创建一个目录,然后与容器中的目录建立映射关系,来保存容器中的数据。这个操作与我们给windows分配D、E....等盘一样,不受系统重装损坏等影响。

创建默认卷

docker run -v /test nginx

这条指令会在nginx容器中创建一个 /test目录,然后在物理机的指令目录下创建一个随机名称的目录与之对应。

当然可以生成多个数据卷,比如:

docker run -v /test1 -v /test2 -v /test3 nginx

指定本地目录名称

docker run -v /data:/test nginx

冒号前面的是物理机中的目录, 冒号后面的是容器中的目录。

而且这些目录不需要事先创建好,容器在使用这些目录的时候会自动创建。

数据卷的操作权限

docker run -v /data:/test:rw  -v /data1:/test1:r -v /data2:/test2:w nginx

这条指令创建了三个数据卷:

  • /data:/test:rw 是可读写卷,默认情况下就是这种权限。
  • /data1:/test1:r 只读卷, 容器只可以读这个卷里面的东西,不可写入。
  • /data2:/test2:w 只写卷, 容器对这个卷只有写入权限,无法读取数据。

以上所有的权限均是针对容器而言的,对于物理机这些目录的读写权是不受限制的。

明天将学习docker中的网络知识,将可以是容器与容器实现网络互通。

全部评论