微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像

这篇具有很好参考价值的文章主要介绍了微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常见的镜像在DockerHub能找到,但是我们自己写项目得自己构造镜像

1 镜像结构

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker
作用:提高复用性,当应用需要更新时,不再是整个系统重装进行更新 ,而是对需要更新的部分进行更新,其他地方不动——>这就是分层的好处 每做一次新的操作会产生新的一层

简单来说,镜像就是在系统函数库、运行环境的基础上添加应用程序文件、配置文件,然后合并后+编写好的启动脚本(镜像运行的入口)一起形成的文件

所以说,构建镜像,就是实现上述打包过程

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

2 什么是Dockerfile

构建自定义镜像,如果一个个文件去拷贝打包,会非常麻烦;

我们只需要告诉Docker,我们镜像的组成结构,需要哪些BaseImage、拷贝哪些依赖,需要哪些启动脚本,那么Docker将会帮助构建镜像;

而DockerFile:是一个文本文件,里面的指令描述了要什么样的操作来构建镜像;

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

更新详细语法说明,请参考官网文档:Dockerfile reference | Docker Documentation

举例:构建Java项目

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

  • 步骤1:.首先新建一个空文件夹docker-demo,然后将文件拷贝到里面
    微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker
  • 步骤2:.设置DockerFile中的内容(利用DockerFile指令设置镜像的每一层内容:就是函数库、依赖、环境啥的):
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
 
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/docker-demo.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/docker-demo.jar
  • 步骤3:.然后我们在当前目录下 执行docker build命令:创建镜像给到岛屿(本地)

  • 步骤4:进入docker-demo

    将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下

  • 步骤5:运行命令:

    docker build -t javaweb:1.0 .
    

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

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

3 DockerCompose是什么以及其作用

1.DockerCompose是一个文本文件,里面通过指令定义了每个容器如何运行的

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

2.DockerCompose可以快速部署多个容器,而无需一个个docker run

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

不用端口是因为集群,自己访问就行了,所以端口不需要暴露;

version: "3.8"
services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
     -  "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
  web:
    build: .
    ports:
     - "8090:8090"

上面的Compose文件就描述一个项目,其中包含两个容器:

  • mysql:一个基于mysql:5.7.25镜像构建的容器,并且挂载了两个目录
  • web:一个基于docker build临时构建的镜像容器,映射端口时8090
    下面这个web:build : . xxxx类似于:1.用来用户主动自定义build镜像给到岛屿(本地),后面的.代表当前文件目录下build镜像 .然后后面的ports相当于docker run了生成容器

DockerCompose的详细语法参考官网:DockerCompose的详细语法

其实DockerCompose文件可以看做是将多个docker run命令写到一个文件,只是语法稍有差异

4 安装DockerCompose

  • 1.通过命令下载,或者通过资料上传到/usr/lcoal/bin目录也行
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  • 2.修改权限
# 修改权限
chmod +x /usr/local/bin/docker-compose
  • 3.Base自动补全命令
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
  • 4.若出现错误
echo "199.232.88.XXX raw.githubusercontent.com" >> /etc/hosts

5 Compose部署微服务demo

Compose部署微服务demo

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker
这里我们再复习一下DockerFIle:

一种构建镜像最常用的方式,包括:基础镜像信息+层层叠加,维护更新(容器启动指令+镜像操作指令…)

Docker从上到下顺序执行DockerFIle指令,为了指定基本映象,第一条指令时FROM

每条指令都会创建一个新的镜像层,并对镜像进行提交

实现步骤

1.cloud项目需要打成jar包后放到各自服务的文件夹下,同时还需要+DockerFile文件,分别代表:

java8,拷贝的app.jar文件,启动脚本
微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

内容如下:

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar

2.每个服务的DockerFile准备好后(也就是镜像构建好),我们还需要DockerCompose:——>目的是将多个镜像全部启动

version: "3.2"
 
services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

可以看到,其中包含5个service服务:

  • nacos:作为注册中心和配置中心
    • image: nacos/nacos-server: 基于nacos/nacos-server镜像构建
    • environment:环境变量
      • MODE: standalone:单点模式启动
    • ports:端口映射,这里暴露了8848端口
  • mysql:数据库
    • image: mysql:5.7.25:镜像版本是mysql:5.7.25
    • environment:环境变量
      • MYSQL_ROOT_PASSWORD: 123:设置数据库root账户的密码为123
    • volumes:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据
  • userserviceorderservicegateway:都是基于Dockerfile临时构建的

查看mysql目录,可以看到其中已经准备好了cloud_order、cloud_user表:
微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

需要注意的是:

