(总结自b站黑马程序员课程)
环环相扣,跳过部分章节和知识点是不可取的。
一、镜像结构
镜像是分层结构,每一层称为一个Layer。
①BaseImage层:包含基本的系统函数库、环境变量、文件系统。
②Entrypoint:入口,是镜像中启动应用的命令。
③中间层:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置。
二、Dockerfile
Dockerfile的本质是一个文件,通过指令描述镜像的构建过程。其第一行必须是From,从一个基础镜像来构建。
基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine。
Dockerfile示例:
指定基础镜像
FROM ubuntu:16.04
配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
拷贝jdk和java项目的包
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
COPY ./docker-demo.jar /tmp/app.jar
暴露端口
EXPOSE 8090
入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
我们首先在Linux中加入tmp目录并且创建一个docker-demo文件:
bash
cd /tmp/
mkdir docker-demo
然后进入到创建docker-demo文件中:
bash
cd docker-demo
之后将需要的文件和Dockerfile文件本身拖入docker-demo中(使用MobaXterm很方便,文件直接拖入左侧目录即可)。
构建镜像:
bash
docker build -t javaweb:1.0 .
-t是tag标签,冒号前面是名字,冒号后面是版本。点代表从当前目录构建。
可以使用docker images检查镜像是否构建成功。
运行容器:
bash
docker run --name web -p 8090:8090 -d javaweb:1.0
注意这里的8090是Dockerfile中指定暴露的端口。
也可以通过docker ps检查容器是否运行成功。
根据自己的端口号,课程的访问链接如下:
我们可以发现除了构建java项目以外,构建jdk项目具有通用性。可以使用其他人制作好的镜像,例如:java:8-alpine。更改一下版本号即可。
指定基础镜像
FROM java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
暴露端口
EXPOSE 8090
入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
三、附录
常用Dockerfile指令如下: