【Docker篇之一】Docker镜像及容器

一、Docker核心概念

1、镜像(image)

Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为是一个面向Docker容器引擎的只读模板,比如一个镜像可以是一个完整的centos操作系统,也可以是一个安装了MySQL的应用程序,称之为一个镜像。
镜像文件用户可以自己创建和更新现有镜像,也可以从网上下载已经做好的应用镜像直接使用。

2、容器(Container)

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

3、仓库(Repository)

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

二、Docker镜像操作

1、搜索镜像

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

docker search httpd

2、获取镜像

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

docker pull httpd

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

3、查看镜像信息

docker images

REPOSITORY ---镜像属于的仓库
TAG ---镜像的标签信息,标记同一个仓库中不同镜像
IMAGE ID ---镜像的唯一ID号,唯一标识了该镜像
CREATED ---镜像创建时间
SIZE ---镜像大小
  • 还可以根据镜像的唯一标识ID号,获取镜像详细信息。

docker inspect 11426a19f1a2

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

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

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

docker tag httpd apache:apache1

4、删除镜像

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

5、存出镜像和导入镜像

存出镜像

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

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

  • 将本地的httpd镜像存出apache2

docker save -o apache2 httpd

载入镜像

命令格式: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 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_euclid

docker stop e1e05c66ec9c

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

3、容器的进入

  • 当不进入容器时,让容器执行任务,一条任务执行完成后容器会自动停止,为了避免繁琐的情况,我们需要进入容器执行,且退出容器后,容器并不会停止。
命令格式:docker exec -it e1e05c66ec9c /bin/bash
-i 表示让容器的输入保持打开
-t 表示让docker分配一个伪终端
  • 例如

docker exec -it e1e05c66ec9c /bin/bash

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

原文地址:http://blog.51cto.com/13659253/2156975

时间: 2024-07-29 22:49:47

【Docker篇之一】Docker镜像及容器的相关文章

docker通过模板创建镜像以及容器、仓库和数据管理

笔记内容:docker通过模板创建镜像以及容器.仓库和数据管理笔记日期:2018-02-05 25.5 通过模板创建镜像 25.6 容器管理 25.7 仓库管理 25.8 数据管理 25.5 通过模板创建镜像 1.既然是通过模板创建镜像,那么首先肯定得先下载一个模板,地址如下: http://openvz.org/Download/templates/precreated 打开以上网址选择一个模板进行下载,我这里下载的是centos-6-x86-minimal.tar.gz (signature

Docker的安装与镜像、容器、仓库的管理

一.安装docker 1.配置repo仓库 cat /etc/yum.repos.d/docker.repo [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg 2.安装docker yum -y install doc

【干货】Docker的安装、镜像及容器容器

1.Docker概述 Docker是在Linux容器中运行应用的开源工具,是一种轻量级的虚拟机.器容器技术可以在一台主机上轻松地为任何应用创建一个轻量级的.可移植的.自给自足的容器.通过这种容器打包应用程序,意味着简化了重新部署.调试这些琐碎的重复工作,极大地提高了工作效率. 作为一种轻量级的虚拟化方式,Docker与传统虚拟机相比具有显著的优势: 1).Docker容器很快,启动和停止可以在秒级实现,比传统虚拟机要快很多: 2).Docker核心解决的问题是利用容器来实现类似VM,从而以更加节

Docker基础命令详解——镜像及容器操作

Docker基础命令详解--镜像及容器操作 前言 ? 上篇文章介绍了有关Docker的基础与Linux下docker的安装,本文主要讲解安装docker后的基础使用方法以及命令的介绍,主要是docker镜像操作及容器操作命令. ? 当然,docker的相关命令非常多,可以使用docker help命令查看对应目录以及相关提示命令. Docker镜像操作命令 [[email protected] ~]# which docker /usr/bin/docker 1.镜像搜索:docker sear

centos7下更改docker镜像和容器的默认路径

笔者近期在服务器上搭建docker环境,可由于笔者是普通用户,在安装的时候就跳了很多坑,现在记录一下. 一.docker权限问题 据官方解释,搭建docker环境必须使用root权限,或者sudo装,但一般服务器是一个机构或者多个人共同使用的,只有管理员才能拿到root权限,所以建议需要使用docker的普通用户要向管理员申请,在他搭完服务器后再搭一个docker环境,并把你当前这个普通用户名加入到docker组内,这样你才能使用. 命令行 sudo usermod -aG docker <yo

Docker配置本地镜像与容器的存储位置

默认情况下Docker的存放位置为:/var/lib/docker 可以通过下面命令查看具体位置: sudo docker info | grep "Docker Root Dir" 指定镜像和容器存放路径的参数是–graph=/var/lib/docker,我们只需要修改配置文件指定启动参数即可. Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致,在 Ubuntu 中的位置是:/etc/default/docker,在 CentOS 中的位置是:

腾讯云CentOS 7.6 64位之docker的镜像和容器练习

本文使用的Docker是社区版,版本是19.03.2,这个版本是本文写时的最新版. 首先总结下容器和镜像的概念: 容器是用镜像创建的,一个镜像可以创建多个容器. 一般来说,一个容器就是一个应用,把应用在容器中运行称之为应用容器化. 删除镜像的时候,如果由这个镜像创建的容器还存在则会删除失败. 容器和镜像的关系就是:容器是镜像的实例化的可运行实体. 以下是我的练习内容: 1. 拉取镜像  docker pull centos:latest  或者按照版本拉取:docker pull centos:

1.4-docker镜像使用容器生成新的镜像

Docker 基于已有镜像的容器创建镜像 * docker run centos /bin/bash首先使镜像开启容器. * docker start de8 启动指定的镜像容器.de8是镜像的ID,可以简写到3位. * 运行docker exec -it de8 /bin/bash后,进入到指定容器中,de8是ID,可以简写成3位.我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像. * exit退出容器后,运行docker commit -m "change somth&qu

Docker快速入门——Docker常用命令

Docker快速入门--Docker常用命令 一.Docker命令简介 1.Docker命令简介 Docker的命令清单可以通过运行sudo docker或者sudo docker help命令查看.Docker容器技术在不断演化过程中,Docker的子命令已经达到41个,其中核心子命令(例如:run)还会有复杂的参数配置.Docker命令根据功能和使用场景可以分为4个部分. 2.Docker用户组 Docker守护进程绑定的是一个unix ?socket,而不是TCP端口,默认的属主是root