Dockerfile文件参数配置和使用

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录


K8S自动化部署JAVA项目(Gitlab CI/CD)请参考文章:K8S部署Java项目(Gitlab CI/CD自动化部署)

一、Dockerfile介绍

官网参考文档
https://docs.docker.com/engine/reference/builder/

参数截图

二、Dockerfile常用参数

Dockerfile文件中的关键字不区分大小写,大写小写都可以

以下为常用参数(关键字)

关键字 描述
FROM 指定基础镜像 如FROM docker:latest
MAINTAINER 指定文件作者 如李白
ENV 配置环境变量 如ENV JAVA_HOME=/root/local/java/jdk1.8-.0.121
ARG 用于定义变量后面引用 如JAR_FILE=target/*.jar 后面可用${JAR_FILE}方式引用
WORKDIR 工作目录,即后续RUN、ADD等命令执行位置的路径
COPY 拷贝本地文件到指定目录 如COPY ./tomcat-8.0 /root/tomcat,不支持压缩文件自动解压,文件只会被复制为普通文件
ADD 与COPY相似,但除了复制本地文件和目录外,还有几点高级功能,1会在将压缩文件复制到目标目录前自动解压,2还支持使用url作为源路径从网络下载文件并复制到容器中,3在构建上下文中添加的文件可以是一个url,他会自动下载并复制到容器中,tips:建议用COPY,更简单直接
RUN 执行linux的shell命令 如RUN mkdir -p /root/project
EXPOSE 指定容器运行时坚挺的端口,镜像使用者可看到 如EXPOSE 8800
ENTRYPOINT 镜像中应用的启动命令,容器运行时调用 如ENTRYPOINT java -jar app.jar

三、配置Dockerfile

配置举例

以java项目为例使用Dockerfile文件打包并构建镜像

yml 复制代码
#关键字和值之间可以是空格" "也可以是等号"="
#指定基础镜像,以此镜像为基础构建
FROM openjdk:8-jdk-alpine

#作者
MAINTAINER hs

#设置环境变量
#JAVA_HOME环境变量定义,即配置jdk安装目录路径,需是jdk文件全路径名
ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-4.0.3.al8.x86_64
#MAVEN环境变量定义,即maven安装的位置,需是maven全路径名
ENV MAVEN_HOME=/usr/share/maven
#配置环境变量
ENV PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
#指定容器的时区
ENV TZ=Asia/Shanghai
#应用参数
#ENV ARGS=""
#target是jar包默认的位置,但是我们在CICD打包阶段已经将jar复制到了/root/jar/k8s-project目录中
#ARG JAR_FILE=target/*.jar

#创建工作目录,此目录在CICD打包阶段已经创建
#RUN mkdir -p /root/jar/k8s-project

#设置工作目录,后续命令默认执行位置为该路径,不设置的话后续会默认当前路径为工作路径
WORKDIR /root/jar/k8s-project

#复制文件到镜像中,将本地文件或目录复制到镜像指定位置
#COPY app.jar /root/jar/k8s-project/app.jar
#COPY ${JAR_FILE} /root/jar/k8s-project/app.jar

#将app.jar添加到指定文件夹中,并自动解压缩(与COPY类似,二选一即可)
#同时因为我们已经在.gitlab-ci.yml文件中的打包阶段执行了将jar复制到/root/jar/k8s-project目录的操作,故本文件中省略复制COPY或ADD命令
#ADD target/app.jar /root/jar/k8s-project/app.jar
#ADD ${JAR_FILE} /root/jar/k8s-project/app.jar

#时区配置,可省略
#RUN ln -snf /usr/share/zonginfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#容器入口,该命令应该是将每个字符串组合起来,nohub java -jar app.jar
ENTRYPOINT ["nohup","java","-jar","app.jar"]

#声明要监听的端口(暴露端口,容器内部的端口,这里暂时不用)
#EXPOSE 8080

四、使用Dockerfile

在docker中可直接构建镜像,操作如下

准备一个项目和一个Dockerfile文件

1. 构建镜像命令语法

打标签,注意最后一个.表示在当前位置执行,如果Dockerfile文件不在当前目录中,需要使用-f指定Dockerfile文件位置

l 复制代码
docker build -t 镜像名:镜像标签 .

或指定Dockerfile位置构建

l 复制代码
docker build -t 镜像名:镜像标签 . -f /root/Dockerfile

推送镜像

l 复制代码
docker push 镜像名:镜像标签

2. 举例

镜像名为springboot

镜像标签为v20240204

l 复制代码
docker build -t springboot:v20240204 .
l 复制代码
docker push springboot:v20240204

执行后即可生成镜像

后续可通过该镜像部署项目,如docker run命令部署或者k8s的yaml文件部署

当配合gitlab ci/cd的.gitlab-ci.yml文件进行项目自动化部署时,Dockerfile文件最好与.gitlab-ci.yml一样存放在项目根目录

详情可参考:.gitlab-ci.yml文件参数配置和使用


感谢阅读,祝君暴富!

相关推荐
JunLan~1 小时前
Rocky Linux 系统安装/部署 Docker
linux·docker·容器
吾日三省吾码2 小时前
JVM 性能调优
java
方竞2 小时前
Linux空口抓包方法
linux·空口抓包
弗拉唐3 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
sun0077003 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
海岛日记3 小时前
centos一键卸载docker脚本
linux·docker·centos
oi773 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
AttackingLin3 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python