SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose

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

目录

一:Dockerfile自定义镜像

1. 镜像结构

2. Dockerfile语法

3. 构建Java项目

二: Docker-Compose

1. 初识DockerCompose

2. 部署微服务集群


前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,感兴趣的同学可以进行学习人工智能学习

一:Dockerfile自定义镜像

前面我们怎么拉取镜像,怎么去创建运行容器;但是都是基于DockerHub官方制作的镜像。接下来就学习一下怎么自己制作镜像!

1. 镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成!

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

基础镜像(BaseImage):一定是某个镜像依赖的系统函数库,这一层称为基础镜像。

入口(Entrypoint):等所有的安装步骤完成,就需要暴露一个端口出去,用来启动使用。

层(Layer):在基础层的基础上给应用配置环境变量,下载安装包,依赖等,每一个操作都是新的一层。

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

2. Dockerfile语法

什么是Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

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

3. 构建Java项目

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

步骤1:新建一个空文件夹docker-demo

mkdir docker-demo

步骤2:拷贝资料中的docker-demo.jar(项目)、jdk8.tar.gz(Java运行环境)、Dockerfile(构建说明书)文件到docker-demo这个目录

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

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
# 进入目录,解压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

#-------------------以上配置基本上都是安装JDK
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

步骤3:运行命令,构建镜像

-t表示tag版本号,点“.”表示当前目录,当前Dockerfile文件所在的目录!

docker build -t javaweb:1.0 . #当前就在Dockerfile所在的目录,所以使用点

构建完成后查看镜像docker images

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

运行容器

docker run --name web -p 8090:8090 -d javaweb:1.0

浏览器进行访问

http://192.168.2.129:8090/hello/count

成功构建并部署成功

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

案例2:基于java:8-alpine镜像,将一个Java项目构建为镜像

上面的过程看起来很繁琐,但是大部分的操作都是安装JDK而已;所以可以基于java:8-alpine镜像来构建Java项目项目,这个镜像默认已经安装了JDK。

Dockerfile文件

# 指定基础镜像
FROM java:8-alpine
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

再次构建

docker build -t javaweb:2.0 . 

二: DockerCompose

1. 初识DockerCompose

什么是DockerCompose

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!

Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

version: "3.8" # 版本
services: #---------------------第一种方式
  mysql: # 服务名称,相当于--name
    image: mysql:5.7.25 # 镜像名称
    environment: # 配置密码,相当于 -e ;对于端口不需要暴露,在集群内部使用,所以不需要配
     MYSQL_ROOT_PASSWORD: 123 
    volumes: # 数据卷配置,-d默认就是
     - "/tmp/mysql/data:/var/lib/mysql"
     -  "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
  
#---------------------第二种方式
  web: # 名称web
    build: . # 点表示在当前目录构建
    ports: # 构建完以后直接启动容器
     - "8090:8090"

# -------------原来的方式
#---------------------第一种方式
# 容器的启动
docker run \
 --name mysql \
 -p 3306:3306 \
 -e MYSQL_ROOT_PASSWORD=123456 \ # 设置密码
 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ # 挂载配置文件
 -v /tmp/mysql/data:/var/lib/mysql \ #挂载数据目录
 -d  mysql:5.7.25 
#---------------------第二种方式
# 构建镜像
docker build -t web:1.0
# 容器的启动‘
docker run --name web -p 8080:80 -d web:1.0

DockerCompose的详细语法参考官网:Overview | Docker Docs

安装DockerCompose

第一步:Linux下需要通过命令下载

# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

 当然如果有现成的docker-compose文件直接上传到/usr/local/bin/目录也可以

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

第二步:修改文件的权限

# 修改权限,增加可执行权限
chmod +x /usr/local/bin/docker-compose

补充:Base自动补全命令,以后编写docker-compose命令会有提示 

# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

如果上述出现错误,需要修改自己的hosts文件:

# 上述出现错误可能是域名识别不了raw.githubusercontent.com
echo "185.199.108.133 raw.githubusercontent.com" >> /etc/hosts

2. 部署微服务集群

