当前位置: 首页 > news >正文

Dockerfile的使用,怎样制作镜像

Docker 提供了一种更便捷的方式,叫作 Dockerfile

        docker build命令用于根据给定的Dockerfile构建Docker镜像。

docker build命令参数:

--build-arg,设置构建时的变量
--no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
--pull,默认false。设置该选项,总是尝试pull镜像的最新版本
--compress,默认false。设置该选项,将使用gzip压缩构建的上下文
--disable-content-trust,默认true。设置该选项,将对镜像进行验证
--file, -f,Dockerfile的完整路径,默认值为‘PATH/Dockerfile’
--isolation,默认--isolation="default",即Linux命名空间;其他还有process或hyperv
--label,为生成的镜像设置metadata
--squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。
--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
--network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
--quiet, -q ,默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm,默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器

示例一个简单的源码安装的nginx的镜像创建过程带大家了解Dockerfile

1、环境准备

使用软件  VS code

在VS code的商城里 下载docker插件

连接到我们的虚拟机 47.99.103.75

2、要使用Dockerfile创建镜像首先需要创建一个独立的镜像目录

mkdir nginx_docker (目录名可根据镜像自定义方便识别)

 

3、进入目录创建文件dockerfile

cd nginx_dockertouch dockerfile

注:

这里的文件名必须是dockerfile才能被创建时的docker build识别到

dockerfile模块介绍

我们首先介绍一下dockerfile编写当中常用的几个模块以及他们的用途

FROM         首行,依赖的基础镜像也叫父镜像LABEL         次行,可以定制,像作者名,创建时间,邮 箱,用途等(比行非必须)RUN         shell命令COPY         拷贝本地文件至镜像ADD          可以将本地文件拷贝至镜像,也可以直接添加网络源至镜像,还可以添加压缩包至镜像并且在添加的时候就完成解压的动作WORKDIR         相当于shell的cd,用来切换所在位置VOLUME         数据映射目录定义,映射到宿主机的哪个位置ENV         设置环境变量(环境变量具有继承性)EXPOSE         指定端口CMD         模块内的内容会被启动docker后面添加的参数所覆盖ENTRYPOINT        模块内的内容会追加启动docker后面添加的参数

这里需要注意一下其中 ADD模块和COPY模块的区别 CMD模块和ENTRYPOINT模块的区别

这里我整理了一下,大家可以作为参考

COPY和ADD模块的区别

COPY 拷贝本地文件至镜像

ADD  将本地文件拷贝至镜像
          可以直接添加网络源至镜像
          可以添加压缩包至镜像并且在添加的时候就完成解压的动作

CMD模块和ENTRYPOINT模块的区别

CMD     模块里面的内容会被启动docker镜像时后面添加的参数所覆盖

ENTRYPOINT     模块里面的内容后面会追加启动docker镜像时后面添加的参数

并且CMD可以作为ENTRYPOINT的参数

4、编写dockerfile

OK,现在我们开始编写nginx的镜像内容

#父镜像为centos7
FROM centos:7  
#定义作者创建时间
LABEL  name="zaotounan"  date="2024-03.07-21:00"
#安装编译 Nginx 依赖包
RUN  yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel perl-devel perl-ExtUtils-Embed gd-devel

这里我们在本地终端操作

在nginx找到对应版本,这里我们使用的是nginx1.25.4

下载源码包到当前面目录

继续编写nginx的镜像内容

#父镜像为centos7
FROM centos:7  
#定义作者创建时间
LABEL  name="zaotounan"  date="2024-03.07-21:00"
#安装编译 Nginx 依赖包
RUN  yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel perl-devel perl-ExtUtils-Embed gd-devel
#将源码包传入镜像/usr/local目录下同时解压
ADD ./nginx-1.25.4.ta.gz /usr/local

本地在当前目录创建脚本

vim  nginx.sh

#!/bin/bash
#创建 Nginx 运行用户
useradd -s /sbin/nologin -M nginx
#Nginx 编译安装
cd /usr/local/nginx-1.25.4/
./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--sbin-path=/usr/sbin/nginx \
--error-log-path=/var/log/nginx/nginx_error.log \
--http-log-path=/var/log/nginx/nginx_access.log \
--pid-path=/usr/local/nginx/run/nginx.pid
make && make install#启动Nginx
/usr/sbin/nginx
tail -f /var/log/nginx/*

继续编写nginx的镜像内容

#父镜像为centos7
FROM centos:7  
#定义作者创建时间
LABEL  name="zaotounan"  date="2024-03.07-21:00"
#安装编译 Nginx 依赖包
RUN  yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel perl-devel perl-ExtUtils-Embed gd-devel
#将源码包传入镜像/usr/local目录下同时解压
ADD ./nginx-1.25.4.ta.gz /usr/local
#将创建好的脚本传入镜像/目录
COPY ./nginx.sh /
#执行脚本
CMD ["sh","nginx.sh"]

5、构建

docker build -t nginx:V1.15.4.1  .

6、查看镜像

docker  images

7、启动镜像测试

页面访问

希望能够帮助到大家!!

相关文章:

  • linux应用程序需要编写的脚本
  • HTML—基本介绍
  • 【吊打面试官系列】Java虚拟机JVM篇 - 关于类加载器的JVM面试题
  • React基础
  • 银河麒麟服务器操作系统V10【vnc配置多用户登录】
  • 实时大数据流处理技术:Spark Streaming与Flink的深度对比
  • 产品推荐 - 基于星嵌 OMAPL138+国产FPGA的DSP+ARM+FPGA三核开发板
  • Matlab|2机5节点牛拉法(含报告)
  • Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
  • linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)
  • 【控制台警告】npm WARN EBADENGINE Unsupported engine
  • 【elasticsearch】ES的JAVA工具类完整版(待完成...)
  • 【leetcode热题】重排链表
  • 二维码门楼牌管理系统在教育领域的应用及其优势
  • FFmpeg--音频解码流程:aac解码pcm
  • 「面试题」如何实现一个圣杯布局?
  • 【知识碎片】第三方登录弹窗效果
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Android 架构优化~MVP 架构改造
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • GraphQL学习过程应该是这样的
  • Java 内存分配及垃圾回收机制初探
  • Otto开发初探——微服务依赖管理新利器
  • 阿里云应用高可用服务公测发布
  • 编写符合Python风格的对象
  • 搞机器学习要哪些技能
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何设计一个比特币钱包服务
  • 06-01 点餐小程序前台界面搭建
  • MyCAT水平分库
  • #宝哥教你#查看jquery绑定的事件函数
  • $().each和$.each的区别
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (规划)24届春招和25届暑假实习路线准备规划
  • ... 是什么 ?... 有什么用处?
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 中创建支持集合初始化器的类型
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [<事务专题>]
  • [20180129]bash显示path环境变量.txt
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [Android] Implementation vs API dependency
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [Docker]五.Docker中Dockerfile详解
  • [IDF]摩斯密码
  • [Latex] \bibitem{} | .bbl 格式参考文献转换与获得