Docker镜像及容器

栏目: 编程工具 · 发布时间: 6年前

内容简介:Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为是一个面向Docker容器引擎的只读模板,比如一个镜像可以是一个完整的CentOS操作系统,也可以是一个安装了MySQL的应用程序,称之为一个镜像。镜像文件用户可以自己创建和更新现有镜像,也可以从网上下载已经做好的应用镜像直接使用。容器是镜像的另一个运行实例,是独立运行的一个或一组应用以及他们所必须的运行环境,包括文件系统、系统库类、shell环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。

一、 Docker 核心概念

1、镜像(image)

Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为是一个面向Docker容器引擎的只读模板,比如一个镜像可以是一个完整的CentOS操作系统,也可以是一个安装了 MySQL 的应用程序,称之为一个镜像。

镜像文件用户可以自己创建和更新现有镜像,也可以从网上下载已经做好的应用镜像直接使用。

2、容器(Container)

容器是镜像的另一个运行实例,是独立运行的一个或一组应用以及他们所必须的运行环境,包括文件系统、系统库类、 shell 环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。

3、仓库(Repository)

仓库是用来集中存放镜像的地方,当自己创建了镜像后,可以使用push命令将它上传到公共仓库(Public)或者私有仓库(Private),这样,当其他机器想要使用时,直接下载下来即可使用。

二、Docker镜像操作

1、搜索镜像

  • 通过docker search 命令搜索远端官方仓库的共享镜像。
  • 搜索关键字为httpd的镜像
docker search httpd

Docker镜像及容器

2、获取镜像

  • 对于docker来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版,因此也可通过制定标签来下载指定版本,这里的标签(tag)就是用来区分镜像版本的。

  • 下载镜像httpd
docker pull httpd

Docker镜像及容器

整个下载过程可以看出,镜像文件由若干层(Layer)组成,我们称之为AUFS(文件联合系统),是实现增量保存与更新的基础,下载过程中会输出镜像的各层信息

3、查看镜像信息

docker images

Docker镜像及容器

REPOSITORY ---镜像属于的仓库

TAG ---镜像的标签信息,标记同一个仓库中不同镜像

IMAGE ID ---镜像的唯一ID号,唯一标识了该镜像

CREATED ---镜像创建时间

SIZE ---镜像大小

  • 还可以根据镜像的唯一标识ID号,获取镜像详细信息。
docker inspect 11426a19f1a2

Docker镜像及容器

  • 使用docker tag命令来为本地的镜像添加新的标签。

命令格式:docker tag 镜像名称:[标签] 新名称:[新标签]

  • 例如:本地镜像httpd添加新的名称为apache,新的标签为apache1
docker tag httpd apache:apache1

Docker镜像及容器

4、删除镜像

  • 方法一:docker rmi 仓库名称:标签
  • 方法二:docker rmi 镜像ID号

  • 注:当一个镜像有多个标签的时候,docker rmi 命令只是删除该镜像多个标签中的指定标签,不会影响镜像文件。但当该镜像只剩下一个标签的时候,此时删除该标签的时候会彻底删除该镜像。
  • 当使用方法二删除时,必须确保该镜像没有被容器使用才能进行,删除时系统会先删除掉指向该镜像的所有标签,然后删除镜像本身。如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,在删除镜像

5、存出镜像和导入镜像

存出镜像

  • 当需要把一台机器上的镜像迁移到另一台机器上的时候,需要将镜像保存成本地文件,这一过程叫做存出镜像。
  • 别的机器通过拷贝的镜像,将该镜像导入到自己的镜像库中,这一过程叫做载入镜像。

<br/>命令格式:docker save -o 存储文件名 存储的镜像<br/>

  • 将本地的httpd镜像存出apache2

docker save -o apache2 httpd

Docker镜像及容器

载入镜像

命令格式:docker load < 存出的镜像文件

或者:

docker --input 存出的镜像文件

6、上传镜像

  • 本地存储的镜像文件越来越多,就要一个专门的地方存放这些镜像---仓库。目前比较方便的就是公共仓库,默认上传的是Docker hub官方仓库,需要注册账号完成登录后才能上传。

  • 在上传镜像之前还需要对本地镜像添加新的标签,然后再使用docker push命令上传。
docker tag httpd apache:test docker login

Username: madeb  //此账号需自己注册

Password:

Login Succeeded

  • 成功登录后就可上传镜像了。
docker push apache:test
  • 注:若是需要退出登录
docker logout

三、Docker容器操作

1、容器的创建与启动

  • 新创建的容器处于停止状态,不运行任何程序。
  • 需要在其中发起一个进程来启动容器,该进程是容器的唯一进程。
  • 该进程结束时,容器也会完全停止。

<br/>命令格式:docker create [选项] 镜像 运行的程序<br/>

-i 让容器的输入保持打开

-t 让Docker分配一个伪终端

docker create -it httpd /bin/bash

docker ps -a

docker start e1e05c66ec9c //开启容器

docker ps -a

Docker镜像及容器

  • 创建容器并执行一条命令。
  • 这种方式和在本地执行命令几乎没有区别
docker run httpd /usr/bin/bash -c ls /
  • 容器在执行完ls / 后会立马停止,这个时候就需要让docker以守护态在后台运行
  • 例如,下面的程序就会在后台持续运行。
docker run -d httpd /usr/bin/bash -c ls / "while true; do echo hello;done"

2、容器的终止

  • 想要停止容器的运行前需要查看容器的运行状态,以及ID号
docker ps -a

CONTAINER ID        IMAGE              COMMAND            CREATED            STATUS              PORTS              NAMES

