zoukankan      html  css  js  c++  java
  • Docker 镜像编排并部署SpringBoot应用

    Docker-compose是一个基于Docker的编排工具,所谓编排个人理解就是将不同的镜像通过配置,组成一个新的运行环境,官方定义是:Compose is a tool for defining and running multi-container Docker applications.

    很简单的一句话,下面我们看下怎么部署一个JavaWeb项目.主要有几大步骤:

    • 安装Dcoker 和Docker-compose
    • 编译项目生成JAR包
    • 创建自定义的docker镜像
    • 创建docker-compose的配置文件
    • 启动服务

    安装

    安装docker 和 docker-compose 一样都非常的简单,这里不在多赘述,官网都有非常详细的教程.
    至于docker_compose就是一个命令文件,将其所在的路径配置PATH环境变量中即可,不配置也行,这样的话就要打全路径了,比较麻烦.

    启动Docker服务

    我是用的是Manjaro的Linux发行版本,启动docker服务的命令systemctl start docker,

    $ docker version
    Client:
     Version:      18.05.0-ce
     API version:  1.37
     Go version:   go1.10.2
     Git commit:   f150324782
     Built:        Wed May 16 22:27:45 2018
     OS/Arch:      linux/amd64
     Experimental: false
     Orchestrator: swarm
    
    Server:
     Engine:
      Version:      18.05.0-ce
      API version:  1.37 (minimum version 1.12)
      Go version:   go1.10.2
      Git commit:   f150324782
      Built:        Wed May 16 22:28:17 2018
      OS/Arch:      linux/amd64
      Experimental: false
    

    查看Docker-compose

    下载docker-compose完成之后,使用chmod +x docker-componse 来授权,否则会出现权限拒绝的报错信息

    配置完成只有,在命令行中输入docker-compose version查看是否安装成功,输出类似以下信息,则代表成功

    
    $ docker-compose version
    docker-compose version 1.22.0-rc2, build 6817b533
    docker-py version: 3.4.1
    CPython version: 3.6.6
    OpenSSL version: OpenSSL 1.1.0f  25 May 2017
    
    

    创建Docker镜像

    创建配置文件

    此文件名位Dockerfile

    FROM hub.c.163.com/library/java:8
    VOLUME /tmp
    ADD dmc_user.jar app.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
    • 依赖网易云的java:8镜像
    • 拷贝jar文件到镜像中
    • 执行命令运行

    下面我们将使用Shell脚本的方式来利用这个Docker文件来进行创建镜像

    编译生成镜像文件

    由于这里使用SpringBoot创建的项目,个人使用Gradle构建项目,使用Maven或者其他方式构建的均可,这里写了一个Shell脚本,如下所示:

    
    #!/usr/bin/env bash
    
    #配置相关的路径地址
    #配置项目名称
    project_name="DMC_USER"
    # 配置源码地址
    project_dir="/home/yan/code/work/zhuxun/dmc_user"
    #配置shell地址
    shell_dir="/home/yan/code/shell/dmc/user"
    
    echo "正在准备编译项目${project_name}....."
    #切换到项目目录
    cd ${project_dir}
    echo "已经成功切换到${project_name}的工作目录......"
    #使用gradle编译,跳过单元测试
    ./gradlew build -x test
    if [ $? -eq 0 ]; then
        echo "正在拷贝JAR文件............"
    #    编译成功,则将JAR文件拷贝当前Shell目录
        cp build/libs/dmc_user-0.0.1-SNAPSHOT.jar ${shell_dir}/dmc_user.jar
        cd ${shell_dir}
    	echo "编译成功,正在编译为Docker镜像,请等待...."
    #	使用docker build命令构建镜像文件,此时会读取Dockerfile文件
    	docker build -t dmc_user:latest ${shell_dir}
    	if [ $? -eq 0 ]; then
    		echo "编译镜像成功,请使用docker images命令查看效果....."
    	fi
    fi
    
    

    添加运行权限,运行之......

    由于我这里使用的多个项目进行同事运行,因此需要在次编译另外一个项目,方法类似,这里不在赘述.
    编译完成之后,我们在Dockerfile中查看一下镜像

    
    $ docker images
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    dmc_user                      latest              a7ea7b79390f        3 hours ago         692MB
    dmc_apim                      latest              56c7f37aee13        16 hours ago        704MB
    hub.c.163.com/library/java    8                   a001fc27db5a        19 months ago       643MB
    
    

    创建配置文件

    到这里,我们的镜像已经准备好了,下面我们使用docker-compose来编排镜像,组成新的服务.在shell的目录下创建 文件名称docker-compose.yml的配置文件,内容如下(删除注释)...

    
    # 配置文件的版本
    version: '2'
    # 创建的服务,这里我创建了3个服务,两个jar项目作为演示,一个mysql作为服务器
    services:
      dmc_api:
    #    容器的名称
        container_name: dmc_apim
    #    容器的端口信息,这里的SpringBoot项目的端口是9092,可以在宿主机通过8082访问
        ports:
          - "8082:9092"
    #      依赖的docker images镜像名称,当然也有版本这里是简写 dmc_api:latest
        image: dmc_apim
    #    创建自服务的依赖项,此服务依赖属于mysql,在我们创建的三个服务中的最后一个
        depends_on:
          - dmc_dev_mysql
    
      dmc_user:
        container_name: dmc_user
        ports:
          - "8081:9091"
        image: dmc_user
        depends_on:
          - dmc_dev_mysql
    
      dmc_dev_mysql:
    #  这个属性非常重要,在SpringBoot的服务中,可以通过这个名称访问,如果名称冲突,docker_compose会自动的添加后缀导致SpringBoot项目找不到数据库连接,
    #  从而启动失败,因此需要配置容器的名称
        container_name: dmc_dev_mysql
    #    挂载目录,其中 /docker-entrypoint-initdb.d/ 是比较重要的,他可以进行mysql的初始化,在我们的mysql服务的时候启动初始化脚本
    #    因此需要在挂载的目录下创建init.sql脚本文件,用于初始化
        volumes:
          - ./data/:/var/lib/mysql/
          - ./mysql/init/:/docker-entrypoint-initdb.d/
    #      配置映射端口,这里mysql的端口默认是3306,我们将其映射到宿主机的9936端口
        ports:
          - "9936:3306"
    #      依赖的镜像
        image: hub.c.163.com/library/mysql
    #    镜像运行需要的参数,可以根据自己的需要来配置,这个请参考镜像的说明文件
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD: yse
    
    
    

    这里和创建docker Image类似,都是使用配置文件,我们来看下我们的配置文件,配置文件名称是固定的,因此要求名称要写对,否则会报一些错误:

    
    $ docker-compose up
    ERROR: 
            Can't find a suitable configuration file in this directory or any
            parent. Are you in the right directory?
    
            Supported filenames: docker-compose.yml, docker-compose.yaml
    
    

    可以看到,最后一句话中说明了配置的文件名称 Supported filenames: docker-compose.yml, docker-compose.yaml

    ## 启动Docker-compose
    
    使用命令```docker-compose up```可以启动编排,要求运行此命令运行路径下必须有docker-compose的配置文件,否则会报上面的找不到文件,
    添加 *-d *    就可以后台运行,查看docker-compose的帮助文件我们看下docker容器的状况:
    
    ```shell
    $ docker ps -a
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                   PORTS                    NAMES
    6c2b3823bd93        dmc_apim                      "java -Djava.securit…"   2 hours ago         Up 2 hours               0.0.0.0:8082->9092/tcp   dmc_apim
    f1473486bbec        dmc_user                      "java -Djava.securit…"   2 hours ago         Up 2 hours               0.0.0.0:8081->9091/tcp   dmc_user
    3c632926a642        hub.c.163.com/library/mysql   "docker-entrypoint.s…"   2 hours ago         Up 2 hours               0.0.0.0:9936->3306/tcp   dmc_dev_mysql
    
    

    可以看到两个SpringBoot项目和一个MySql项目在docker中运行完成.....

    附录 docker-compose命令

    命令名称 说明
    docker-compose build Build or rebuild services
    docker-compose bundle Generate a Docker bundle from the Compose file
    docker-compose config Validate and view the Compose file
    docker-compose create Create services
    docker-compose down Stop and remove containers, networks, images, and volumes
    docker-compose events Receive real time events from containers
    docker-compose exec Execute a command in a running container
    docker-compose help Get help on a command
    docker-compose images List images
    docker-compose kill Kill containers
    docker-compose logs View output from containers
    docker-compose pause Pause services
    docker-compose port Print the public port for a port binding
    docker-compose ps List containers
    docker-compose pull Pull service images
    docker-compose push Push service images
    docker-compose restart Restart services
    docker-compose rm Remove stopped containers
    docker-compose run Run a one-off command
    docker-compose scale Set number of containers for a service
    docker-compose start Start services
    docker-compose stop Stop services
    docker-compose top Display the running processes
    docker-compose unpause Unpause services
    docker-compose up Create and start containers
    docker-compose version Show the Docker-Compose version information

    更多内容请查看 Docker-componse官网教程

  • 相关阅读:
    基础算法:两数之和
    adb常用命令食用方法
    C语言面试题
    C语言经典笔试题目
    嵌入式01 51单片机实验02 sfr和sbit bit和int char
    C语言 01 volatile关键字
    C++ 01 基础知识点
    嵌入式02 STM32 实验11 NVIC和中断总结
    嵌入式02 STM32 实验10 定时器中断
    嵌入式02 STM32 实验09 独立/窗口看门狗
  • 原文地址:https://www.cnblogs.com/zhoutao825638/p/10382182.html
Copyright © 2011-2022 走看看