Docker之dockerfile构建镜像

59 阅读3分钟

Dockerfile构建应用镜像🌏

本篇文章就来实际操作下,如何使用dockerfile来构建镜像 先来了解下什么是Dockerfile吧。

Dockerfile 是用于构建 Docker 镜像的文本文件,其中包含了一系列的指令和配置,用于定义镜像的构建过程。通过 Dockerfile,你可以将应用程序、环境配置等打包到一个镜像中,并在不同的环境中进行部署和运行。

🔥以下是 Dockerfile 中常用的一些指令和用法:

  1. FROM: 指定基础镜像,用于构建新的镜像。例如:FROM ubuntu:latest 表示基于 Ubuntu 最新版构建镜像。
  2. RUN: 在镜像中执行命令。可以用于安装软件包、运行脚本等操作。例如:RUN apt-get update && apt-get install -y nginx 表示在镜像中更新软件包列表并安装 Nginx。
  3. COPY 和 ADD: 将文件从构建环境复制到镜像中。COPY 用于复制本地文件到镜像中,而 ADD 不仅支持复制文件,还支持解压缩压缩文件和远程 URL。例如:COPY app.jar /app/ 表示将本地的 app.jar 文件复制到镜像的 /app/ 目录中。
  4. WORKDIR: 设置工作目录,用于后续命令执行的默认路径。例如:WORKDIR /app 表示将工作目录设置为 /app
  5. EXPOSE: 声明容器运行时监听的端口。这个指令仅仅是声明,并不会实际打开或者映射端口。例如:EXPOSE 8080 表示容器将监听 8080 端口。
  6. CMD 和 ENTRYPOINT: 定义容器启动时执行的命令。CMD 可以为容器指定默认的执行命令,而 ENTRYPOINT 则可以指定容器的入口点。例如:CMD ["java", "-jar", "app.jar"] 表示容器启动时执行 java -jar app.jar 命令。

Dockerfile 中的指令会按顺序逐条执行,从而构建出最终的 Docker 镜像。通过编写 Dockerfile,你可以定义镜像的构建过程,并在构建完成后使用 docker build 命令来生成镜像。

这就是dockerfile的大体介绍,如果你正在学习dockerfile内容也可以观看下官方文档。

Dockerfile 参考 | Docker 文档

ex: 构建一个java的jar运行

Dockerfile

# 拉取jdk基础镜像
FROM openjdk:8-jdk-alpine

# 维护者信息
MAINTAINER jacklove 

# 添加jar包到容器中 -- tips: xx.jar 和 Dockerfile 在同一级
ADD app.jar /home/
#/home/这个目录是镜像里的目录,如果你不写路径,例如 ADD app.jar app.jar,那么这个jar包就在/目录下
# 对外暴漏的端口号
# [注:EXPOSE指令只是声明容器运行时提供的服务端口,给读者看有哪些端口,在运行时只会开启程序自身的端口!!]
EXPOSE 8080

# -- 每个Dockerfile只能有一条CMD命令。
#如果指定了多条命令,只有最后一条会被执行。    
#这里以exec格式的CMD指令 --> 可实现优雅停止容器服务
CMD ["java", "-jar", "/home/app.jar"]

构建镜像

# 构建镜像
# -f:指定Dockerfile文件路径
# -t:镜像命名,不推送到远程仓库时,可以随意命名,如果你要推送到远程仓库,那么命名就要符合远程地址规则,不然会上传失败
# --no-cache:构建镜像时不使用缓存
# 最后有一个点 “.”:当构建的时候,由用户指定构建镜像的上下文环境路径,
#然后将此路径下的所有文件打包上传给Docker引擎,引擎内将这些内容展开后,就能获取到所有指定上下文中的文件了。
docker build -f Dockerfile -t "registry.cn-shanghai.aliyuncs.com/jacklove/openjdk:8-TZ-CN" . --no-cache

运行

# 运行
docker run -d -p 80:80 --name jdk registry.cn-shanghai.aliyuncs.com/jacklove/openjdk:8-TZ-CN
# 进入容器
docker exec -it jdk sh
pwd
....略

至此就是对于dockerfile构建镜像的基本使用了。 下一篇会在介绍解决jdk镜像问题时一些有关dockerfile的使用