e1e05c66ec9c        httpd              "/bin/bash"        26 minutes ago      Up 25 minutes      80/tcp              friendly_eucliddocker stop e1e05c66ec9c

  • 当查看到STATUS状态为Exited时,即状态终止。

3、容器的进入

  • 当不进入容器时,让容器执行任务,一条任务执行完成后容器会自动停止,为了避免繁琐的情况,我们需要进入容器执行,且退出容器后,容器并不会停止。

命令格式:docker exec -it e1e05c66ec9c /bin/bash

-i 表示让容器的输入保持打开

-t 表示让docker分配一个伪终端

  • 例如
docker exec -it e1e05c66ec9c /bin/bash

Docker镜像及容器

4、容器的导出与导入

容器导出

  • 无论这个容器是运行还是停止均可导出。

<br/>命令格式:docker export 容器ID/名称 &gt; 文件名<br/>

  • 将容器导出为apache1

docker export e1e05c66ec9c > apache1

容器导入

  • 导出的文件从A机器拷贝到B机器,之后使用docker import命令导入,成为镜像。

<br/>命令格式:cat 文件名 | docker import - 生成的镜像名称:标签<br/>

  • 例如导入apache1 成为本地镜像

cat apache1 | docker import - apache1 注:此处必须先使用cat,不然无法导入

docker images

REPOSITORY          TAG                IMAGE ID            CREATED            SIZE

apache1            latest              2bfb89eb2c5d        49 seconds ago      174MB

apache              apache1            11426a19f1a2        8 days ago          178MB

httpd              latest              11426a19f1a2        8 days ago          178M

5、容器的删除

  • 可以使用docker rm 命令将一个已经处于终止状态的容器删除。

<br/>命令格式:docker rm 容器ID/名称<br/>

docker rm e1e05c66ec9c docker ps -a | grep e1e05c66ec9c
  • 如果要删除一个正在运行的容器,可以添加-f选项强制删除,但建议先将容器停止在做删除操作。

docker默认的存储目录在本地/var/lib/docker/,docker的镜像、容器、日志等内容全部都存储在这里,也可单独使用大容量分区来存储这些内容,并且一般选择LVM逻辑卷,从而避免出现docker运行过程中存储目录容量不足的问题。

四、Docker资源控制

1、限制cpu使用速率

  • 在docker中可以通过--cpu-quota选项来限制cpu使用率,cpu的百分比是以1000为单位的。

docker run --cpu-quota 20000 e1e05c66ec9c //cpu的使用率限定为20%

  • 还可以通过Cgroup配置文件立即生效
echo 20000 > /sys/fs/cgroup/cpu/docker/e1e05c66ec9ced2d6290ebe8e3fdea27f439dcbeea70921ec5d9e5b0bcffaf11/cpu.cfs_quota_us

2、多任务按比例分析CPU

  • 当有多个容器任务运行时,很难计算cpu的使用率,为了使容器合理使用cpu资源,可以通过--cpu-share选项设置cpu按比例共享资源,这种方式还可以实现cpu使用率的动态调整。

docker run --cpu-shares 1024 容器A

docker run --cpu-shares 1024 容器B

docker run --cpu-shares 2048 容器C

3、限制cpu内核使用

  • 如果服务器有16个核心,那么cpu编号为0~15,使容器绑定第1~4个内核使用。

docker run --cpuset-cpus 0,1,2,3 容器名

2、对内存使用的限制

  • 在docker中可以通过docker run -m 命令来限制内存使用量,相应的配置文件为/sys/fs/cgroup/memory/memory.kmem.limit_in_bytes。需要注意的是,一旦容器cgroup使用的内存超过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制内存控制在限制范围之内,进程就会被杀死。

docker run -m 512m 容器名 //限制容器的内存为512m

3、对blkio的限制

  • 如果是在一台服务器上进行容器的混合部署,那么会出现同时有几个程序写磁盘数据的情况,这时可以--device-write-iops选项来限制写入的iops,相应的还有--device-read-bps选项可以限制读取的iops,但是这种方法只能针对blkio限制的是设备(device),而不是分区,相应的配置文件/sys/fs/cgroup/blkio/docker/容器ID/blkioo.throttle.write_iops_device

docker run --device-write-bps /dev/sda1:1mb 容器名 //限制容器的/dev/sda1的写入ipos为1MB

更多 Docker 相关教程见以下内容 : 

Linux 下的 Docker 安装与使用 https://www.linuxidc.com/Linux/2018-06/152996.htm

CentOS 7安装Docker应用容器引擎 https://www.linuxidc.com/Linux/2018-06/152856.htm

CentOS 7.3环境安装Docker 18.03 https://www.linuxidc.com/Linux/2018-05/152356.htm

使用Docker分分钟启动常用应用  https://www.linuxidc.com/Linux/2017-04/142649.htm

CentOS 7使用Docker搭建GitLab服务器  https://www.linuxidc.com/Linux/2018-04/151725.htm

30分钟带你了解Docker  https://www.linuxidc.com/Linux/2018-08/153346.htm

Docker容器常见操作详解 https://www.linuxidc.com/Linux/2018-08/153685.htm

Docker发布应用程序指南 https://www.linuxidc.com/Linux/2018-08/153405.htm

Docker 的详细介绍 请点这里

Docker 的下载地址 请点这里

Linux公社的RSS地址: https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-08/153715.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Handbook of Data Structures and Applications

Handbook of Data Structures and Applications

Dinesh P. Mehta / Chapman and Hall/CRC / 2004-10-28 / USD 135.95

In the late sixties, Donald Knuth, winner of the 1974Turing Award, published his landmark book The Art of Computer Programming: Fundamental Algorithms. This book brought to- gether a body of kno......一起来看看 《Handbook of Data Structures and Applications》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具