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
- 上传"springboot.jar"到该目录下,并且在此目录创建Dockerfile文件
- 创建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"]
- 基于Dockerfile构建镜像
docker build -t spring-boot-image .
- 基于image创建container
docker run -d --name springboot -p 8081:8080 spring-boot-image
- 查看启动日志
docker logs springboot --tail=100 -f -t
- 在宿主机上访问
curl localhost:8081/dockerfile
- 再次启动一次
docker run -d --name springboot2 -p 8082:8080 spring-boot-image