1 Docker

1.简介

1.1 docker 是什么

使用最广泛的开源容器引擎
一种操作系统级的虚拟化技术
依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)
 一个简单的应用程序打包工具

1.2 docker设计目标

提供简单的应用程序打包工具
开发人员和运维人员职责逻辑分离
多环境保持一致性

1.3 docker基本组成

在这里插入图片描述

Docker Client:客户端
Ddocker Daemon:守护进程
Docker Images:镜像
Docker Container:容器
Docker Registry:镜像仓库

1.4 dockervs虚拟机

在这里插入图片描述

虚拟机从下到上理解:

基础设施(Infrastructure)。它可以是你的个人电脑,数据中心的服务器,或者是云主机。
主操作系统(Host Operating System)。你的个人电脑之上,运行的可能是MacOS,Windows或者某个Linux发行版。
虚拟机管理系统(Hypervisor)。利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统。类型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。类型2的Hypervisor有VirtualBox和VMWare。
从操作系统(Guest Operating System)。假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个从操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。
各种依赖。每一个从操作系统都需要安装许多依赖。如果你的的应用需要连接PostgreSQL的话,则需要安装libpq-dev;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库。
应用。安装依赖之后,就可以在各个从操作系统分别运行应用了,这样各个应用就是相互隔离的。

docker从下到上理解:

基础设施(Infrastructure)。
主操作系统(Host Operating System)。所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法”运行”Docker。
Docker守护进程(Docker Daemon)。Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。
各种依赖。对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。
应用。应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。

对比虚拟机与Docker

   Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。

       说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

在这里插入图片描述

1.5 docker引用场景

应用程序打包和发布
应用程序隔离
持续集成
部署微服务
快速搭建测试环境
提供PaaS产品(平台即服务)

1.6 docker设计目标

提供简单的应用程序打包工具
开发和运维人员职业逻辑分离
多环境保持一致性

1.7 docker基本组成

docker client
docker daemon
docker images
docker container
docker registry

1.8 docker应用场景

应用程序打包和发布
应用程序隔离
持续集成
部署微服务
快速搭建测试环境
提供pass产品[平台即服务]

2. docker 安装

2.1 docker版本

社区版(Community Edition,CE)
企业版(Enterprise Edition,EE)

2.2 支持平台

Linux
mac
windows

2.3 安装

2.3.1 安装依赖

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

2.3.2 添加包源

yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

2.3.3 安装docker-ce

yum install -y docker-ce

[root@localhost ~]# docker -v
Docker version 18.09.5, build e8ff056

2.3.4 配置开机自启

systemctl start docker
systemctl enable docker

2.3.5 配置加速源

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
systemctl restart docker

docker info

2.3.6 简单测试

docker run -d -p 88:80 nginx
docker ps

3. 镜像管理

3.1 镜像

一个分层存储的文件
一个软件的环境
一个镜像可以创建N个容器
一种标准化的交付
一个不包含Linux内核而又精简的Linux操作系统
镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME>查看镜像中各层内容及大小,每层 对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/\<storage-driver\>中。

Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。地址如下:


https://hub.docker.com/explore
[root@localhost ~]# docker history nginx
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
bb776ce48575        3 days ago          /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B                  
<missing>           3 days ago          /bin/sh -c #(nop)  STOPSIGNAL SIGTERM           0B                  
<missing>           3 days ago          /bin/sh -c #(nop)  EXPOSE 80                    0B                  
<missing>           3 days ago          /bin/sh -c ln -sf /dev/stdout /var/log/nginx…   22B                 
<missing>           3 days ago          /bin/sh -c set -x  && apt-get update  && apt…   54MB                
<missing>           3 days ago          /bin/sh -c #(nop)  ENV NJS_VERSION=1.15.11.0…   0B                  
<missing>           3 days ago          /bin/sh -c #(nop)  ENV NGINX_VERSION=1.15.11…   0B                  
<missing>           2 weeks ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B                  
<missing>           2 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B                  
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:4fc310c0cb879c876…   55.3MB              
You have new mail in /var/spool/mail/root

3.2 镜像与容器联系

在这里插入图片描述

容器其实是在镜像的最上面加了一层读写层,在运行容器里文件改动时, 会先从镜像里要写的文件复制到容器自己的文件系统中(读写层)。 如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。所以无论多 少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制过来操作 的,并不会修改镜像的源文件,这种方式提高磁盘利用率。 若想持久化这些改动,可以通过docker commit 将容器保存成一个新镜像。

猜你喜欢

转载自blog.csdn.net/qq_26489043/article/details/113102599
今日推荐