Docker-使用Dockerfile自定义镜像

一、什么是Dockerfile

  Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像每一个指令都会形成一层Layer

二、常见指令

注意:第一行必须是 FROM 指令才行
在这里插入图片描述
更多指令,参考官网:Dockerfile reference

三、实例

需求:基于Ubuntu镜像构建一个新镜像,运行一个java项目

1.下载资料

将本文最上面的资源下载到本地
在这里插入图片描述

2.查看Dockerfile

  等会我们直接使用这个文件就可以依次执行这些指令帮助我们构建好自己的镜像(每个指令都会分一层)

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

3.新建目录

mkdir docker-demo
cd docker-demo

在这里插入图片描述

4.上传资料

  直接借助 FinalShell 拖动上传即可:

在这里插入图片描述

5.构建镜像

docker build -t javaweb:1.0 .

最后空格后面要加一个点,代表的是Dockerfile所在的目录(也就是我们现在所在的 docker-demo 目录)
在这里插入图片描述

可以看到镜像构建完成了
在这里插入图片描述

6.启动容器

docker run --name my-javaweb -p 8090:8090 -d javaweb:1.0

启动成功
在这里插入图片描述

7.浏览器访问

http://自己的服务器地址:8090/hello/count

在这里插入图片描述

四、实例升级

1.为什么升级

  其实之前的实例中我们的 Dockerfile 还可以简化一些不需要我们写的东西,当然并不是不用写了,而是别人帮我们写好了

在这里插入图片描述

2.如何升级

Ⅰ.更改 Dockerfile

  我们可以直接基于已经安装好 jdk 的镜像 openjdk:8-alpine 来构建我们的镜像,只需要将 Dockerfile 更改为如下:

# 指定基础镜像
FROM openjdk:8-alpine

COPY ./docker-demo.jar /tmp/app.jar

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

Ⅱ.构建镜像并运行容器

docker build -t javaweb:2.0 . # 构建镜像

docker run --name my-javaweb-2.0 -p 8091:8090 -d javaweb:2.0 # 启动容器

在这里插入图片描述

3.再次测试

http://自己的服务器地址:8091/hello/count

在这里插入图片描述

五、总结

1.Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
2.Dockerfile的第一行必须是FROM,从一个基础镜像来构建
3.基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

  • 27
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dockerfile是用于构建Docker镜像的文本文件。它包含了一系列的指令,用于定义镜像的构建过程。默认情况下,Docker会在上下文目录中寻找名为Dockerfile的文件作为构建的蓝图。然而,实际上Dockerfile的文件名并不要求必须为Dockerfile,也不要求必须位于上下文目录中。可以使用"-f"参数来指定其他文件作为Dockerfile。\[1\] 为什么有人会误以为"."是指定Dockerfile所在目录呢?这是因为在默认情况下,如果不额外指定Dockerfile的话,Docker会将上下文目录下的名为Dockerfile的文件作为Dockerfile。所以,当我们在上下文目录中运行Docker命令时,可以直接使用"."来表示当前目录作为上下文,并且Docker会自动寻找名为Dockerfile的文件进行构建。\[2\] 下面是一个编写Dockerfile的示例,以制作Centos镜像并在官方镜像的基础上添加vim和net-tools工具。首先,在/home/dockerfile目录下创建一个名为Dockerfile的文件,然后按照以下指令编写该文件: ``` FROM centos:7 MAINTAINER bertwu <1258398543@qq.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim net-tools EXPOSE 80 CMD /bin/bash ``` 这个Dockerfile的内容包括了从Centos官方镜像构建的基本指令,以及安装vim和net-tools工具的指令。构建镜像时,Docker会按照这个文件中的指令逐步执行,最终生成一个包含了Centos、vim和net-tools的镜像。\[3\] #### 引用[.reference_title] - *1* *2* *3* [Dockerfile 详解](https://blog.csdn.net/m0_46090675/article/details/121846718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值