简单介绍Docker构建镜像的三种方式

您所在的位置:网站首页 docker镜像发布 简单介绍Docker构建镜像的三种方式

简单介绍Docker构建镜像的三种方式

2022-11-04 15:04| 来源: 网络整理| 查看: 265

导读 本篇文章将讲述有关docker构建镜像的具体操作。本文将从docker构建镜像的方式入手,逐一讲述。

构建镜像的三种方式:

Dockerfile 基于已有的镜像容器进行创建 基于本地模板创建

首先,我们为什么需要构建docker镜像?只有明白了这个问题,我们才知道构建docker镜像的意义或者说价值是什么。

答案其实很简单:docker镜像是docker的三大核心之一,也是应用发布的标准格式,一个完整的docker镜像可以支持一个docker容器的运行。我们在容器进行相关的操作,例如安装应用服务,假设某个业务的需求恰好需要方才安装配置好的应用服务,我们就可以将环境以及搭建的服务生成新的镜像提供出去。

下面我们来具体看看这三种方式的构建手法。

基于Dockerfile构建镜像 什么是Dockerfile?

​ Dockerfile构建镜像的方式就目前而言是使用最为广泛的,这是一种可以自动化生成镜像的一种方式,就类似shell脚本一样,一个脚本执行完就可以将一个服务安装配置好,支持正常使用了。Dockerfile也是一样,也是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,Docker程序将通过读取Dockerfile中的指令最终生成镜像。

​ Dockerfile可以认为是一个普通文件,其结构大致分为四个部分:基础镜像信息、维护者信息、镜像操作指令以及容器启动时执行指令。并且在Dockerfile中支持以“#”开头的注释。

Docker镜像的分层 Dockerfile中的每个指令都会创建一个新的镜像层 镜像层将被缓存和复用 当Dockerfile的指令被修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效 某一层的镜像缓存失效后,其之后的镜像层缓存都会随之失效 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除则镜像中依然会包含该文件 Dockerfile编写规则

Dockerfile中是基于其指令进行编写的,其规则可以参考下面的表格,当然,在编写Dockerfile时,其格式是需要严格遵循的:

除注释外,第一行必须使用FROM指令所基于的镜像名称;之后使用MAINTAINER指明维护信息;然后就是一系列镜像操作指令,如RUN、 ADD等;最后便是CMD指令来指定启动容器时要运行的命令操作。其中RUN指令可以使用多条,CMD只有最后一条可以生效!

​本文主要是讲述docker构建镜像的三种方式,Dockerfile的构建具体过程笔者将在之后的文章中通过各种实际案例来讲述演示,本文暂时给出一个Dockerfile文件的例子给大家参考。

[root@localhost ~]# cat Dockerfile #务必先指明基于的基础镜像 FORM CentOS:7 #维护该镜像的用户信息(自定义) MAINTAINER [email protected] #镜像操作命令 RUN yum -y update RUN yum -y install openssh-server RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key #开启端口 EXPOSE 22 #启动容器时执行指令 CMD ["/usr/sbin/sshd","-D"] 基于已有镜像构建镜像

上述的Dockerfile的构建镜像的方式是自动化进行的,那么手动构建的方式就是剩下的两种了。

基于已有的镜像构建主要是通过docker commit 命令来构建新的镜像,其实质就是将一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。

docker commit的语法规则及可选项介绍 Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] Create a new image from a container's changes Options: -a, --author string Author (e.g., "John Hannibal Smith ")#作者信息 -c, --change list Apply Dockerfile instruction to the created image -m, --message string Commit message #说明信息 -p, --pause Pause container during commit (default true) #生成过程中停止容器的运行

案例:基于原有镜像构建新的镜像(看实质原理)

1.创建一个容器 [root@localhost ~]# docker create -it nginx /bin/bash Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 123275d6e508: Pull complete 6cd6a943ce27: Pull complete a50b5ac4a7fb: Pull complete Digest: sha256:d81f010955749350ef31a119fb94b180fde8b2f157da351ff5667ae037968b28 Status: Downloaded newer image for nginx:latest fb9a4cdb1b79a5e4d82177afdbe8c1f1956888733979f15ae562e0013f4e0f29 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fb9a4cdb1b79 nginx "/bin/bash" 17 seconds ago Created vibrant_heisenberg 2.基于该容器使用docker commit 命令创建新的镜像 [root@localhost ~]# docker commit -m new_image -a lokott fb9a4cdb1b79 lokott:demo sha256:bb848fe7eb3655a07e6577e05bc04ab6404549a24c49fa5d3161ceb767a048f2 [root@localhost ~]# docker images | grep lokott lokott demo bb848fe7eb36 26 seconds ago 127MB 基于本地模板构建镜像

该方式是通过导入操作系统模板文件生成镜像,模板可以从OPENVZ开源项目下载,下载地址为:http://openvz.org/Download/template/precreated

下面直接给出例子——将debian模板压缩包导入为本地镜像

[root@localhost ~]# ls anaconda-ks.cfg docker.sh 公共 视频 文档 音乐 debian-7.0-x86-minimal.tar.gz initial-setup-ks.cfg 模板 图片 下载 桌面 [root@localhost ~]# cat debian-7.0-x86-minimal.tar.gz | docker import - lokott:new sha256:df2ce16066413515db7db8a76243fcaebbd904d10304ab467fefde852dddd9a8 [root@localhost ~]# docker images | grep new lokott new df2ce1606641 14 seconds ago 215MB

本文讲述了docker构建镜像的三种方式,最重要的是上述的第一种方式使用的非常多。

原文来自:https://www.linuxidc.com/Linux/2020-04/163008.htm

本文地址:https://www.linuxprobe.com/docker-file.html编辑:public,审核员:逄增宝

Linux命令大全:https://www.linuxcool.com/

Linux系统大全:https://www.linuxdown.com/

红帽认证RHCE考试心得:https://www.rhce.net/

为您推荐一些与本文相关的文章:Ubuntu 和 CentOS, 谁更适合做服务器?如何正确处理从本地到云端的数据?在选择服务器配置前,应该注意那几点。《CentOS.5系统管理》 pdf电子书免费下载Linux 系统中通过用户组管理用户!Linux常用检测性能的10个基本命令《NoSQL数据库入门与实践》pdf电子书免费下载《MySQL管理之道:性能调优、高可用与监控》pdf电子书免费下载京东侧目!苏宁晒2018战绩:逆势大涨40%《Python编程无师自通》pdf版电子书免费下载 相关文章[点此投稿] 耗时数小时,‘Not in’ SQL 优化 耗时数小时,‘Not in’ SQL 优化 2017-10-07 0 个评论 什么是以太坊?它到底怎么运作的? 什么是以太坊?它到底怎么运作的? 2022-03-18 0 个评论 使用 fail2ban 防御 SSH 服务器的暴力破解 使用 fail2ban 防御 SSH 服务器的暴力破解 2017-11-15 0 个评论 使用grep搜索多个字符串 使用grep搜索多个字符串 2020-05-19 0 个评论 简单介绍.Net性能测试框架Crank的使用方法 简单介绍.Net性能测试框架Crank的使用方法 2021-12-03 0 个评论

转载必需保留本文链接: https://www.linuxprobe.com/docker-file.html

红帽RHCE认证:https://www.rhce.net

Linux命令大全:https://www.linuxcool.com

Linux系统大全:https://www.linuxdown.com

本文依据CC-BY-NC-SA 3.0协议发布,竭诚为读者提供Linux视频教程、Linux学习资料以及红帽考试资料等优质学习资源。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3