【Docker学习总结】10.Docker-构建镜像

Docker入门流程(创建容器到构建镜像) Docker入门和运行ros系统 阅读详情

一、构建镜像的优点
●保存对容器的修改,并再次使用
●自定义镜像的能力
●以软件的形式打包并分发服务及其运行环境

也就是说,我们可以通过自定义的镜像,将服务和运行的系统以及其软件运行环境,通过镜像打包在一起,此时在其他运行Docker守护进程的主机上,都可以以这个镜像来运行容器,从而提供服务。
因此构建镜像是Docker中非常重要的一项技术。
 

二、如何在Docker中构建镜像

Docker提供了两种构建镜像的方式:
1、docker commit   通过容器构建
commit命令的具体格式如下:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

因为我们是通过容器来构建镜像的,所以它接受容器的名字作为主要参数。
comiit命令有以下三个选项:
-a, --author="" Author 用来指定作者的名字以及联系方式
-m, --message="" Commit message  用来记录镜像构建的信息
-p, --pause=true Pause container during commit 由于commit构建镜像时会将正在执行的容器暂停,所以-p参数可以指定commit命令不暂停正在执行的容器。
 

下面我们来看如何使用commit命令:

进入容器之后,安装Nginx:

依赖包:
yum install gcc-c++
 
yum install pcre pcre-devel
 
yum install zlib zlib-devel
 
yum install openssl-devel

正式安装:
cd /usr/local
 
yum -y install wget
 
wget http://nginx.org/download/nginx-1.7.4.tar.gz
 
tar -zxvf nginx-1.7.4.tar.gz
 
mkdir nginx
 
cd nginx-1.7.4
 
./configure --prefix=/usr/local/nginx
 
yum -y install gcc automake autoconf libtool make
 
make 
 
make install

ctrl+p ctrl+q退出容器。   

 

然后我们使用commit将其打包为镜像,-a和-m分别指定作者的信息和构建的信息。指定被打包的容器可以是名字,也可以是containerid。然后给镜像起名字,使用Dockerhub账户作为仓库名字,“commit_test_1”指定为镜像的名字:

docker commit -a 'jackzhucoder' -m 'nginx' commit_test jackzhucoder/commit_test_1

下面我们使用这个镜像来运行一个容器:

这里指定映射端口为80。-d指定该容器为守护式容器,然后使用bash进入容器的命令行,然后使用Ctrl+Q或Ctrl+P退出容器命令行,此时容器就在后台运行。
使用ps命令可以看到我们刚刚创建好,正在后台运行的容器:

我们使用attach重新进入这个容器,到/usr/local下面去看,可以看到之前安装好的nginx:

 

我们进入/usr/local/nginx下的sbin下,执行./nginx,来运行nginx:

然后连接刚刚我们映射的容器的80端口:

上面的演示,是为了告诉大家,由于我们将之前容器的修改保存到了镜像中,这样我们可以很容易的重复的执行这个镜像,提供同样的服务,不再是多个环境重复去安装同样的服务。

2、docker build    通过Dockerfile文件构建 
通过Dockerfile文件构建镜像,需要以下两步:
(1)创建Dockerfile
(2)使用docker build命令。

什么是Dockerfile文件?Dockerfile文件实际上就是包含了一系列命令的文本文件。下面显示的就是一个docker文件的例子:

#指定使用那个基础镜像
FROM centos
WORKDIR /usr/local/src
RUN yum install -y wget
RUN wget http://nginx.org/download/nginx-1.8.0.tar.gz
RUN tar -zxvf nginx-1.8.0.tar.gz
WORKDIR nginx-1.8.0
#安装nginx所依赖的包
RUN yum -y install gcc-c++
RUN yum -y install pcre pcre-devel
RUN yum -y install zlib zlib-devel
RUN yum -y install openssl openssl-devel libssl-dev
RUN ./configure
RUN make
RUN make install
EXPOSE 80

下面我们来演示如何使用dockerfile来构建镜像:

首先我们创建一个存放dockerfile的文件夹,在文件夹下创建一个Dockerfile文件,并使用vim编写该文件。文件内容如上面的例子:

然后我们就可以通过执行docker build的命令来构建镜像。docker build命令的具体格式如下:

docker build [OPTIONS] PATH | URL | -

--force-rm=false 设置镜像过程中是否删除中间容器
--no-cache=false 创建镜像的过程是否不使用缓存
--pull=false 是否尝试去更新镜像的新版本
-q, -quiet=false 安静模式,成功后只输出镜像 ID
--rm=true 设置镜像成功后删除中间容器
-t,--tag="" 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。


这里我们其他参数都默认,然后使用-t为镜像起一个名字“jackzhucoder/df_test1”,后面跟上dockerfile的地址,这里是当前文件夹,所以使用“.”即可:

我们使用images查看创建的镜像:

发现我们的相关镜像已经创建成功。然后我们启动一个容器,使用刚刚创建的镜像:

