Docker架构、镜像和容器

一、Docker概述

Docker是在Linux容器里面运行的开源工具,是一种轻量级的虚拟机。其设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应组件的封装、发布、部署、运行等生命周期的管理,达到组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
Docker的三大核心概念:镜像、容器、仓库,安装Docker以及围绕镜像和容器的具体操作。

二、相比传统虚拟机Dokcer的优势

1、Docker容器很快,启动和停止可以在秒级实现,比传统虚拟机要快很多。
2、Docker核心解决的问题是利用容器来时实现类似VM的功能,从而以更加节省的硬件资源提供给用户更多的计算资源,所以Docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,从而在保证性能的同时,减小了系统开销,使得在一台主机上同时运行数千个Docker容器成为可能。
3、Docker操作方便,还可以通过Dockerfile配置文件支持灵活的自动化创建和部署。

三、Docker和传统虚拟机的架构

Docke之所以拥有众多优势,跟操作系统虚拟化自身的特点是分不开的。传统虚拟机需要拥有额外的虚拟机管理程序。

四、Docker核心概念及安装

1、镜像(Image)
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为是一个面向Docker容器引擎的只读模板,比如:一个镜像可以是一个完整的CentOS操作系统环境,成为一个CentOS镜像;可以是一个安装了MySQL的应用程序,称之为一个MySQL镜像等等。
Docker提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经做好的应用镜像来直接使用。
2、容器(container)
Docker的容器是从镜像创建的运行实列,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互补可见的,可以保证平台的安全性。还可以把容器看作是一个简易版的Linux环境,Docker利用容器来运行和隔离应用。
3、仓库(Repository)
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公共仓库(Pulic)或者私有仓库(Private),这样一来当下次要在另一台机器上使用这个镜像的时候,只需要从仓库上pull下来就可以了。
仓库注册服务器(Registry)是存放仓库的地方,其中包含了多个仓库,每个仓库几种存放某一类镜像,并且使用不同的标签来区分它们。目前最大的公共仓库是DockerHUb,其中存放了数量庞大的镜像供用户下载使用。

4、Docker的安装
vi /etc/yum.repos.d/CentOS-Base.repo //配置yum源
在末行添加以下内容:
[docker-repo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

yum install -y docker-engine    //安装Docker引擎
systemctl enable docker     //开机自启
systemctl start docker      //启动docker

五、Docker镜像操作

Docker运行容器前需要本地存在对应的镜像,如果不存在本地镜像Docker就会尝试从默认镜像仓库https://hub.docker.com 下载,这是由Docker官方维护的一个公共仓库,可以满足用户的绝大部分需求。用户也可以通过配置来使用自定义的镜像仓库。
1、搜索镜像(默认从Docker Hub查询)
获取镜像的三种方式:
1)下载镜像(默认从Docker Hub下载)
2)把容器转换为镜像
3)制作镜像(通过dockerfile生成镜像)
docker search httpd //查找所有httpd相关的镜像

2、下载镜像(默认从Docker Hub下载)
docker pull httpd //拉取apache镜像

3、查看镜像
docker images //查看本地镜像列表

各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:表示镜像的标签
IMAGE ID:表示镜像的ID
CREATED:表示镜像创建时间
SIZE:表示镜像大小

docker tag httpd apache:test //给镜像添加新的标签

4、删除镜像

docker rmi 仓库名:标签
docker rmi -f 镜像ID  //永久删除镜像
docker rmi -f $(docker images | grep "none" | awk "{print \$3}")       //删除没有使用的镜像

5、导出和导入镜像

docker save -o 导出文件名 导出的镜像
docker save -o httpd01 httpd        //导出镜像


docker load <导出的文件

注意:导入之前要将原先的httpd镜像删除,否则不执行导入操作
6、上传镜像
docker push 镜像名称 //上传镜像到共有仓库

六、Docker容器的操作

容器时Docker的另一个核心概念。简单说,容器时镜像的一个运行实例,是独立运行的一个或一组应用以及他们所需的运行环境,包括文件系统、系统类库、shell环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。
1、容器的创建和启动
docker create -it httpd /bin/bash //创容器,默认时没有运行的
-i:让容器的输入保持打开
-t:让Docker分配一个伪终端

docker ps  //查看正在运行的容器
docker ps -a    //查看所有容器

