一、docker是什么?

Docker是一个为开发人员和系统管理员提供分布式应用程序的开放平台。它是一个开源的容器引擎,基于Go语言并遵从Apche2.0协议开源。

功能:Docker可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,从而实现虚拟化。

机制:沙箱机制,相互之间不会有接口,更重要的是容器开销极低。

下面的图片比较了Docker和传统虚拟化方式的不同之处,可见容器技术直接复用本地主机的操作系统,和宿主机共享硬件资源及操作系统,实现资源的动态分布,而传统方式则是在硬件层面实现。

二、为什么要用docker?

ü 更快速的交付和部署

ü 更高效的虚拟化

ü 更轻松的迁移和扩展

ü 更简单的管理

特性

容器

虚拟机

启动

秒级

分钟级

硬盘使用

一般为MB

一般为GB

性能

接近原生

弱于

系统支持量

上千个

几十个

docker 需要的资源更少, docker 在操作系统级别进行虚拟化, docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化

docker 更轻量, docker 的架构可以共用一个内核与共享应用程序库,所占内存极小。

三、Docker的三个基本概念

镜像(Image)

容器(Container)

仓库(Repository

镜像:它是一个只读的模板,不包含任何动态数据,其内容在构建之后也不会改变。

多个只读层重叠在一起,除了最下面一层,其它层都会有一个指针指向下一层。统一文件系统 (union file system) 技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。

容器:和镜像类似,唯一的区别在于容器的最上面那一层是可读写的。可理解为容器=镜像+可读写层

仓库:集中存放镜像文件的场所。通常,一个仓库包含同一个软件不同版本的镜像,而标签常用语对应软件的各个版本。

四、Docker架构概览

上图展示了Docker客户端、服务端和Docker仓库,默认情况下Docker会在Docker中央仓库中寻找镜像,这种利用仓库管理镜像的设计概念类似于Git。

Docker采用C/S架构,Docker deamon作为服务器接收来自客户端请求,并处理这些请求,比如创建容器、管理镜像。目前,Docker容器运行已经不是简单的通过Docker deamon来启动,而是集成了containerd和runc等多个组件。

v Containerd:是一个简单的守护进程,管理shim,向Docker Engine提供接口。使用UnixSocket通信,协议是grpc。

v Shim:管理一个容器

v RunC:运行一个容器,直接与容器多以来的cgroups/kernel等进行交互,负责容器所需环境。

工作流程:

dockerd拿到镜像后,通过grpc通知docker-containerd进程启动容器,docker-containerd收到dockerd启动容器请求之后,再启动docker-containerd-shim进程,docker-containerd-shim进程启动后,按照runtime准备运行环境,再启动docker-runc进程。docker-runc进程打开容器的配置文件,找到rootfs位置,根据配置文件启动相应进程。

五、Docker镜像的制作

制作镜像主要有两种方式,第一种使用commit命令,第二种使用dockerfile制作。

  1. 利用commit方式制作docker镜像,此步骤和git提交代码类似。

u 使用docker pull命令从仓库获取所需要的镜像到本地

命令:docker pull [options] <dir_name>.<realm_name>:<tag>

Options说明:

-a 拉取所有tagged镜像

--disable-content-trust 忽略镜像的校验,默认开启

如:$docker pull ubuntu:12.04或者 docker pull docker hub xxx:v1

u 使用该镜像创建一个容器

命令:docker run [options] image [command]

实例:docker run --privileged --name=huangyu --net=host -it -v ~:/share docker hub xxx:v1

冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。

Options说明:

--privileged 容器内的root拥有真正的root权限

--name 容器名称

--net=xxx 容器网络设置,xxx可以有以下几种形式

bridge //使用docker deamon指定的网桥

host //容器使用主机的网络

container:name_or_id //使用其他容器的网络,共享ip和port等网络资源

none //容器使用自己的网络,类似bridge,但是不进行配置

-i //打开STDIN,用于控制台交互

-t //分配一个伪终端或终端绑定到容器上

-v //给容器挂在存储卷,挂在到容器的某个目录

其他参数详解请参考:https://www.cnblogs.com/yfalcon/p/9044246.html

u 使用上述容器安装需要的应用

使用apt命令安装应用程序和环境,如安装python软件,apt install python在安装主软件的同时优先进行依赖包的安装否则无法安装主软件,可使用:apt -f install xxx

commit容器创建镜像到本地

命令:docker commit [options] container ID <repository>:<tag>

Options说明:

-a //提交的镜像作者

-m //提交时的说明文字

-p //在commit时,将容器暂停

docker commit -a “huangyu” -m “web_ci_test” 123456789Ac huangyu_web:20191230

u 修改本地镜像的repository和tag名称(镜像重命名):

命令:docker tag <image id> <new repository>:<new tag>

实例:docker tag 123456789Ac xxxxx-xxx-docker.xxx.com.cn/webci/huangyu_web:20191230

xxxxx-xxx-docker为推送到网络上的文件名

xxx.com.cn为网络网址

webci/huangyu_we为xxxxx-xxx-docker下新建文件夹名称

将本地文件push到制品库

命令:docker pull [options] <dir_name>.<realm_name>:tag

Options说明:

--disable-content-trust:忽略镜像的校验,默认开启

实例:docker push xxxxx-xxx-docker.xxx.com.cn/webci/huangyu_web:20191230

u Docker常用命令

docker images 显示本地已有的所有镜像

docker ps 显示在运行状态的容器

docker ps -a可查看所有容器,包括终止状态的

docker ps -a|grep huangyu 可筛选容器名称以huangyu开头的容器

docker logs 获取容器的输出信息

docker start 直接将一个已经终止的容器启动运行

docker stop 终止一个运行中的容器

docker restart 将一个运行态的容器终止,然后再重新启动

docker save导出镜像到本地文件

docker export导出本地某个容器

docker import从容器快照文件中再导入为镜像

docker load从导出的本地文件中再导入到本地镜像库

docker rmi删除镜像

docker rm 删除容器

注意:在删除镜像之前,先用docker rm删除依赖于这个镜像的所有容器

dockerfile方式制作容器的方法后面会在下一篇讲解

Docker之commit制作镜像的更多相关文章

  1. WIN7安装Docker Toolbox、制作镜像并发到阿里云

    一.安装Docker Toolbox,并配置国内源加速 WIndows7不支持Hyper-v,所以只能采用Docker Toolbox的方式使用Docker.传送门:http://mirrors.al ...

  2. Docker 0x05: Dockerfile制作镜像

    目录 Dockerfile制作镜像 一句话什么是dockerfile dockerfile脚本指令 小结 Dockerfile制作镜像 dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本 ...

  3. Docker之Alpine制作镜像且上传至阿里云

    目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Lin ...

  4. docker commit 制作镜像

    docker commit -m="commit jdk" --author="gutianlangyu" ae56f6cad215 gutianlangyu/ ...

  5. Docker:手动制作镜像 [五]

    一.制作docker镜像的步骤 1.启动容器安装软件服务 2.将安装好服务的容器commit提交为镜像 3:.启动新容器来测试新提交的镜像 二.制作支持ssh远程登录的docker镜像 1.启动容器安 ...

  6. Docker笔记——Docker安装及制作镜像

    1 Docker安装本文中Docker运行环境为Ubuntu 14.04.1 LTS 3.13.0-32-generic x64参考:https://docs.docker.com/v1.11/eng ...

  7. Docker --Dockerfile(制作镜像)

    Dockerfile Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像 Dockerfile 常用指令 FROM 作用:指定基础镜像,Docke ...

  8. Docker学习笔记-CentOS7镜像

    前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 sudo docker run --priv ...

  9. Docker上定制CentOS7镜像

    原文:Docker上定制CentOS7镜像 前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 ...

随机推荐

  1. 推荐web前端框架bootstrap

    bootstrap是基于Jquery而开发的一个前端框架. 全中文的学习网站:http://www.runoob.com/bootstrap/bootstrap-tutorial.html 实际上就是 ...

  2. xhprof windows下安装和使用(转载)

    1.使用5.3.3以上的php版本,或者直接下载wamp2.1集成环境. 2.下载xhprof for windows版本,地址:http://www.benjamin-carl.de/?downlo ...

  3. xpath进阶用法

    一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外xpath中还存在着非常之多的进阶用法,本文将对 ...

  4. thinkphp5 input坑

    取值方式改了而已?a1=1&a2=2这种可以用input(get.) a1/1/a2/2 用input('a1')和input('a2') post方法当然是input('post.') 我觉 ...

  5. MySQL系列(三)

    本章内容: 视图.增/删/改/查 触发器.增/删/改/查 存储过程.增/删/改/查 存储过程三种传参,pymysql 怎么用? 函数.增/删/改/查/return值 内置函数 事务 1.1视图 视图是 ...

  6. OpenCV学习(1)——初步接触

    一.介绍OpenCV           OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开 ...

  7. Spring5参考指南:Bean的生命周期管理

    文章目录 Spring Bean 的生命周期回调 总结生命周期机制 startup和Shutdown回调 优雅的关闭Spring IoC容器 Spring Bean 的生命周期回调 Spring中的B ...

  8. DeepWalk论文精读:(1)解决问题&相关工作

    模块1 1. 研究背景 随着互联网的发展,社交网络逐渐复杂化.多元化.在一个社交网络中,充斥着不同类型的用户,用户间产生各式各样的互动联系,形成大小不一的社群.为了对社交网络进行研究分析,需要将网络中 ...

  9. 图论--树的重心(DFS) 模板

    const int maxn=500005; int tot=0,n; int ans,size; int sx[maxn],head[maxn]; int vis[maxn]; struct edg ...

  10. 怎么避免写出慢SQL

    在大多数实际的系统中,慢 SQL 消耗掉的数据库资源,往往是正常 SQL 的几倍.几十倍甚至几百倍. 怎样才能在开发阶段尽量避免写出慢 SQL 呢? 估算数据量 慢 SQL 对数据库的影响,是一个量变 ...