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文件参数配置和使用


感谢阅读,祝君暴富!

相关推荐
什么鬼昵称4 分钟前
Pikachu- Over Permission-垂直越权
运维·服务器
煸橙干儿~~10 分钟前
分析JS Crash(进程崩溃)
java·前端·javascript
2401_8543910811 分钟前
Spring Boot大学生就业招聘系统的开发与部署
java·spring boot·后端
Amor风信子12 分钟前
华为OD机试真题---跳房子II
java·数据结构·算法
码农小白16 分钟前
linux驱动:(22)中断节点和中断函数
linux·运维·服务器
4647的码农历程17 分钟前
Linux网络编程 -- 网络基础
linux·运维·网络
杨荧38 分钟前
【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
java·开发语言·vue.js·spring boot·spring cloud·开源
醉颜凉42 分钟前
银河麒麟桌面操作系统V10 SP1:取消安装应用的安全授权认证
运维·安全·操作系统·国产化·麒麟·kylin os·安全授权认证
漫无目的行走的月亮1 小时前
在Docker中运行微服务注册中心Eureka
docker
陈逸轩*^_^*1 小时前
Java 网络编程基础
java·网络·计算机网络