Docker之commit制作镜像
一、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制作。
- 利用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制作镜像的更多相关文章
- WIN7安装Docker Toolbox、制作镜像并发到阿里云
一.安装Docker Toolbox,并配置国内源加速 WIndows7不支持Hyper-v,所以只能采用Docker Toolbox的方式使用Docker.传送门:http://mirrors.al ...
- Docker 0x05: Dockerfile制作镜像
目录 Dockerfile制作镜像 一句话什么是dockerfile dockerfile脚本指令 小结 Dockerfile制作镜像 dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本 ...
- Docker之Alpine制作镜像且上传至阿里云
目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Lin ...
- docker commit 制作镜像
docker commit -m="commit jdk" --author="gutianlangyu" ae56f6cad215 gutianlangyu/ ...
- Docker:手动制作镜像 [五]
一.制作docker镜像的步骤 1.启动容器安装软件服务 2.将安装好服务的容器commit提交为镜像 3:.启动新容器来测试新提交的镜像 二.制作支持ssh远程登录的docker镜像 1.启动容器安 ...
- Docker笔记——Docker安装及制作镜像
1 Docker安装本文中Docker运行环境为Ubuntu 14.04.1 LTS 3.13.0-32-generic x64参考:https://docs.docker.com/v1.11/eng ...
- Docker --Dockerfile(制作镜像)
Dockerfile Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像 Dockerfile 常用指令 FROM 作用:指定基础镜像,Docke ...
- Docker学习笔记-CentOS7镜像
前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 sudo docker run --priv ...
- Docker上定制CentOS7镜像
原文:Docker上定制CentOS7镜像 前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 ...
随机推荐
- JasperReports入门教程(四):多数据源
JasperReports入门教程(四):多数据源 背景 在报表使用中,一个页面需要打印多个表格,每个表格分别使用不同的数据源是很常见的一个需求.假如我们现在有一个需求如下:需要在一个报表同时打印所有 ...
- 萌新带你开车上p站(番外篇)
本文由“合天智汇”公众号首发,作者:萌新 前言 这道题目应该是pwnable.kr上Toddler's Bottle最难的题目了,涉及到相对比较难的堆利用的问题,所以拿出来分析. 登录 看看源程序 程 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第三周作业
<Linux内核原理与分析>第三周作业 一.上周问题总结: 第二周头脑风暴完成较慢 虚拟机libc配置错误 书本知识使用不够熟练 二.本周学习内容: 1.实验楼环境虚拟一个x86的CPU硬 ...
- java 8中 predicate chain的使用
目录 简介 基本使用 使用多个Filter 使用复合Predicate 组合Predicate Predicate的集合操作 总结 java 8中 predicate chain的使用 简介 Pred ...
- KVM虚拟化平台环境部署
一:安装依赖包 二:配置网卡 三:配置环境 实验环境: KVM01 192.168.200.10 关闭防火墙及相关的安全机制 [root@KVM01 ~]# systemctl stop fire ...
- vue2.x学习笔记(三十一)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12683075.html. 安全 现在的企业都比较在意信息系统的安全问题,在使用vue的过程中也要注意这一点. 报告 ...
- QQ网站的源代码
链接:https://pan.baidu.com/s/1mqetTbauKTI0KJOaU8wW5A 提取码请加QQ:2669803073获取 声明:仅供学习,切勿用于其他用途
- 12c DG broker DMON自动重启过程分析
一.知识点 1.强烈建议大家管理dataguard使用broker. 2.broker的日志要知道在哪里,会看日志是学习的第一步. 3.体系结构需要看官方文档. 二.测试过程 1.查看DMON进程 & ...
- Java 类类型之 String 类型
类类型 引用数据类型存的都是地址,通过地址指向对象: 基本数据类型存的都是具体值: 字符串 (String) 类型 特点: 1.字符创都是对象: 2.一旦初始化,不能被更改,字符串缓冲区支持可变的字符 ...
- 题目分享P
题意: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作.当一方操作时,他们需要先选择一个不为根的 ...