Bootstrap

Dockerfile自定义镜像

CSDN话题挑战赛第2期
参赛话题:学习笔记

请添加图片描述
个人名片:

博主酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

一、镜像结构

1.了解

  1. 镜像是分层结构,每一层称为一个Layer
    Entrypoint:入口,是镜像中应用启动的命令
    BaseImage层:包含基本的系统函数库、环境变量、文件系统
    其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置
  2. 什么是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
  1. Dockerfile的第一行必须是FROM,从一个基础镜像来构建
  2. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

2.案例

  1. 基于Ubuntu镜像构建一个新镜像,运行一个java项目
    步骤1:新建一个空文件夹docker-demo
    步骤2:拷贝课前资料中的docker-demo.jar文件到docker-demo这个目录
    步骤3:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
    步骤4:拷贝课前资料提供的Dockerfile到docker-demo这个目录
    步骤5:进入docker-demo
    步骤6:运行命令:docker build -t javaweb:1.0 .
    步骤7:创建并运行镜像javaweb:1.0
    最后访问 http://虚拟机ip地址:8090/hello/count
# 创建docker-demo文件夹
mkdir docker-demo
# 将资料中的docker-demo.jar,jdk8.tar.gz,Dockerfile复制到docker-demo目录下
# 构建docker镜像,基于Dockerfile
docker build -t javaweb:1.0 .
# 创建并运行javaweb:1.0镜像
docker run --name web -p 8080:8090 -d javaweb:1.0

访问[http://虚拟机ip地址:8080/hello/count
在这里插入图片描述
2. 基于java:8-alpine镜像,将一个Java项目构建为镜像
实现思路如下:
①新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile
②拷贝课前资料提供的docker-demo.jar到这个目录中
③编写Dockerfile文件:
a)基于java:8-alpine作为基础镜像
b)将app.jar拷贝到镜像中
c)暴露端口
d)编写入口ENTRYPOINT
④使用docker build命令构建镜像
⑤使用docker run创建容器并运行

# 在tmp目录下创建文件夹docker_java
mkdir docker_java
# 创建Dockerfile文件,并添加下面内容
touch Dockerfile
# 创建javaweb:2.0镜像
docker build -t javaweb:2.0 .
# 创建并运行javaweb:2.0容器
docker run --name web2 -p 8080:8090 -d javaweb:2.0

Dockerfile内容

FROM java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar

访问http://虚拟机ip地址:8080/hello/count
在这里插入图片描述
总结:

Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
Dockerfile的第一行必须是FROM,从一个基础镜像来构建
基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

;