Docker之Dockerfile镜像自定义

2022-07-16 13:40:30 浏览数 (1)

Docker之Dockerfile镜像自定义
  • 镜像的结构
  • 使用Dockerfile

镜像的结构

一些所用的镜像我们直接可以用现成的,可以直接从docker hub拉取,或者下载响应的tar包进行构建。 自定义镜像的用处在于对自己的项目的一个运行的需求。

镜像本身是将我们应用程序以及函数库,包括了环境,配置,依赖打包,如果没有这些基础的话,是不能在docker运行成为一个独立的容器程序的。

镜像的结构是什么? 首先是基础镜像,也叫BaseImage。 基础镜像提供了镜像所需要的函数库,环境配置等等。 然后就是各种层,也叫Layer,这个层啊是在我们的基础镜像上添加的一些配置 然后就是我们的入口,可以是java项目的启动命令。

使用Dockerfile

它是一个文本文件,但是我们可以在这里面写必要的命令。

我们来看一个准备好的

代码语言:javascript复制
# 指定基础镜像
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

我们可以基于ubuntu做这个镜像,这样没有什么问题,centos也可以去用。里面都是一些基础的配置。

部署一个简单的javaweb项目进行测试就完了,因为再大的项目也是一样的道理。

我们需要jdk,那么就需要引入jdk的包。

所以做这个镜像一共需要 Dockerfile,jdk包,以及我们的项目jar包。

把他们放在一个目录下面

现在我们开始执行命令

代码语言:javascript复制
 docker build -t javaweb:1.0 .

这是我们构建镜像的命令 -t 指定了镜像的名字以及版本。 镜像的名字就叫做javaweb 版本1.0, 注意后面有一个空格,然后 .代表使用当前目录的 Dockerfile。我们后面执行的命令会使用到这个脚本文件执行。

查看有没有构建成功

代码语言:javascript复制
 docker images

启动,注意要看一下Dockerfile的暴露端口

代码语言:javascript复制
 docker run --name web  -p 8090:8090 -d javaweb:1.0

–name 后面是给这个运行的容器起一个名字

-p后面是端口映射

-d 是后台运行

javaweb:1.0 基于javaweb这个镜像的1.0版本

不细说了。

然后我们去访问的话,还是服务器外网ip地址加上这个端口号。

还有就是防火墙的端口开放,不说了。一定要记住服务器面板端口也要开放。

这样就访问成功了。

但是我们的脚本文件可以做进一步的简化。

代码语言:javascript复制
From java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

java:9-alpine 简化了哪些操作 它是别人做好的镜像,它已经囊括了这么几步。

代码语言:javascript复制
## 配置环境变量,JDK的安装目录
#ENV JAVA_DIR=/usr/local
#
## 拷贝jdk的包
#COPY ./jdk8.tar.gz $JAVA_DIR/
## 安装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

你看,主要是做了jdk的配置

以后用这个也可以,都行,这个Dockerfile就更加简化了。

0 人点赞