一、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. 2020/4/26 大数据的zookeeper分布式安装

    大数据的zookeeper分布式安装 **** 前面的文章已经提到Hadoop的伪分布式安装.现在就在原有的基础上安装zookeeper. 首先启动Hadoop平台 [root@master ~]# ...

  2. 蒲公英 · JELLY技术周刊 Vol.03

    蒲公英 · JELLY技术周刊 Vol.03 「蒲公英」期刊全新升级--JELLY技术周刊!深度挖掘业界热点动态,来自团队大咖的专业点评,带你深入了解团队研究的技术方向. 登高远眺 天高地迥,觉宇宙之 ...

  3. 虚拟机 VMware Workstation Pro 15.5.0 及永久激活密钥

    虚拟机 VMware Workstation Pro 15.5.0 及永久激活密钥 虚拟机下载地址:https://download3.vmware.com/software/wkst/file/VM ...

  4. linux rpm包

    rpm包,软件包,程序包,以.rpm结尾的包 我们刚开始安装的Linux系统是最小化安装(minimol),只安装系统,不安装不必要的软件包 刚开始vim,ifconfig,tree等命令都没有,当然 ...

  5. Java中的集合Queue

    2019独角兽企业重金招聘Python工程师标准>>> package com.zhaogang.test; import org.junit.Test; import java.u ...

  6. apache调优技巧之一隐藏apahce版本信息

    如果你的服务器版本信息是这样的,是很 危险的. [root@xinsz63 httpd-2.2.27]# curl -I 192.168.1.38 HTTP/1.1 403 Forbidden Dat ...

  7. Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?

    Redis 6.0.1 于 2020 年 5 月 2 日正式发布了,如 Redis 作者 antirez 所说,这是迄今为止最"企业"化的版本,也是有史以来改动最大的一个 Redi ...

  8. Apache2.4 根目录修改

    需要修改两个地方: 1.httpd.conf 中的 DocumentRoot 项 和 Directory 项 2.httpd-vhosts.conf 中的 DocumentRoot 项 网上找到的大部 ...

  9. 轻量化模型:MobileNet v2

    MobileNet v2 论文链接:https://arxiv.org/abs/1801.04381 MobileNet v2是对MobileNet v1的改进,也是一个轻量化模型. 关于Mobile ...

  10. 网络流中的图像转化为OpenCV中的Mat类型

    1,从网络中读取到的图像流,不支持查找,不能直接转化为Mat类型 2,例子如下: string Url = "http://192.168.0.110/cgi-bin/camera?reso ...