Dockerfile 定制镜像

Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

使用Dockerfile来定制项目,在空白目录中,建立一个文本文件,并命名为Dockerfile:

 mkdir tmp
 cd tmp
 touch Dockerfile

Dockerfile 内容为:

FROM tomcat:latest
COPY zftal-demo-v5-web.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh","run"]

Dockerfile 命令

  • From指定基础镜像

所谓定制镜像,那一定是以一个镜像为基础的,在其上进行定制。From就是执行基础镜像,因此一个Dockerfile中FROM是必备的指令,并且必须是第一条指令。如下:

FROM tomcat:latest

以上命令意味着以tomcat最新版本作为基础镜像,接下来所写的指令都作用在基础镜像上。

  • COPY复制文件

COPY指令将从构建上下文目录中<源路径>的文件/目录复制新的一层镜像内的<目标路径>位置,格式如下:

COPY<源路径>...<目标路径>

<源路径>可以是多个,甚至可以是通配符,<目标路径>可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用WORKDIR指令来指定)。目标目录不需要事先创建,如果目录不存在会在复制文件钱先行创建缺失目录。

  • CMD容器启动命令

CMD指令用于指定默认的容器主进程的启动命令的。格式如下:

shell格式:CMD<命令>
exec格式:CMD["可执行文件","参数1","参数2"...]
  • EXPOSE暴露端口

EXPOSE指令是声明运行时容器提供服务端口,这只是一个声明。格式如下:

EXPOSE<端口1>[<端口2>...]

这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在Dockerfile中写入这样的声明时可以方便配置端口映射。

Dockerfile 构建

在Dockerfile所在目录下执行:

$ docker build -t demoweb:0.0.1 .

这里我们使用了docker build 命令进行镜像构建,其格式为:

$ docker build [选项] <上下文路径/URL/->

在这里我指定了最终镜像的名称 -t demoweb:0.0.1

构建成功后,我们直接运行该镜像

$ docker run -p 8088:8080 --name demoContainer -d demoweb:0.0.1

启动容器

启动容器所需要的命令主要是 docker run,如下:

$ docker run -p 8088:8080 --name demoContainer -d demoweb:0.0.1

下面的命令则是启动一个bash终端,允许用户进行交互:

$ docker run -it ubuntu:14.04 /bin/bash

当利用docker run来创建容器时,Docker在后台运行的标准操作包括:

1.检查本地是否存在指定的镜像,不存在就从公有仓库下载;

2.利用镜像创建并启动一个容器;

3.分配一个文件系统,并在只读的镜像层外面挂载一层可读写层;

4.从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去;

5.从地址池配置一个ip地址给容器;

6.执行用户指定的应用程序;

7.执行完毕后容器被终止。

Dockerfile 示例

#FROM reg.hiwepy.com/base-image/openjdk-pinpont:1
#FROM reg.hiwepy.com/base-image/openjdk-8-shanghai:alpine
#FROM openjdk:11-jre-alpine
#FROM openjdk:11-jre-slim
#FROM openjdk:11-jdk-alpine
#FROM openjdk:11-jdk-slim
#FROM openjdk:11-jdk-oracle
#FROM openjdk:8-jre-alpine
#FROM openjdk:8-jre-slim
#FROM openjdk:8-jdk-alpine
#FROM openjdk:8-jdk-slim
#FROM openjdk:8-jdk-oracle

#FROM wans-hz-docker.pkg.coding.net/wisdom-edu/base-image/openjdk:8-jdk-alpine
FROM wans-hz-docker.pkg.coding.net/wisdom-edu/base-image/openjdk:8-jdk-alpine-skywalking

# 申明临时卷
VOLUME /logs
VOLUME /tmp

# 拷贝本地Jar包到根目录
ADD ./target/wisdom-edu-open.jar /app.jar

# 挂着启动脚本
#ENTRYPOINT ["/sbin/tini", "--"]
CMD ["sh", "-c", "java -jar app.jar"]
作者:Jeebiz  创建时间:2023-02-12 01:46
最后编辑:Jeebiz  更新时间:2024-08-02 14:21