dockerfile就是一个命令脚本,用来构建docker镜像的
1.dockerfile命令
dockerfile中的命令都建议大写,是为了和参数区分开来
- FROM命令
FROM命令指定镜像的基础镜像。比如我们要定制一个tomcat镜像,那么tomcat就是我们的基础镜像。又比如我们要制作一个我们自己的springboot服务镜像,那么java就是基础镜像。
FROM 基础镜像
eg:
FROM java:8
如果本地没有,docker会自动下载java8镜像
- RUN命令
指定镜像构建过程中要执行的命令。其有shell格式和exec格式
shell格式
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。
eg:
#输出 this a run command
RUN echo "this a run command"
exec格式
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
3.COPY指令
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
比如我们要构建一个springboot镜像就需要把宿主机中的jar包拷贝到容器中。容器的目录结构就是简化版的linux文件目录
COPY xxx.jar /home/hxl
- ADD命令
其作用和copy一样,把上下文的文件复制到容器中。不同的是,ADD命令复制压缩文件时,会把文件自动解压到容器目录中
ADD xxx.zip /usr/local
- CMD命令
运行程序时执行,其与RUN命令类似,不过RUN是在构建镜像时执行,而CMD是在运行镜像时执行。
比如我们的springboot镜像在启动时需要启动jar包,那么就可以把java -jar
命令用在这里
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效
CMD java -jar xxxx.jar
- ENTRYPOINT命令
ENTRYPOINT ["java","- jar","xxx.jar"]
- ENV命令
设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
ENV JAVA_HOME /user/local/jdk1.8
#输出 /user/local/jdk1.8
RUN echo $JAVA_HOME
- ARG命令
- VOLUME命令
挂载数据卷
VOLUME ["user/local/nginx"]
- WORKDIR命令
指定工作目录,我们的命令就在这个目录下执行,
- EXPOSE命令
实战构建springboot镜像
1.在idea中安装docker插件,并且在项目目录下创建Dockerfile文件就能愉快的编写命令
FROM java:8
RUN echo "start build ng-eureka-server"
COPY *.jar /app.jar
CMD ["--server.port=8091"]
EXPOSE 8091
ENTRYPOINT ["java","-jar","/app.jar"]
RUN echo "==========end==========="
2.把jar包和Dockerfile都上传到目录
3.使用docker build
命令构建镜像
docker build -t ng-eureka:1.0 .
可以看到镜像已经生成成功了
4.运行镜像
docker run -d -p 8010:8091 --name ng-server ng-eureka:1.0
访问测试成功