Dockerfile语法解析

2019-12-23  本文已影响0人  ananRunner

FROM

指定基础镜像,比如FROM centos:7

FROM centos:7

RUN

在镜像内部执行一些命令,比如安装软件,配置环境等等,执行可以使用""

RUN groupadd -r mysql && useradd -r -g mysql mysql

ENV

设置变量的值,ENV MYQL_MAJOR 5.7,可以通过docker run --e key=value修改,后面可以直接使用${YSQL_MAJOR}

ENV MYSQL_MAJOR 5.7

LABEL

设置镜像标签

LABEL email ="timor@163.com"
LABEL name = "timor"

VOLUME

指定数据的挂载目录

VOLUME /var/lib/mysql

COPY

将主机的文件复制到镜像内,如果目录不存在,会自动创建所需要的目录,注意只是复制,不会提取和解压

COPY springboot.jar /opt/springboot/

ADD

将主机的文件复制到镜像内,和COPY类似,只是ADD会对压缩文件提取和解压

ADD application.yml /etc/

WORKDIR

指定镜像的工作目录,之后的命令都是基于此目录工作,若不存在则创建

WORKDIR /usr/local
WORKDIR tomcat
RUN touch demo.txt

会在/usr/local/tomcat下创建demo.txt

WORKDIR /root
ADD app.yml test/

会在/root/test下多出一个app.yml文件

CMD

容器启动的时候默认会执行的命令,若有多个CMD命令,则最后一个生效

CMD ["mysql"]
或
CMD mysql

ENTRYPOINT

和CMD的使用类似

ENTRYPOINT ["docker-entrypoint.sh"]

和CMD的不同 docker run 执行时,会覆盖CMD的命令,而ENTRYPOINT不会。

EXPOSE

指定镜像要暴露的端口,启动镜像时,可以使用-p 将该端口映射给宿主机

EXPOSE 3306

Dockerfile实战Springboot项目

1.在docke环境中新建一个目录 "springboot"

mkdir springboot
  1. 上传"springboot.jar"到该目录下,并且在此目录创建Dockerfile文件
  2. 创建Dockerfile文件,编写内容
FROM openjdk:8 
MAINTAINER timor 
LABEL name="springboot" version="1.0" author="timor" 
COPY springboot-demo.jar springboot.jar 
CMD ["java","-jar","springboot.jar"]
  1. 基于Dockerfile构建镜像
docker build -t spring-boot-image .
  1. 基于image创建container
docker run -d --name springboot -p 8081:8080 spring-boot-image
  1. 查看启动日志
docker logs springboot --tail=100 -f -t
  1. 在宿主机上访问
curl  localhost:8081/dockerfile
  1. 再次启动一次
docker run -d --name springboot2 -p 8082:8080 spring-boot-image
上一篇下一篇

猜你喜欢

热点阅读