Docker(二)-Docker化-构建Springboot的镜像

本文详细介绍了如何将SpringBoot项目Docker化的过程,包括Dockerfile的编写与常见指令解析,以及如何构建并运行Docker镜像。

Docker化-构建Springboot的镜像

准备SpringBoot项目

Dockerfile常用命令

  • FROM — 指定基础镜像
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
  • MAINTAINER — 指定作者
MAINTAINER <author>
  • RUN — 运行指定的命令
RUN cmd arg1 arg2 --- 以/bin/sh -c cmd 方式运行命令(shell)
RUN ["cmd", "arg1", "arg2"] --- 直接运行命令(exec)
  • CMD — 容器启动时要运行的命令,可显式指定命令覆盖,只能使用一次
CMD ["cmd", "arg1", "arg2"] (exec)
CMD cmd arg1 arg2 (shell)
CMD ["arg1", "arg2"] --- 做为ENTRYPOINT的参数运行,需配合ENTRYPOINT使用
  • ENTRYPOINT —启动时的默认命令,如设置,则CMD为其参数
ENTRYPOINT ["cmd", "arg1", "arg2"] (exec)
ENTRYPOINT cmd arg1 arg2 (shell)
  • VOLUME — 向容器添加卷
VOLUME ["dir1", "dir2",...]
VOLUME dir1 dir2 ...
  • ADD — 复制文件到镜像中
ADD &ltsrc> ... <dest>
ADD ["<src>", ... "<dest>"]
  • COPY — 复制文件到镜像中
COPY <src> ... <dest>
COPY ["<src>", ... "<dest>"]
  • USER — 指定用户
USER username:group
USER uid:gid
  • WORKDIR — 指定工作目录
WOKRDIR dir
  • EXPOSE — 暴露接口给外部
EXPOSE <port> [<port>...]
  • LABEL — 为镜像指定标签
LABEL <key>=<value> <key>=<value> <key>=<value> ...
  • ENV — 设置环境变量
ENV <key> <value>
ENV <key>=<value>... --- 可以一次指定多个变量
  • ONBUILD — 添加触发器
ONBUILD [instruction]

SpringBoot的Dockerfile

  • Dockerfile
  #指定springboot需要的基础镜像
  FROM maven:3.3.3
  #复制pom文件到maven
  ADD pom.xml /tmp/build/
  #运行指定命令
  RUN cd /tmp/build && mvn -q dependency:resolve
  #复制项目文件
  ADD src /tmp/build/src
          #构建应用
  RUN cd /tmp/build && mvn -q -DskipTests=true package \
          #拷贝编译结果到指定目录
          && mv target/*.jar /app.jar \
          #清理编译痕迹
          && cd / && rm -rf /tmp/build

  VOLUME /tmp
  EXPOSE 8080
  ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

构建Docker镜像

  • 进入应用根目录,构建Docker镜像
docker build -t [项目名] .
  • 从镜像启动容器
docker run -d -p 8080:8080  [项目名]
  • 访问
curl http://127.0.0.1:8080

项目地址

`docker build -t helloworld-springboot .` 是 Docker一个命令,用于根据当前目录下的 `Dockerfile` 构建一个 Docker 镜像,并为该镜像指定一个名称(tag)。以下是详细解释: ### 命令分解: 1. **`docker build`** - 这是 Docker 的子命令,用于根据 `Dockerfile` 构建一个新的镜像。 2. **`-t helloworld-springboot`** - `-t` 表示 `--tag`,用于给构建镜像指定一个名称(tag)。 - `helloworld-springboot` 是镜像的名称,你可以自定义(通常格式为 `<仓库名>/<镜像名>:<标签>`,如 `myrepo/helloworld:1.0`)。 - 如果省略标签(如 `-t helloworld-springboot:latest`),默认使用 `latest`。 3. **`.`** - 表示当前目录,Docker 会在此目录下查找 `Dockerfile`(默认文件名)并使用它来构建镜像- 如果 `Dockerfile` 不在当前目录,可以用 `-f` 指定路径,例如: ```bash docker build -t helloworld-springboot -f /path/to/Dockerfile . ``` ### 执行流程: 1. Docker 读取当前目录下的 `Dockerfile`。 2. 按照 `Dockerfile` 中的指令(如 `FROM`、`COPY`、`RUN` 等)逐层构建镜像。 3. 构建完成后,生成一个本地镜像,名称为 `helloworld-springboot`。 ### 示例验证: 构建完成后,可以通过以下命令查看镜像: ```bash docker images ``` 输出示例: ``` REPOSITORY TAG IMAGE ID CREATED SIZE helloworld-springboot latest abc12345678 2 minutes ago 300MB ``` ### 常见问题: 1. **如果 `Dockerfile` 不在当前目录?** 使用 `-f` 指定路径,例如: ```bash docker build -t helloworld-springboot -f ../Dockerfile .. ``` 2. **如何指定镜像版本?** 在镜像名后加标签,例如: ```bash docker build -t helloworld-springboot:v1 . ``` 3. **构建时如何传递参数?** 使用 `--build-arg`,例如: ```bash docker build -t helloworld-springboot --build-arg JAR_FILE=target/app.jar . ``` (需在 `Dockerfile` 中用 `ARG JAR_FILE` 接收) ### 总结: - `docker build -t helloworld-springboot .` 的作用是: **用当前目录的 `Dockerfile` 构建一个名为 `helloworld-springboot` 的 Docker 镜像。**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值