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的容器 ...
随机推荐
- 推荐web前端框架bootstrap
bootstrap是基于Jquery而开发的一个前端框架. 全中文的学习网站:http://www.runoob.com/bootstrap/bootstrap-tutorial.html 实际上就是 ...
- xhprof windows下安装和使用(转载)
1.使用5.3.3以上的php版本,或者直接下载wamp2.1集成环境. 2.下载xhprof for windows版本,地址:http://www.benjamin-carl.de/?downlo ...
- xpath进阶用法
一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外xpath中还存在着非常之多的进阶用法,本文将对 ...
- thinkphp5 input坑
取值方式改了而已?a1=1&a2=2这种可以用input(get.) a1/1/a2/2 用input('a1')和input('a2') post方法当然是input('post.') 我觉 ...
- MySQL系列(三)
本章内容: 视图.增/删/改/查 触发器.增/删/改/查 存储过程.增/删/改/查 存储过程三种传参,pymysql 怎么用? 函数.增/删/改/查/return值 内置函数 事务 1.1视图 视图是 ...
- OpenCV学习(1)——初步接触
一.介绍OpenCV OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开 ...
- Spring5参考指南:Bean的生命周期管理
文章目录 Spring Bean 的生命周期回调 总结生命周期机制 startup和Shutdown回调 优雅的关闭Spring IoC容器 Spring Bean 的生命周期回调 Spring中的B ...
- DeepWalk论文精读:(1)解决问题&相关工作
模块1 1. 研究背景 随着互联网的发展,社交网络逐渐复杂化.多元化.在一个社交网络中,充斥着不同类型的用户,用户间产生各式各样的互动联系,形成大小不一的社群.为了对社交网络进行研究分析,需要将网络中 ...
- 图论--树的重心(DFS) 模板
const int maxn=500005; int tot=0,n; int ans,size; int sx[maxn],head[maxn]; int vis[maxn]; struct edg ...
- 怎么避免写出慢SQL
在大多数实际的系统中,慢 SQL 消耗掉的数据库资源,往往是正常 SQL 的几倍.几十倍甚至几百倍. 怎样才能在开发阶段尽量避免写出慢 SQL 呢? 估算数据量 慢 SQL 对数据库的影响,是一个量变 ...