1、镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
2、Dockerfile
Dockerfile 就是一个文本文件,其中包含一个个 指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来 Docker 可以根据 Dockerfile 帮助我们构建镜像。常用指令如下:
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像指定目录 | COPY ./jrell.tar.gz /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/hrell.tar.gz && EXPORTS path=/tmp/jrell:$path |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xxx.jar |
更多详细语法说明,参考 官网文档
我们基于 Ubuntu 基础镜像,利用 Dockerfile 描述镜像结构,也可以直接基于 JDK 为基础镜像,省略前面的步骤,如下图:
当编写好了 Dockerfile,可以利用 docker build -t myImage:1.0 .
命令来构建镜像。
-t
:给镜像起名字,格式依然是 repository:tag 的格式,不指定 tag 时,默认为 latest.
:最后的点是指定 Dockerfile 所在目录,如果就在当前目录,则指定为.
3、自定义镜像
3.1、自定义 Dockerfile
- 自备 docker-demo.jar 文件,并创建 Dockerfile 文件内容如下:
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝 jar 包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
- 将上面两个文件拷贝到准备好的目录下,运行
docker build -t docker-demo .
- 运行
docker images
查看是否创建好镜像 - 运行
docker run -d --name dd -p 8080:8080 docker-demo
启动 - 运行
docker logs -f dd
即可查看运行日志