然后进入容器中,进入/usr/local/src下即可看见在镜像中安装的nginx: 

启动nginx:

然后使用curl连接80端口,成功返回nginx欢迎界面:

至此,我们使用不同的构建方式,构建出相似的镜像。而使用Dockerfile,完全可以使用写好的文件,通过自动化的方式来运行,这也是Dockerfile最重要的优势,也是Docker中构建镜像最重要的方式。

ARM架构Docker镜像构建-基础知识 介绍ARM版本的Docker镜像的构建,包括ARM机器上Docker的安装,在ARM机器上构建镜像,及在amd64机器上使用buildx交叉构建arm版本镜像。 前言 现在很多地方都对服务的国产化适配有所要求,一般的国产化平台都提供arm版本的linux云环境供我们进行服务部署,因此需要构建arm版本的镜像。 测试机信息 CPU FT-1500A 4核 arm64 内存 8G OS 麒麟V10 包管理器 apt ARM机器上安装Docker Docker官方文档 Docke 阅读详情

相关推荐

使用Maven构建项目Docker镜像

前言 在前面我们介绍了 Docker是什么?有什么优点?应用场景?_黄嚯嚯-优快云博客 Linux安装Docker步骤_黄嚯嚯-优快云博客 Docker配置使用阿里云加速镜像_黄嚯嚯-优快云博客 准备工作 创建一个基础项目工程 开始之前我们先准备一个Springboot的项目工程 , 就很普通就好 , 确保项目整正常启动即可! 配置 本次构建所使用到的插件是docker-maven-plugin , 该插件提供了两种不同的构建方式 , 两种方式外观差别体现在po...

黄嚯嚯 5559

ubutun安装 docker

# docker安装文档 ```sh $ sudo apt-get update $ sudo apt-get install \     apt-transport-https \     ca-certificates \     curl \     software-properties-common $ curl -fsSL https://download.docker.com/...

a289237642的博客 904

构建自己的docker基础镜像

构建一个完全定制的基础镜像意味着您需要从一个非常小的镜像(例如scratch镜像)开始,然后逐步添加您需要的所有内容。scratch镜像是一个空白的基础镜像,可以用来创建高度定制的容器环境。

lldhsds的专栏 2229

Dockerfile详解超全

Dockerfile详解环境介绍指令介绍FROMMAINTAINERLABELADDCOPYEXPOSEENV在Dockerfile中使用变量的方式RUNCMDRUN&&CMDENTRYPOINTVOLUMEUSERWORKDIRARGONBUILDSTOPSIGNALHEALTHCHECK 环境介绍 1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级...

Atlan_blog 8万+

10 个优化技巧,减少 Docker 镜像大小

Docker 是一种容器引擎,可以在容器内运行一段代码。Docker 镜像是在任何地方运行您的应用程序而无需担心应用程序依赖性的方式。要构建镜像,docker 使用一个名为 Dockerfile 的文件。Dockerfile 是一个包含许多指令(RUN、COPY、EXPOSE 等)的文件。成功执行这些命令后,docker 将创建一个镜像供我们在任何地方使用。

Cyufeng的博客 1155

手动构建自己的docker容器镜像实战

手动构建属于自己的镜像

低调,谦虚,自律,反思,成长,保持热爱,奔赴梦想 4775

Dockerfile文件全面详解(转自知乎,自留学习)

Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。 Dockerfile 是一个文本文档,其中包含了用户创建镜像的所有命令和说明。 一、 变量 变量用$variable_name或者${variable_name}表示 ${variable:-word}表示如果variable设置,则结果将是该值。如果variable未设置,word则将是结果。 ${variable:+word}表示如果variable设置则为word结果,否则为空字符串。 变量前加\可以转义成普...

firebedisable的专栏 481

docker:Fullstacks泊坞库

FullstacksJS Docker注册表 全栈泊坞窗映像。 fullstacksjs / lerna 带有预安装的lerna和入口点脚本的node映像,用于初始化和午餐monorepo项目。 环境变量: 名称 必需的 描述 工作空间 :check_mark: mornorepo中的工作空间目录在入口点用作CWD fullstacks.js /节点 具有用于开发环境的入口点脚本的node图像。

Docker 镜像的创建

如果在docker run时指定了命令或者镜像中有ENTRYPOINT,那么CMD就会被覆盖。CMD 可以为 ENTRYPOINT 指令提供默认参数。

这里没有简介 5434

WD西部数据2TB,2.5寸移动硬盘,因为磁头坏了,长时间通电导致划片划伤,维修过程通过反复更换磁头

