Dockerfile是用来 构建Docker镜像的文件,是由一系列命令和参数构成的脚本,可以使用 Dockerfile 来快速创建自定义的镜像.
简单来说:Dockerfile是镜像的源码.
官方文档:https://docs.docker.com/engine/reference/builder/
实际案例:DockerFile 制作编译版nginx 1.16.1 镜像
具体过程如下:
1、下载镜像并初始化系统
创建目录环境,目录结构按照业务类型划分,方便后期镜像管理
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 ,当指定多个时,只有最后一个起效
然后Dockerfile通过docker build命令构建,可以看到步骤执行的具体过程
典型用法 docker build -t ImageName:TagName dir
选项
-t #给镜像加一个Tag
ImageName #给镜像起的名称
TagName #给镜像的Tag名
Dir #Dockerfile所在目录
需要注意的是要先准备源码包与配置文件,可以把软件包拷贝到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 images
3、从镜像启动容器,访问测试nginx界面验证
docker run -d -p 80:80 docker-nginx:v1