Dockerfile是用来 构建Docker镜像的文件,是由一系列命令和参数构成的脚本,可以使用 Dockerfile 来快速创建自定义的镜像.
简单来说:Dockerfile是镜像的源码.

官方文档:https://docs.docker.com/engine/reference/builder/

实际案例:DockerFile 制作编译版nginx 1.16.1 镜像

具体过程如下:

1、下载镜像并初始化系统

docker nginx 文件路径问题 docker nginx dockerfile_docker nginx 文件路径问题

docker nginx 文件路径问题 docker nginx dockerfile_Dockerfile_02

创建目录环境,目录结构按照业务类型划分,方便后期镜像管理

docker nginx 文件路径问题 docker nginx dockerfile_nginx_03

 

docker nginx 文件路径问题 docker nginx dockerfile_docker_04

docker nginx 文件路径问题 docker nginx dockerfile_nginx_05

2、编写Dockerfile,构建nginx镜像:

 vim ./Dockerfile     #生成的镜像的时候会在执行命令的当前目录查找Dockerfile 文件,所以名称不可写错,而且D 必须大写

Dockerfile的基本结构

基础镜像信息
FROM 指定哪种镜像为新镜像的基础镜像,比如ubuntu,centos

维护者信息
MAINTAINER 指明该镜像的作者和其电子邮件

镜像操作指令:

USER
指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户

WORKDIR
在构建镜像时,指定镜像的工作目录

(COPY/ADD)
COPY单纯的复制
ADD复制之后还会对文件进行提取和解压等操作

EVN
配置坏境变量

EXPOSE
指定容器要暴露的端口

VOLUME
用来向基于镜像创建的容器添加数据卷

RUN(重要)
在新镜像内部要执行的命令,比如安装一些软件、配置一些基础环境,可使用\来换行

容器启动时执行指令
CMD
比如:CMD [“java”,"-jar",“eureka-server-cluster.jar”,“spring.profiles=peer1”]

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

ENTRYPOINT
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效

docker nginx 文件路径问题 docker nginx dockerfile_docker nginx 文件路径问题_06

然后Dockerfile通过docker build命令构建,可以看到步骤执行的具体过程

典型用法 docker   build  -t   ImageName:TagName   dir

选项
-t                           #给镜像加一个Tag
ImageName          #给镜像起的名称
TagName              #给镜像的Tag名
Dir                         #Dockerfile所在目录

docker nginx 文件路径问题 docker nginx dockerfile_docker nginx 文件路径问题_07

 

docker nginx 文件路径问题 docker nginx dockerfile_docker_08

需要注意的是要先准备源码包与配置文件,可以把软件包拷贝到nginx下,或者直接在nginx下载软件包。

cp    /usr/local/nginx/conf/nginx.conf          /opt/dockerfile/web/nginx             #使用其它服务器编译安装相同版本的nginx 配置文件,而且配置文件中关闭Nginx进程后台运行

cp    /usr/local/src/nginx-1.18.0.tar.gz       /opt/dockerfile/web/nginx              #nginx 源码包

docker nginx 文件路径问题 docker nginx dockerfile_docker_09

生成本地镜像成功:docker images

docker nginx 文件路径问题 docker nginx dockerfile_Dockerfile_10

3、从镜像启动容器,访问测试nginx界面验证

docker  run   -d   -p 80:80  docker-nginx:v1

docker nginx 文件路径问题 docker nginx dockerfile_docker_11

 

docker nginx 文件路径问题 docker nginx dockerfile_Dockerfile_12