码迷,mamicode.com
首页 > 其他好文 > 详细

【总结】docker

时间:2020-10-12 20:48:07      阅读:40      评论:0      收藏:0      [点我收藏+]

标签:training   docker   目标   doc   启动   bee   客户端   服务端   客户   

1 docker概述

1.1 docker简介

Docker目标是实现轻量级的操作系统虚拟化解决方案。比虚拟机更轻量级。

虚拟机可以理解成一栋楼里的一个个房间(共享花园基地等),而docker可以理解成房间里的一个个胶囊卧室(共享wifi,厕所),隔离层次比较低。

虚拟机就是硬件的虚拟化,不共享操作系统内核。所以,开启关闭一个虚拟机是很费劲的,就等于重新起一台服务器那么费劲,而docer共享操作系统,一个容器就是个特殊的进程,所以启动很快

1.2 docker组件

1.2.1 客户端:dockerclient 服务端:dockerserver

Docker 是一个客户端、服务端(C/S)架构的程序。Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。Docker守护进程有时也称为Docker引擎。Docker提供了一个命令行工具docker以及一整套RESTful API来与守护进程交互。

1.2.2 docker镜像

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变

1.2.3 Registry 仓库

Docker用Registry来保存用户构建的镜像。Register分为公共和私有两种。Docker公司运营的公共Registry叫做Docker Hub。用户可以在Docker Hub注册账户,分享并保持自己的镜像。用户也可以在Docker Hub上保存自己的私有镜像

1.2.4 容器

Docker 可以帮用户构建和部署容器,用户只需把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或者多个进程。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或执行阶段。

2 image镜像

2.1 介绍

在 Docker 的术语里,一个只读层被称为镜像,一个镜像是永久不会变的。
由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。 但是所有的变更都发生顶层的可写层,而下层的原始的只读镜像文件并未变化。由于镜像不 可写,所以镜像是无状态的

2.1.1 父镜像

每一个镜像都可能依赖于由一个或多个下层的组成的另一个镜像。我们有时说,下层那个 镜像是上层镜像的父镜像。

2.1.2 基础镜像

一个没有任何父镜像的镜像,谓之基础镜像。

2.1.3 镜像id

所有镜像都是通过一个 64 位十六进制字符串 (内部是一个 256 bit 的值)来标识的。 为简化使用,前 12 个字符可以组成一个短ID,可以在命令行中使用。短ID还是有一定的 碰撞机率,所以服务器总是返回长ID

2.2 获取镜像

Docker pull:从仓库获取需要的镜像

sudo docker pull ubuntu:12.04

该命令实际上相当于 $ sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像
有时候官方仓库注册服务器下载较慢,可以从其他仓库下载。 从其它仓库下载时需要指定完整的仓库注册服务器地址。例如

sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04

2.3 列出本地镜像

docker images 显示本地已有的镜像

sudo docker images

2.4 创建镜像

2.4.1 使用dockerfile来创建镜像

(1)docker build来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令,新建一个目录和一个 Dockerfile。

$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile

(2)Dockerfile 中每一条指令都创建镜像的一层,例如:

FROM ubuntu:14.04
MAINTAINER Docker Newbee <newbee@docker.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra

使用#来注释
FROM 指令告诉 Docker 使用哪个镜像作为基础
接着是维护者的信息
RUN开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件
编写完成 Dockerfile 后可以使用 docker build 来生成镜像。

$ sudo docker build -t="ouruser/sinatra:v2" .

其中 -t 标记来添加 tag,指定新的镜像的用户信息。 “.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。

可以看到 build 进程在执行操作。它要做的第一件事情就是上传这个 Dockerfile 内容,因为所有的操作都要依据 Dockerfile 来进行。 然后,Dockfile 中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的 docker commit 一样)。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有的中间步骤所产生的容器都被删除和清理了。

*注意一个镜像不能超过 127 层

2.4.2 从本地文件系统导入镜像

要从本地文件系统导入一个镜像,可以使用 openvz(容器虚拟化的先锋技术)的模板来创建: openvz 的模板下载地址为 templates 。
比如,先下载了一个 ubuntu-14.04 的镜像,之后使用以下命令导入:

sudo cat ubuntu-14.04-x86_64-minimal.tar.gz  |docker import - ubuntu:14.04

2.4.3 上传镜像

用户可以通过 docker push 命令,把自己创建的镜像上传到仓库中来共享。例如,用户在 Docker Hub 上完成注册后,可以推送自己的镜像到仓库中。

sudo docker push ouruser/sinatra

2.4.4 存出和载入镜像

(1)如果要导出镜像到本地文件,可以使用 docker save 命令

sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

(2)可以使用 docker load 从导出的本地文件中再导入到本地镜像库

sudo docker load --input ubuntu_14.04.tar

(3)移除本地镜像
如果要移除本地的镜像,可以使用 docker rmi 命令。注意 docker rm 命令是移除容器

sudo docker rmi training/sinatra

【总结】docker

标签:training   docker   目标   doc   启动   bee   客户端   服务端   客户   

原文地址:https://www.cnblogs.com/muacheng/p/13804446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!