WD西部数据2TB,2.5寸移动硬盘,因为磁头坏了,长时间通电导致划片划伤,维修过程通过反复更换磁头,才能利用专业设备,里面找到,镜像,把内容数据恢复出来。 1.说一下经历,借用的别人移动硬盘,去帮别人维修,拷数据出来,别人的文件,数据比较多,且复杂,而且是在PE系统,接口什么的是2.0,没有很好的思考就全选复制拷贝了; 2,拷贝的过程,极其慢,文件多,且文件有损坏,移动硬盘一直处于通电的状态,大概从下午,两点多开始100多G的数据,一直卡住,到,晚上7 。8点拷完还是没拷完。打开的时候就已经,就一直

weixin_43766920的博客 4303

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

Docker中构建深度学习环境

在Doecker中构建深度学习环境 参考博客:https://blog.csdn.net/ouening/article/details/105932177 1.安装nvidia-docker $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) $ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - $ curl -s -L https://nv

qq_36427732的博客 420

经纬度转换为UTM坐标

UTM(通用横向墨卡托投影): 是一种以米为单位的坐标系统,用于地图和GPS导航。将地球划分为60个纵向的区域。每个区域宽6度,从赤道开始往南北两级方向划分。每个区域都有一个特定的字母。

weixin_45626706的博客 7282

Docker 构建镜像(docker build)

版权所有,未经许可,禁止转载 章节Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container) Docker 容器操作 Docker 容器shell Docker Dockerfile Docker 构建镜像(docker build) Docker Dockerfile指令 Docker ...

吴吃辣 7万+

告别社区5级:一个脚本搞定小米/红米BL解锁的账号绑定限制(附资源下载与避坑指南)

本文提供了一种绕过小米/红米设备Bootloader解锁社区等级限制的技术方案,适用于MIUI 12.5-14和HyperOS 1.0系统。通过自动化脚本临时修改系统组件,用户可快速完成账号绑定和设备解锁流程,附详细操作指南和常见问题解决方案。

weixin_27330481的博客 736

C#串口通信从入门到精通(26)——多个串口多个线程发送数据和接收数据

本文介绍如何在多个串口下使用多线程进行发送和接收数据,由高级工程师多年经验总结而成,绝对是串口领域的实战经验!

qq_34059233的博客 8707

Docker构建镜像方法

通过本教程,你学会了如何通过Dockerfile构建自己的 Docker 镜像,并且学会了如何运行和管理容器。Docker 的强大之处在于它能够将环境和应用程序封装在一个镜像中,实现高度可移植性。

专注于Python编程技术的分享与交流,致力于帮助开发者提升编程技能,解决实际问题,探索Python的无限可能。 2862

opencode : 无法将“opencode“项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

opencode命令识别问题与openclawcodexgemini确保的路径在 PATH 中。这个知识对所有 npm 全局工具通用。

一键难忘的博客 4525

Docker 基于centos构建nginx镜像 构建MySQL镜像

三题Docker进阶的题目,能运用到之前学的docker基础命令,拉取docker镜像,使用Dockerfile文件构建镜像,Dockerfile常用指令,以后台运行的方式启动容器,以交互式的方式启动容器,docker build构建镜像,docker build -P分配端口,-d -it 等docker build参数,运用之前所学的基础命令做个总结。

运维派大星 5715

【DL经典回顾】距离度量大汇总(7-余弦距离(Cosine Distance))

余弦距离(Cosine Distance)衡量的是两个向量在方向上的差异性,而不是在大小上的差异。

悦学共鸣,温柔以待,汇聚光芒,共同成长 2580

华为OD机试双机位C卷-分披萨 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【分披萨】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试 - 分披萨。

qq_45776114的博客 1397

【提效】docker镜像构建优化-提速10倍

最近在开发python应用程序,在部署应用的时候发现构建镜像过程十分缓慢,极大影响开发效率。既然遇到了问题就不要逃避,而应该尝试解决一下。本文主要记录了自己通过查阅相关资料,一步步排查问题,最后通过优化Docerfile文件将docker镜像构建从十几分钟降低到1分钟左右,效率提高了10倍左右。

qq_24442273的博客 1701

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Docker构建自己的镜像及镜像仓库

Docker基础请参考上篇博文:总结 Docker学习(使用centos7-1804) 1. Docker构建镜像 有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像两种方式: 更新镜像:使用 docker commit 命令 构建镜像:使用 docker build 命令,需要创建Dockerfile文件 1.1 更新镜像 先使用基础镜像创建一个...

qqxhb 资源共享 2477

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Docker 镜像的构建

Dockerfile 参数详解

qq_46457076的博客 2881

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

如何构建自己的Docker镜像?

Docker镜像是由一系列只读层叠加而成的,这些层表示了Dockerfile中的每条指令。构建自己的Docker镜像主要涉及编写Dockerfile文件、使用命令进行构建,以及可选地将镜像推送到Docker镜像仓库。下面将详细阐述构建Docker镜像的整个过程。

weixin_47772925的博客 2142
上一篇: 【Docker学习总结】9.Docker-获取和推送镜像
下一篇: 【Docker学习总结】11.Docker-Dockerfile详解
Rita楠神
博客等级 码龄9年 27粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值