docker start 容器ID   //启动容器
docker stop 容器ID    //停止容器


创建并启动容器用docker run命令,等与先执行docker create命令,在执行docker start命令。
docker run来创建容器时过程如下:
1)首先检查本地是否存在指定的镜像,当镜像不存在时,会从公共仓库下载
2)再利用镜像创建并启动一个容器
3)接着分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层
4)从宿主主机配置的网桥结构中桥接一个虚拟接口到容器中
5)分配一个地址池中的IP地址给容器
6)执行用户指定的应用程序
7)指定完毕后容器被终止运行

docker run 镜像名 /bin/bash -c ls //创建并启动容器指定一条shell命令
-c:指定的命令

docker ps -a //查看centos状态,发现执行完shell命令之后停止了

docker run -d centos /bin/bash -c "while true;do echo hello;done" //创建并启动容器,在后台持续运行

-d:让容器以守护形态在后台运行,但是注意的是后台必须要有正运行的程序,否则容器会停止。
2、容器的进入
docker exec -it 容器ID/名称 /bin/bash //进入容器

exit或ctrl+d退出伪终端
3、容器导出和导入
docker export 容器ID/名称 > 文件名 //容器的导出

cat 文件名 | docker import - 生成的镜像名:标签 //将容器文件导入成镜像

4、容器的删除

docker ps -a
docker rm 容器ID      //删除容器,无法删除正在运行的容器
docker rm -f d4e863a654aa   //强制删除运行中的容器,不建议。
docker container prune      //删除所有停止的容器
docker rm $(docker ps -qf status=exited)    //删除指定状态的容器

七、Docker的仓库

docker login //登录共有仓库,通过注册账号登录

八、Docker资源控制(优化)

1、限制CPU的使用速率
在Docker中可以通过--cpu-quota选项来限制CPU的使用使用率,CPU的百分比是以1000为单位的。
docker run --cpu-quota 20000 镜像名 //CPU的使用率限定为20%
2、多任务按比例分享CPU
当由多个容器任务运行时,很难计算CPU的使用率,为了使容器合理使用CPU资源,可以通过--cpu-shares选项设置CPU按比例共享CPU资源,这种方式还可以实现CPU使用率的动态调整。
以下实现三个容器A、B、C,占用CPU资源的比列为1:1:2

docker run --cpu-shares 1024 镜像名     //对应容器A
docker run --cpu-shares 1024 镜像名  //对应容器B
docker run --cpu-shares 2048 镜像名  //对应容器C

3、限制CPU内核使用
在Docker中可以使用--cpuset-cpus选项来使某些程序独享CPU内核,以便提高其处理速度,对应的Cgroup配置文件为/sys/fs/cgroup/cpuset/docker/容器编号/cpuset.cpus。选项后直接跟参数0、1、2......表示第1个内核、第2个内核、第3个内核,与/proc/cpuinfo中的CPU编号(processer)相同。
如果服务器有16个核心,那么CPU编号为0~15,使容器绑定第1~4个内核使用。
docker run --cpuset-cpus 0,1,2,3 镜像名
4、对内存使用的限制
在Docker中可以通过docker run -m命令来限制容器的内存使用量,相应的Cgroup配置文件为/sys/fs/cgroup/memory/memory.limit_in_bytes。但是需要注意:一旦容器Cgroup使用的内存超过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制内存使用在限制范围之内,进程就会杀死。
docker run -m 512m 镜像名 //限制容器的内存为512M
5、对blkio的限制
如果时在一台服务器上进行容器的混合部署,那么会出现同时有几个程序写磁盘数据的情况,这时可以通过--device-write-iops选项来限制写入的iops,相应的还有--device-read-bps选项可以限制读取的iops。但是这种方法只能针对blkio限制的设备(device),而不是分区。相应Cgroup写配置文件/sys/fs/cgroup/blkio/docker/容器ID/blkio.throttle.write_iops_device。
docker run --device-write-bps /dev/sda1:1mb 镜像名 //限制/dev/sdb1的写入iops为1MB

原文地址:http://blog.51cto.com/13871362/2350990

时间: 2024-11-05 20:46:26

Docker架构、镜像和容器的相关文章

docker 修改镜像和容器的存放路径(最新自己实践了第三种方法)

