BaseImage层:包含基本的系统函数库、环境变量、文件系统
Entrypoint:入口,是镜像中应用启动的命令
其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置
Dockerfile语法Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
指令 |
说明 |
示例 |
FROM |
指定基础镜像 |
FROM centos:6 |
ENV |
设置环境变量,可在后面指令使用 |
ENV key value |
COPY |
拷贝本地文件到镜像的指定目录 |
COPY ./mysql-5.7.rpm /tmp |
RUN |
执行Linux的shell命令,一般是安装过程的命令 |
RUN yum install gcc |
EXPOSE |
指定容器运行时监听的端口,是给镜像使用者看的 |
EXPOSE 8080 |
ENTRYPOINT |
镜像中应用的启动命令,容器运行时调用 |
ENTRYPOINT java -jar xx.jar |
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder
将Java项目构建镜像,并运行
Java项目的jar包:
链接:https://pan.baidu.com/s/1Gc7sP9YrCbtSdViTwrw0aA
提取码:j8g7
JDK8
链接:https://pan.baidu.com/s/1IMSpGyiH7Cdu2kvgAmlDdw
提取码:fr8l
构建镜像思想
通过Dockerfile来构建,Dockerfile是指令集合,首先要知道如何编写Dockerfile
Dockerfile要做些什么:
- 基于Linux内核
- 配置环境,Java运行需要jdk
- Java项目的jar包
- 项目启动脚本
将jdk和Java项目上传到指定目录(新建目录:docker-demo),然后编写Dockerfile文件也上传到Docker-demo目录下
编写Dockerfile
# 指定基础镜像 From ubuntu:16.04 # 配置环境变量,JDK的安装目录 ENV JAVA_DIR=/usr/local # 拷贝jdk到指定目录 COPY ./jdk8.tar.gz $JAVA_DIR # 安装JDK #进入JDK所在目录 #执行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 # 拷贝Java项目jar包到指定目录 COPY ./docker-demo.jar /tmp/app.jar # 暴露端口(容器内部使用端口) EXPOSE 8090 # Java项目的启动命令 ENTRYPOINT java -jar /tmp/app.jar
上传Dockerfile
进入docker-demo目录,运行Dockerfile
docker build -t javaweb:1.0 . # docker build 构建 # -t tag # javaweb:1.0 镜像名:版本号 # . Dockerfile文件所在目录( 点:代表当前位置)
Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout(Docker镜像拉取错误)
修改或新建/ect/docker/daemon.json文件
sudo vim daemon.json
编辑阿里云的镜像地址:
{ "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"] }
再次执行
通过docker images查看镜像
启动镜像,创建容器
docker run -p 8090:8090 -d javaweb:1.0
通过浏览器访问 http://192.168.223.128:8090/hello/count
现在如果有多个Java项目依赖都时JDK8的话,是不是Dockerfile就都要写红色框中的指令
可以将红色框中的指令单独构建成镜像(java:8-alpine),使用方式:
FROM java:8-alpine COPY ./docker-demo.jar /tmp/app.jar ENTRYPOINT java -jar /tmp/app.jar