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、启动镜像测试
页面访问
希望能够帮助到大家!!