镜像结构
- 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成
- 结构:
- 入口:镜像运行入口,一般是程序启动的脚本和参数
- 层:在BaseImage基础上添加安装包、依赖、配置等,每次操作都形成新的一层
- 基础镜像:应用依赖的系统函数库、环境、配置、文件等
什么是Dockerfile
Dockerfile是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像,每一个指令都会形成一层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 |
案例1:基于Ubuntu镜像构建一个新镜像,运行一个java项目
- 新建空文件夹docker-demo
- 拷贝项目jar包、jdk、Dockerfile到该目录
进入decker-demo
运行命令
1 | docker build -t javaweb:1.0 . |
- 创建镜像
1 | docker run --name web -p 8090:8090 -d javaweb:1.0 |
案例2:基于java:8-alpine镜像,将一个Java项目构建为镜像
思路如下:
- 新建空目录,新建Dockerfile文件
- 拷贝项目jar包到该目录
- 编写Dockerfile文件
- 基于java:8-alpine作为基础镜像
- 将app.jar拷贝到镜像中
- 暴露端口
- 编写入口ENTRYPOINT
- 使用build命令创建镜像,run命令创建容器并运行