因为微服务将来要部署为docker容器,而容器之间互联不是通过IP地址,而是通过容器名。这里我们将order-service、user-service、gateway服务的mysql、nacos地址都修改为基于容器名的访问。

如下所示:

spring:
  datasource:
    url: jdbc:mysql://mysql:3306/cloud_order?useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos服务地址

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker
微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

3.部署

最后,我们需要将文件整个cloud-demo文件夹上传到虚拟机中,理由DockerCompose部署。

上传到任意目录:
微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像,微服务,微服务,架构,云原生,docker

部署:

进入cloud-demo目录,然后运行下面的命令:文章来源地址https://www.toymoban.com/news/detail-699286.html

docker-compose up -d

到了这里,关于微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Centos7安装Docker,安装DockerCompose(集群化部署),Docker私服镜像仓库

    Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。 Docker CE 支持 64 位版

    2024年02月04日
    浏览(58)
  • Dockerfile自定义镜像

    常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像,就必须先了解镜像的结构才行。 镜像 是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 我们以MySQL为例,来看看镜像的组成结构: 简单来说,镜像就是在系统

    2023年04月10日
    浏览(24)
  • 【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)

    镜像结构 Dockerfile 语法 构建 Java 项目 ① 之前使用的镜像都是 DockerHub 官方提供的 ② 开发者需要将自己的微服务制作为镜像 镜像 是由 应用程序 及其需要的 系统函数库 、 环境 、 配置 、 依赖 打包而成。 📝 镜像是 分层结构 ,每一层称为一个 Layer 1️⃣ BaseImage 层:包含基

    2024年02月03日
    浏览(33)
  • 一文详解Dockerfile自定义镜像

    目录 镜像概念  Dockerfile概念 Dockerfile执行流程 Dockerfile FROM LABEL RUN WORKDIR ADD COPY ENV CMD shell格式:即把要运行的命令当做shell执行 Exec格式:即是 命令,参数格式 镜像概念  镜像是将应用程序及其需要的系统函数库、

    2024年02月04日
    浏览(30)
  • 【docker】Dockerfile自定义镜像

            📝个人主页: 五敷有你         🔥系列专栏: 中间件 ⛺️稳中求进,晒太阳 常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像,就必须先了解镜像的结构才行。 镜像是将应用程序及其需要的系统函数库、环境、配

    2024年04月15日
    浏览(44)
  • Docker --- 基本操作、Dockerfile自定义镜像

    镜像名称 首先来看下镜像的名称组成: 镜名称一般分两部分组成:[repository]:[tag]。 在没有指定tag时,默认是latest,代表最新版本的镜像 如图: 这里的mysql就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。   镜像命令 常见的镜像操作命令如图: 案例

    2023年04月26日
    浏览(43)
  • Docker 进阶指南(上)- 使用Dockerfile自定义镜像

    大家好,我是洋子。上一篇文章《docker 快速入门指南》介绍了Docker的概念,安装Docker方法以及Docker的常用命令,并且在上篇内容当中,我们都是使用 docker pull 命令直接拉取 阿里云 镜像仓库里面提供的官方镜像 比如拉取mysql镜像就使用 docker pull mysql ,拉取centos镜像就使用

    2024年02月11日
    浏览(27)
  • Dockerfile和DockerCompose的使用

    学习命令的正确方式,其实是先手动操作一个简单的命令,然后了解命令的基本含义,然后再看命令的相关文章。 所以,网上哪些docker的文章,基本上都不适于学习入门。 基础命令如下: 首先连接linux,然后创建一个文件夹,然后创建一个Dockerfile文件,没有后缀名。 然后编

    2024年03月14日
    浏览(41)
  • Dockerfile自定义镜像 - 基于 java:8-alpine 镜像,将一个Java项目构建为镜像

    目录   一、前置知识 1.镜像结构 2.Dockerfile是什么 二、自定义一个 java 项目镜像 1.创建一个空目录,在这个空目录中创建一个文件,命名为 DockerFile,最后将 java 项目打包成 jar 包,放到这个目录中 2.编写 Dockerfile 文件 3.使用 docker build 构建为一个镜像 4.使用 docker run 运行镜像

    2024年02月07日
    浏览(38)
  • DockerCompose - 微服务项目部署全过程(最佳实践)

    目录 一、微服务项目部署 1.1、项目介绍 1.2、准备 MySQL 初始化文件 1.3、pom.xml 插件 1.4、测试工作 1.5、编写 Dockerflie 文件 1.6、编写 DockerCompose.yml 文件 1.7、修改 application.yml 文件 1.8、打包上传服务器 1.9、微服务,启动! 1.10、测试结果 a)技术选型:SpringCloud 2021.0.1 、SpringC

    2024年04月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包