前言
Dockerfile自定义镜像学习笔记
Dockerfile是一个文本文件,用于存放自动化部署镜像的脚本代码
镜像结构
- 镜像:将应用程序及其需要的系统函数库、环境、配置、依赖打包而成的
- 基础镜像(BaseImage):应用依赖的系统函数库、环境、配置、文件等
- 入口(Entrypoint):镜像运行入口,一般是程序启动的脚本和参数
- 层(Layer):在基础镜像基础上添加安装包、依赖、配置等时,每次操作都形成一层
定义Dockerfile
指定基础镜像
<system>:操作系统名
<version>:操作系统版本
Dockerfile
设置环境变量
<key>:环境变量键
<value>:环境变量值
Dockerfile
拷贝文件到镜像内
<file_local>:本地文件
<src_image>:镜像内的目录
Dockerfile1
| COPY <file_local> <src_image>
|
镜像内执行命令
<shell>:Shell命令
Dockerfile
指定向外暴露的端口号
<port>:端口号
Dockerfile
启动容器时执行的主程序
- 在启动容器时指定启动命令时(
docker run 镜像名 命令)不会被覆盖
Dockerfile1
| EXTRYPONIT java -jar xxx.jar
|
- 在启动容器时指定启动命令时(
docker run 镜像名 命令)会被覆盖
Dockerfile1
| CMD ["java", "-jar", "xxx.jar"]
|
- 组合使用,通过
EXTRYPONIT指定主程序,通过CMD指定参数
Dockerfile1 2
| EXTRYPONIT java -jar xxx.jar CMD ["--version"]
|
Java项目Dockerfile案例
java:8-alpine:包含了操作系统和jdk8环境的基础镜像
Dockerfile1 2 3 4
| FROM java:8-alpine COPY ./app.jar /app.jar EXPORT 8080 ENTRYPOINT java -jar /app.jar
|
通过Dockerfile构建镜像
<image_name>:<version>:镜像名和版本号
<src_dockerfile>:Dockerfile所在的目录,如果是当前目录就指定.
1
| docker build -t <image_name>:<version> <src_dockerfile>
|
Dockerfile传递参数
Dockerfile中定义参数占位符
Dockerfile1 2
| RUN export HTTP_PROXY="${HTTP_PROXY}" RUN export HTTPS_PROXY="${HTTP_PROXY}"
|
通过Dockerfile构建镜像时传递参数
1 2 3
| docker build -t <image_name>:<version> <src_dockerfile> \ --build-arg HTTP_PROXY=http://<ip>:<port> \ --build-arg HTTPS_PROXY=http://<ip>:<port>
|
完成
参考文献
哔哩哔哩——黑马程序员