原文:docker 修改镜像和容器的存放路径(最新自己实践了第三种方法) docker info :查看docker的存储等相关信息. 将路径修改至挂载磁盘中 前提:磁盘已挂载成功 方法一: 1.停止docker 服务 service docker stop 2.备份数据到新的存放路径 cp -r /var/lib/docker/* /mnt/docker 3.备份 /var/lib/docker 路径 mv /var/lib/docker /var/lib/dockerbak} 4.创建软连接

Docker的镜像、容器和仓库

Docker本身的镜像是构建在其本身的文件系统之上的,Docker有很多种类的文件系统,Docker所支持的文件系统有以下几种:Aufs.devicemapper.btrfs和VFS,其中前三种是联合文件系统,可以支持分层,可以快速迭代,可以回滚.VFS 不支持.平时用的最多的是aufs 和devicemapper.Aufs(advanced multilayered unification filesystem), 直译过来就是高级分层联合文件系统,做为一种Union FS ,它支持将不同的目

s3 Docker的镜像和容器

Docker技术里最为基础的两大概念:镜像和容器.镜像的 获取方式:从registry拉取,从Dockerfile构建:容器的基本操作 1 Docker架构和底层技术简介 Docker Platform Docker提供了一个开发,打包,运行app的平台 把app和底层infrastructure隔离开来 Docker Engine 后台进程(dockerd) REST API Server CLI接口(docker) Docker Architecture 底层技术支持 Namespaces:

docker安装 镜像和容器的操作

目录 1 docker 介绍 3 centos安装docker 2 容器和镜像 3 加速配置 4 镜像操作 5 容器操作 1 docker 介绍 # 1 虚拟化--->虚拟机,硬件虚拟化 # 2 docker:centos系统-->大约90m # 3 开源项目,诞生于2013---->17年以后-->两年多的时间 # 4 基于go语言实现的--->docker ce:免费的 docker ee:收费 # 5 轻量级的操作系统虚拟化解决方案 # 6 Docker 的基础是 Li

Docker的镜像和容器

Docker image详细介绍 在之前的介绍中,我们知道docker images 是docker的三大组件之一. docker把下载的 images 存储到docker主机上,如果一个 image 不在主机上,docker会从一个镜像仓库下载,默认的仓库是  DOCKER HUB  公共仓库. 接下来将介绍更多关于docker images 的内容,包括: 使用和管理本地主机上的 images 创建一个基础的 images 上传 images 到docker hub (公共 images 仓

docker(二)镜像和容器常用命令

一.镜像操作 1.搜索镜像 可以直接在Docker Hub 直接搜索镜像,当然也可以使用命令来搜索. docker search 名称 docker search tomcat 2.拉取镜像 docker pull 镜像名 #拉取redis3.0 docker pull redis:3.0 3.查看镜像列表 Docker镜像保存在/var/lib/docker docker images docker images -a docker images -q(显示id) 4.删除镜像 docker

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

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

依据已有的条件分析了Docker的镜像与容器的存储结构

http://www.techbang.com/users/miss872misruls?=for http://www.techbang.com/users/miss851mislhqg http://www.techbang.com/users/miss547misdqxr http://www.techbang.com/users/miss576misxilr http://www.techbang.com/users/miss752miscuzx http://www.techbang.

docker镜像与容器存储结构分析

注意:转载请注明出处:http://www.programfish.com/blog/?p=9 Docker是一个开源的应用容器引擎,主要利用linux内核namespace实现沙盒隔离,用cgroup实现资源限制. Docker 支持三种不同的镜像层次存储的drivers: aufs.devicemapper.btrfs ; Aufs: AUFS (AnotherUnionFS) 是一种 Union FS, 简单来说就是支持将不同目录挂载到同一个虚拟文件系统下(unite several di

docker实战之centos6.5上安装、镜像、容器相关操作

学习docker前,理解以下几个概念有助于更好的使用docker.镜像,容器,仓库.镜像,就是一个操作系统环境,里面只有你需要的几个应用程序,如apache,mysql,php之类,只读模板.容器,从镜像创建的运行实例.可视为一个简易环境中和其中运行的应用.仓库,存放镜像的地方.学过git的同学可能更容易理解. 一.安装docker时,增加第三方源epel如果是centos7,下载并安装这个软件包#wget http://mirror.hust.edu.cn/epel/beta/7/x86_64