zoukankan      html  css  js  c++  java
  • Docker学习笔记

    本文对docker进行大致介绍,包括概述,安装,简单使用,架构,基本原理等方面

    1概述

    1.1什么是Docker?

    Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

    Docker的三个概念

    1. 镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
    2. 容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
    3. 仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

    1.2什么是Docker Engine?

    Docker Engine is a client-server application with these major components:

    • server which is a type of long-running program called a daemon process.
    • REST API which specifies interfaces that programs can use to talk to the daemon and instruct it what to do.
    • A command line interface (CLI) client.

    我觉得官网的解释很言简意赅,附上图(摘自官网)

    1.3Docker的用处

    • Faster delivery of your applications
    • Deploying and scaling more easily
    • Achieving higher density and running more workloads

    2安装

    安装参考Install Docker Engine

    2.1Ubuntu

    以ubuntu 14.04 为例,参考Installation on Ubuntu安装Docker engine

    这里列出重要的步骤:

    1. 更新apt源,包括添加证书,密钥等
    2. 用sudo apt-get安装
    3. 进一步配置,主要是创建docker用户组

    注 :如果输入docker info出问题,多半是权限问题,以sudo运行试试

    2.3Mac OS X

    Mac下安装参考Installation on Mac OS X

    Mac下有两种安装方式供选

    • Docker for Mac : Mac的原生应用,没有使用虚拟机(VirtualBox),而是使用的HyperKit
    • Docker Toolbox : 会安装虚拟机,使用docker-machine来运行boot2docker 和Docker Engine

    两者的区别请参考 Docker for Mac vs. Docker Toolbox

    3演示

    先不多说,跑起来体验下。具体的步骤和指令在Docker简明教程这篇文章已经写得很清楚了,在此不再赘述

    4架构和原理

    由上图可知,docker是一个client-server架构

    • The Docker daemon : 运行在主机上
    • The Docker client : 用户和dokcer daemon交互的接口

    docker的内部主要有三种资源/组件

    • docker images : build component,只可读
    • docker registries : distribution component,images共享库
    • docker containers : run component

    这里重点说说images and containers

    Docker使用union file systems 把不同的层(layer)做整合成单一的image. Union File System的中一种是AUFS,可以参考这篇博文

    官网文档对image的layers是这么描述的

    Each Docker image references a list of read-only layers that represent filesystem differences. Layers are stacked on top of each other to form a base for a container’s root filesystem

    新版docker(version>=1.10)的存储模型有变化

    Previously, image and layer data was referenced and stored using a randomly generated UUID. In the new model this is replaced by a secure content hash.

    而container和image的主要区别就在于top writable layer,所有对image的更改都保存在这一层。换句话说,多个container可以共享同一个image,这就大大节省了空间。实现image和container的管理有两个关键的技术:stackable image layers 和 copy-on-write (CoW).

    从图中可以看出,copy-on-write (CoW)是一个很好的策略,既节省了空间,又避免了因数据共享带来的写冲突问题,从而提高效率。

    结语

    本文主要对docker做简单介绍,对于一些更详细的知识,如docker file,volume,network,docker compose等等,会另写文章进行介绍。至于很具体的操作指令,比如怎么安装,怎么build image和run container来跑一个简单的docker hello world,请参考官方文档Docker Engine部分的“get started with docker”或者”learn by example”,也可参考文末的一些参考资料

    参考资料

  • 相关阅读:
    前端之CSS
    mysql数据库 -- Navicat、pycharm连接数据库
    mysql数据库之表查询
    mysql 数据库之表操作
    前端 HTML
    数据库设计(第一范式,第二范式,第三范式
    MySQL之锁、事务、优化、OLAP、OLTP
    MySQL之创建用户和授权
    MySQL之索引原理与慢查询优化
    MySQL之视图、触发器、事务、存储过程、函数
  • 原文地址:https://www.cnblogs.com/toone/p/6141725.html
Copyright © 2011-2022 走看看