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_docker

touch 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、启动镜像测试

页面访问

希望能够帮助到大家!!

相关推荐
Initialize-le18 分钟前
Nginx 504 超时、499 一堆?网关排查法
运维·nginx
哦虎!2 小时前
【JavaEE】网络初识
java
砚凝霜2 小时前
【软考信息安全】第二十二章 Web服务器安全分析与增强——Apache与IIS
服务器·前端·安全
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_delay调用流程与实战(七十二)
linux·运维·服务器·gstreamer音视频·音视频进阶
for_ever_love__2 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
快乐的韭菜根根3 小时前
ubuntu 安装slurm并配置
linux·运维·ubuntu
数字新视界3 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
程序猿追3 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓3 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播3 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码