NipGeihou's blog NipGeihou's blog
  • 开发规范
  • 进阶笔记
  • 微服务
  • 快速开始
  • 设计模式
  • NoSQL 数据库

    • Redis
  • 数据结构与算法
  • 计算机网络
烹饪
关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • 开发规范
  • 进阶笔记
  • 微服务
  • 快速开始
  • 设计模式
  • NoSQL 数据库

    • Redis
  • 数据结构与算法
  • 计算机网络
烹饪
关于
  • 分类
  • 标签
  • 归档
  • Linux

  • Docker

    • 基本命令
    • Docker Compose Specification快速开始
    • Docker容器默认时区导致MySQL时区问题错误
    • 概念
    • 基本操作
    • 自定义镜像Dockerfile
      • 镜像结构
      • 什么是Dockerfile
      • 案例:容器运行Java项目
        • 传统部署流程
        • Docker部署流程
        • 改进
    • Docker Compose
    • Docker镜像仓库
    • 常用容器

  • 云原生

  • Kubernetes

  • KubeSphere

  • K3S

  • 笔记

  • PVE

  • 维修

  • DevOps

  • 云服务

  • 路由器

  • 运维
  • Docker
NipGeihou
2022-06-09
目录

自定义镜像Dockerfile

# 镜像结构

image-20220609163846905

镜像是分层结构,每一层称为一个 Layer

  • 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 项目

基于 Ubuntu 镜像构建一个新镜像,运行一个 java 项目

# 传统部署流程

  1. 安装 Ubuntu系统
  2. 系统中安装 JDK
  3. 把 jar包 搞到系统里去,可以是上传,也可以是在服务器里用 Maven 构建
  4. 然后使用 java -jar 命令运行
  5. 浏览器访问

# Docker 部署流程

  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. 运行: docker run --name web -p 8090:8090 -d javaweb:1.0

  8. 最后访问 http://localhost:8090/hello/count,其中的 ip 改成你的虚拟机 ip

Dockerfile

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装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

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

使用此 Dockerfile,会导致每个微服务镜像都需要重复安装 JDK 环境变量,可使用 java:8-alpine 镜像代替

# 改进

可使用 java:8-alpine 镜像

Dockerfile

# 指定基础镜像
FROM java:8-alpine

# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar

# 暴露端口
EXPOSE 8090

# 入口,java项目的启动命令
# ENTRYPOINT java -jar /tmp/app.jar  #与下面等价
ENTRYPOINT ["java","-jar","/tmp/app.jar"]
上次更新: 2023/12/05, 09:33:37
基本操作
Docker Compose

← 基本操作 Docker Compose→

最近更新
01
Grafana笔记
12-04
02
Prometheus笔记
12-04
03
Spring Boot 整合Elasticsearch
12-04
更多文章>
Theme by Vdoing | Copyright © 2018-2023 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式