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的容器 ...
随机推荐
- 2020/4/26 大数据的zookeeper分布式安装
大数据的zookeeper分布式安装 **** 前面的文章已经提到Hadoop的伪分布式安装.现在就在原有的基础上安装zookeeper. 首先启动Hadoop平台 [root@master ~]# ...
- 蒲公英 · JELLY技术周刊 Vol.03
蒲公英 · JELLY技术周刊 Vol.03 「蒲公英」期刊全新升级--JELLY技术周刊!深度挖掘业界热点动态,来自团队大咖的专业点评,带你深入了解团队研究的技术方向. 登高远眺 天高地迥,觉宇宙之 ...
- 虚拟机 VMware Workstation Pro 15.5.0 及永久激活密钥
虚拟机 VMware Workstation Pro 15.5.0 及永久激活密钥 虚拟机下载地址:https://download3.vmware.com/software/wkst/file/VM ...
- linux rpm包
rpm包,软件包,程序包,以.rpm结尾的包 我们刚开始安装的Linux系统是最小化安装(minimol),只安装系统,不安装不必要的软件包 刚开始vim,ifconfig,tree等命令都没有,当然 ...
- Java中的集合Queue
2019独角兽企业重金招聘Python工程师标准>>> package com.zhaogang.test; import org.junit.Test; import java.u ...
- apache调优技巧之一隐藏apahce版本信息
如果你的服务器版本信息是这样的,是很 危险的. [root@xinsz63 httpd-2.2.27]# curl -I 192.168.1.38 HTTP/1.1 403 Forbidden Dat ...
- Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?
Redis 6.0.1 于 2020 年 5 月 2 日正式发布了,如 Redis 作者 antirez 所说,这是迄今为止最"企业"化的版本,也是有史以来改动最大的一个 Redi ...
- Apache2.4 根目录修改
需要修改两个地方: 1.httpd.conf 中的 DocumentRoot 项 和 Directory 项 2.httpd-vhosts.conf 中的 DocumentRoot 项 网上找到的大部 ...
- 轻量化模型:MobileNet v2
MobileNet v2 论文链接:https://arxiv.org/abs/1801.04381 MobileNet v2是对MobileNet v1的改进,也是一个轻量化模型. 关于Mobile ...
- 网络流中的图像转化为OpenCV中的Mat类型
1,从网络中读取到的图像流,不支持查找,不能直接转化为Mat类型 2,例子如下: string Url = "http://192.168.0.110/cgi-bin/camera?reso ...