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 更新时间:2024-08-02 14:21