Docker学习笔记——介绍

实习的时候接触到Docker 也用了一段时间,整理一下对docker的理解。php

版权声明:本文为博主ray原创文章,未经博主容许不得转载。 css

我的博客连接:http://wxinray.com/server/Docker-introductionhtml

什么是Docker

Docker 是 Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎, 源代码托管在 GitHub 上, 基于Go语言并听从Apache2.0协议开源。mysql

Docker-logo

官网解释:nginx

Docker is an open platform for developers and sysadmins to build, ship, and run distributed applicationsgit

所以能够把Docker理解为超轻量虚拟机的一种实现。web

Docker 功能

简化配置、代码流水线管理、提升开发效率、隔离应用、整合服务器、调试能力、多租户环境、快速部署。sql

Docker 使用场景

Docker一般用于以下场景:docker

  • web应用的自动化打包和发布;数据库

  • 自动化测试和持续集成、发布;

  • 在服务型环境中部署和调整数据库或其余的后台应用;

  • 从头编译或者扩展示有的OpenShift或Cloud Foundry平台来搭建本身的PaaS环境。

让咱们想象一个运行环境,当作一个管理系统的时候,须要nginx,php,mysql 以及一些其余的依赖。因而我须要安装这些软件,再装一堆依赖库,根据你的操做系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误亦或是软件版本的不一样形成的问题,可不是这么好装。并且万一你机器挂了,全部的东西都要从新来,可能还要把配置在从新弄一遍。这十分的麻烦和浪费时间。

使用Docker就能够帮你解决这方面的烦恼,就至关于有了一个能够运行起来的虚拟机,只要将Docker容器运行起来,就能够省略上述繁琐的配置和安装依赖。并且一旦你想换台机器,直接把这个容器端起来,再放到另外一个机器就行了。硬件,操做系统,运行环境什么的都不须要考虑了。

而且还能够经过Docker容器,整个开发、测试和生产环境能够保持高度的一致。

与VM不一样

能够发现Docker容器功能和 VM 相似,那为啥不直接用 VM 而还要整出个容器这么个概念来呢?

由于相比于 VM Docker提供了轻量级的虚拟化,它几乎没有任何额外开销。对好比下:

项目 虚拟机 Docker
启动与中止 比启动windows快 快速启动中止,几秒内
占用资源 需正确解析合理分配 下降额外开销
耦合度 在硬件设施上运行各类不同的平台 可在不一样硬件设施和应用环境中使用
结构图 VM-structure Docker-structure

Docker 架构和组成

Docker 使用客户端-服务器(C/S)架构模式,使用远程API来管理和建立Docker容器。
Docker 容器经过 Docker 镜像来建立。

详细结构:

Docker-cs-structure
图片来源

一、用户是使用Docker Client与Docker Daemon创建通讯,并发送请求给后者。

二、Docker Daemon做为Docker架构中的主体部分,提供Server的功能使其能够接受Docker Client的请求;而后Engine执行Docker内部的一系列工做,每一项工做都是以一个Job的形式的存在。

三、Job的运行过程当中,

a、当须要容器镜像时,则从Docker Registry中下载镜像,并经过镜像管理驱动graphdriver将下载镜像以Graph的形式存储;

b、当须要为Docker建立网络环境时,经过网络管理驱动networkdriver建立并配置Docker容器网络环境;

c、当须要限制Docker容器运行资源或执行用户指令等操做时,则经过execdriver来完成。

四、libcontainer是一项独立的容器管理包,networkdriver以及execdriver都是经过libcontainer来实现具体对容器进行的操做。

五、当执行完运行容器的命令后,一个实际的Docker容器就处于运行状态,该容器拥有独立的文件系统,独立而且安全的运行环境等。
详细内容见Docker 架构

Docker 内部

Docker 内部构建,须要理解如下三种部件:

  • Docker 镜像 - Docker images

  • Docker 仓库 - Docker registeries

  • Docker 容器 - Docker containers

Docker 镜像

Docker 镜像是 Docker 容器运行时的只读模板,每个镜像由一系列的层 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。
当你改变了一个 Docker 镜像,好比升级到某个程序到新的版本,一个新的层会被建立。
所以,不用替换整个原先的镜像或者从新创建(在使用虚拟机的时候你可能会这么作),只是一个新的层被添加或升级了。如今你不用从新发布整个镜像,只须要升级,层使得分发 Docker 镜像变得简单和快速。

Docker 仓库

Docker 仓库用来保存镜像,能够理解为代码控制中的代码仓库。Docker 仓库分为公有和私有。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像能够是本身建立,或者在别人的镜像基础上建立。Docker 仓库是 Docker 的分发部分。

Docker Hub 是一个用于分享、管理 Docker 容器的 Docker SaaS 平台。由Docker公司负责维护的公共注册中心,包含超过15,000个可用来下载和构建容器的镜像,并提供认证、工做组结构、工做流工具(好比webhooks)、构建触发器以及私有工具。

Docker 容器

Docker 容器和文件夹很相似,一个Docker容器包含了全部的某个应用运行所须要的环境。每个 Docker 容器都是从 Docker 镜像建立的。Docker 容器能够运行、开始、中止、移动和删除。每个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

下面用一张图来介绍各部件使用规则:
docker-
图片来源google搜索

Docker 安装

ubuntu 系列安装Docker Engine
参考 官方安装文档

一、安装

$ sudo apt-get install -y docker.io

验证docker是否安装成功

二、验证

sudo docker run hello-world

显示
Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new Container from that image which runs the executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

三、配置(可选)

  • 建立 Docker 用户组

  • 调整内存和交换空间(swap accounting)

  • 启用防火墙的端口转发(UFW)

  • 为 Docker 配置DNS服务

结束语

本文主要结合工做上的需求对docker的作简单介绍,详情能够参阅下面给出的参考连接,下一章节将会介绍DockerFile 编写,以及docker命令。

版权声明:本文为博主ray原创文章,未经博主容许不得转载。

我的博客连接:http://wxinray.com/server/Docker-introduction

参考资料

相关文章
相关标签/搜索