快速编写Dockerfile

以常见的部署java后端程序为示例:

python 复制代码
# 使用官方的 OpenJDK 17 JRE 镜像作为运行时镜像
FROM openjdk:17-alpine

# 设置工作目录
WORKDIR /app
#设置全球通用镜像源
RUN echo "http://dl-cdn.alpinelinux.org/alpine/v3.14/main" > /etc/apk/repositories
RUN echo "http://dl-cdn.alpinelinux.org/alpine/v3.14/community" >> /etc/apk/repositories
#安装必要的库,这里用到了验证码需要下载字体库
RUN apk update && apk add freetype
RUN apk add --no-cache msttcorefonts-installer fontconfig && update-ms-fonts && fc-cache -f

COPY  wgw-admin/target/ynu_doc-admin.jar /app/ynu_doc-admin.jar
COPY  wgw-system/target/ynu_doc-system-3.8.8.jar /app/ynu_doc-system.jar
COPY  wgw-framework/target/ynu_doc-framework-3.8.8.jar /app/ynu_doc-framework.jar
COPY  wgw-generator/target/ynu_doc-generator-3.8.8.jar /app/ynu_doc-generator.jar
COPY  wgw-common/target/ynu_doc-common-3.8.8.jar /app/ynu_doc-common.jar

# 暴露应用的端口
EXPOSE 8080

# 设置启动命令
# 假设 ynu_doc-admin 是主应用
ENTRYPOINT ["java", "-jar", "/app/ynu_doc-admin.jar"]

命令解析

WORKDIR /app:设置主目录,也就是使用docker exec -it <容器名>就会进入到这个目录

RUN:每次执行一个独立的命令,其中的echo是写入文件的指令,不指定目录默认输出到控制台,apk是安装包的指令,不同的系统有不同的包管理,这里的话,由于我导入的是openjdk:17-alpine,所以默认使用的是linux:alpne

COPY:把你打包好的jar包复制在工作目录

**EXPOSE:**设置你容器对外开放的接口

**ENTRYPOINT:**指定你运行容器时的命令,与CMD不同的是它不会被你运行容器时附加的命令所覆盖。比如:

使用 CMD
复制代码
FROM ubuntu
CMD ["echo", "Hello, World!"]

运行容器时:

复制代码
docker run myimage

输出:

复制代码
Hello, World!

如果在运行容器时指定其他命令:

复制代码
docker run myimage echo "Hello, Docker!"

Hello, Docker!
使用 ENTRYPOINT
复制代码
FROM ubuntu
ENTRYPOINT ["echo", "Hello, World!"]

运行容器时:

复制代码
docker run myimage

输出:

复制代码
Hello, World!

如果在运行容器时指定其他参数:

复制代码
docker run myimage "Hello, Docker!"

输出:

复制代码
Hello, World! Hello, Docker!

ps:如果实在没有高度自定义的需求可以使用docker init一键生成

相关推荐
星释2 分钟前
Rust 练习册 :Minesweeper与二维数组处理
开发语言·后端·rust
Q_Q196328847520 分钟前
python+django/flask基于深度学习的个性化携程美食数据推荐系统
spring boot·python·深度学习·django·flask·node.js·php
胡耀超23 分钟前
通往AGI的模块化路径:一个可能的技术架构(同时解答微调与RAG之争)
人工智能·python·ai·架构·大模型·微调·agi
清空mega39 分钟前
从零开始搭建 flask 博客实验(常见疑问)
后端·python·flask
xier_ran1 小时前
关键词解释:DAG 系统(Directed Acyclic Graph,有向无环图)
python·算法
开发者小天1 小时前
React中的useRef的用法
开发语言·前端·javascript·react.js
xixixin_1 小时前
【React】检测元素是否出现在用户视窗内
开发语言·前端·javascript·react.js
Js_cold1 小时前
Verilog局部参数localparam
开发语言·fpga开发·verilog
Acrelhuang1 小时前
小小电能表,如何撬动家庭能源革命?
java·大数据·开发语言·人工智能·物联网
头发还没掉光光1 小时前
Linux网络初始及网络通信基本原理
linux·运维·开发语言·网络·c++