将之前学习的cloud-demo微服务集群利用DockerCompose部署到服务器上

第一步:对于cloud-demo需要部署网关gateway、order-service、user-service、nacos、mysql

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

 第二步:在gateway、order-service、user-service编写Dockerfile

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar # 这个app.jar就是我们需要打的jar包
ENTRYPOINT java -jar /tmp/app.jar

第三步:编写docker-compose(每个服务启动)

version: "3.2" # 版本

services: # 服务
  nacos: # ---------------第一个服务nacos
    image: nacos/nacos-server # nacos的镜像
    environment: # 环境,相当于-m单击运行的配置
      MODE: standalone
    ports: # 端口
      - "8848:8848"
  mysql: # ---------第二个服务mysql
    image: mysql:5.7.25 # 镜像名称
    environment:
      MYSQL_ROOT_PASSWORD: 123 # 密码
    volumes: # 数据卷挂载
      - "$PWD/mysql/data:/var/lib/mysql" # $PWD得到当前的目录
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  user-service: # ---------第三个服务user-service
    build: ./user-service
  order-service: # ---------第四个服务order-service
    build: ./order-service
  gateway: # ---------第五个服务gateway,网关暴露了接口
    build: ./gateway
    ports:
      - "10010:10010"

第四步:修改自己的cloud-demo项目(gateway,order-service,user-service),将数据库、nacos地址都命名为docker-compose中的服务名------------》localhost改为对应的服务名,使用Docker-compose部署,所有服务之间都可以用服务名进行访问

例如:以下这种情况,localhost改为服务名称nacos

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

第五步:使用maven打包工具,将项目中的每个微服务(gateway,order-service,user-service)都打包为app.jar

   <build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

对cloud-demo项目,利用生命周期,先clean,然后在打包package;将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中

整体目录

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

每一个服务的目录结构

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

第六步:将cloud-demo上传至虚拟机,进入cloud-demo目录

docker-compose up -d  # up参数表示创建并执行容器,-d后台运行

docker ps查看创建的容器

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose,第五步:互联网分布式,spring cloud,spring,docker,微服务

注:如果你的网速够快一下子就把镜像构建出来,在启动时查看docker-compose logs -f查看日志会发现有的服务启动有问题,这是因为nacos还没有完全启动的原因

# 建议重启一下除nacos的其它服务
docker-compose restart order-service gateway user-service

打开浏览器去访问http://192.168.2.129:10010/user/2?authorization=admin能正常访问,表示部署成功!文章来源地址https://www.toymoban.com/news/detail-776410.html

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

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

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

相关文章

  • Dockerfile自定义镜像

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

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

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

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

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

    2024年04月15日
    浏览(51)
  • 一文详解Dockerfile自定义镜像

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

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

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

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

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

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

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

    2024年02月07日
    浏览(46)
  • 【Docker】初识 Docker,Docker 基本命令的使用,Dockerfile 自定义镜像的创建

    在部署大型项目时,常常面临多组件、复杂的依赖关系和不同环境之间的差异,这些因素可能导致以下问题: 复杂的依赖关系: 由于项目组件众多,各个组件之间的依赖关系变得复杂,容易出现版本不匹配或兼容性问题。 兼容性问题: 项目在不同的环境中可能会遇到兼容性

    2024年02月05日
    浏览(56)
  • 微服务框架springcloud(实用篇)【1】SpringCloud

    随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 概念: 将业务的所有功能集中在一个项目中开发,打成一个包部署。 单体架构的优缺点如下:         优点:架构简单、部署

    2024年02月06日
    浏览(31)
  • SpringCloud微服务 【实用篇】| 认识微服务

    目录 一:认识微服务 1. 微服务框架介绍 2. 服务架构演变 3. 微服务技术对比 4. SpringCloud 图书推荐:《巧用ChatGPT快速提高职场晋升力》 本课程学习于黑马,会通过分层次学习,分为三部分去讲解微服务: 实用篇、高级篇、面试篇 。 分层次学习 微服务技术栈 思考:什么是

    2024年02月08日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包