概述
Dockerfile构建镜像
用于构建docker镜像
1、build
语法: docker build [command] .
选项:
-t 指定构建完成后的镜像名称
-f 指定dokerfile的路径, 如果省略此选项, docker会在 context-dir目录(当前目录) 中查找名称"Dockerfile"的文件进行构建
--build-arg 构建时传递参数
--no-cache 构建镜像的时候不使用缓存
.
上下文路径,是指 docker 在构建镜像,docker build 命令得知这个路径后,会将路径下的所有内容打包发送给docker引擎
2、Dockerfile脚本
2.1 语法
FROM:定制的镜像都是基于 FROM 的镜像
RUN:用于执行后面跟着的命令行命令。
CMD:类似于 RUN 指令,用于运行程序
- RUN 是在 docker build时运行,CMD在docker run 时运行,
- 为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
- 如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
ENV:设置环境变量
EXPOSE:声明端口
eg:
FROM centos:7
COPY nginx.repo /etc/yum.repos.d/nginx.repo
RUN yum install -y nginx
EXPOSE 80
ENV HOST=mynginx
CMD ["nginx","-g","daemon off;"]
2.2 Dockerfile 书写原则
(1)单一职责
由于容器的本质是进程,一个容器代表一个进程,因此不同功能的应用应该尽量拆分为不同的容器,每个容器只负责单一业务进程。
(2)提供注释信息
让协作者可以一目了然地知道每一行代码的作用,并且方便扩展和使用。
(3)保持容器最小化
应该避免安装无用的软件包,比如在一个 nginx 镜像中,我并不需要安装 vim 、gcc 等开发编译工具。这样不仅可以加快容器构建速度,而且可以避免镜像体积过大。
(4)合理选择基础镜像
容器的核心是应用,因此只要基础镜像能够满足应用的运行环境即可。例如一个Java类型的应用运行时只需要JRE,并不需要JDK,因此我们的基础镜像只需要安装JRE环境即可。
(5)正确设置时区
我们从 Docker Hub 拉取的官方操作系统镜像大多数都是 UTC 时间(世界标准时间)。如果你想要在容器中使用中国区标准时间(东八区),请根据使用的操作系统修改相应的时区信息,下面我介绍几种常用操作系统的修改方式:
CentOS 系统则向 Dockerfile 中添加以下指令:
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
(6)使用国内软件源加快镜像构建速度
(7)每一条 Dockerfile 指令都会提交为一个镜像层,最小化镜像层数(少写run,或者尽量写成一行)
3、实战案例(多级构建java程序)
多阶段构建可以让我们大幅度减小最终的镜像大小,而不需要去想办法减少中间层和文件的数量。因为镜像是在生成过程的最后阶段生成的,所以可以利用生成缓存来最小化镜像层。
1、 首先创建一个目录(作为到时候传到docker引擎的上下文目录)
2、在目录下创建 Dockerfile 文件
FROM maven:3.5.0-jdk-8-alpine AS builder
ADD ./pom.xml pom.xml
ADD ./src src/
RUN mvn clean package
FROM openjdk:8-jdk-alpine
MAINTAINER litaimin
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime;
echo 'Asia/Shanghai' >/etc/timezone;
COPY --from=builder target/*.jar /app/app.jar
CMD ["java", "-jar", "-Dspring.config.location=file:/app/application.yml","/app/app.jar", "--user.timezone=GMT+08"]
EXPOSE 8080
#需要把需要copy的文件放在该目录下
3、构建镜像
#docker build -t 'java-demo:v1' .
最后
以上就是虚拟糖豆为你收集整理的Dockerfile构建镜像Dockerfile构建镜像的全部内容,希望文章能够帮你解决Dockerfile构建镜像Dockerfile构建镜像所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复