Dockerfile构建镜像

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' .
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值