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就更加简化了。