• docker-compose + spring boot + mysql + redis + nginx 发布web应用: part 2


    -----**  原创 **------

    接上一篇:  docker-compose + spring boot + mysql + redis + nginx 发布web应用: part 1

    1. 上传文件

       

        将图中的文件,使用ssh工具上传至云服务器(或是本地的vmware虚拟机)。目录就用/opt/compose-demo

        从现在开始,所有的命令都是在 /opt/compose-demo这个目录下进行

    2. 生成boot应用的docker镜像

        # cd /opt/compose-demo

        # docker build . -t compose-demo:1.0

     

    3. 讲解一下 docker-compose.yml

        这里的文件内容用于讲解,不要复制这里的内容,用 part 1 里的内容

        这里有个连接: https://docs.docker.com/compose/compose-file/, 是docker-compose.yml文件的reference

    version: '3'                           这个是版本号,可以看下对应的docker版本
     
    services:                              要发布的服务, docker-compose.yml的关键字
      nginx:                               nginx服务名称
        image: nginx:1.15                  使用的docker镜像  
        volumes:
          - ./:/etc/nginx/conf.d           把nginx.conf所在目录,这里用的是当前目录( ./ 就是/opt/compose-demo ),  映射到nginx docker容器的/etc/nginx/conf.d
        ports:                             这样,/opt/compose-demo/里的nginx.conf, 就会被映射到 /etc/nginx/conf.d目录里。
          - 80:80                          这个配置对于nginx:alpine镜像不起作用。 要用nginx:1.13, nginx:1.15这样的镜像。
          - 443:443
        links:                             有了links, depends_on, nginx.conf里 upstream 里的配置才会起作用
          - spring-boot-1                  因为boot应用要启动两个docker, 所以这里写了两个,如果三个,就写三个
          - spring-boot-2
        depends_on:
          - spring-boot-1
          - spring-boot-2
          
      mysql:                               mysql 服务名称
        image: mysql:5.7
        volumes:
          - db_data:/var/lib/mysql         volume设置,这个db_data不是当前目录里,具体在哪,要用docker volume查找。这个在第三部分讲。
        restart: always
        environment:
          MYSQL_ROOT_HOST: '%'
          MYSQL_ROOT_PASSWORD: root123     docker容器里运行的mysql的root密码
          MYSQL_DATABASE: compose
          MYSQL_USER: boot                 boot应用使用的是这个用户名和密码
          MYSQL_PASSWORD: boot123
       
      redis:                               redis服务名称
        image: redis
        container_name: my_redis
        command: redis-server --requirepass redis123    为redis设置密码,在boot应用的application-compose.yml里要设置这个密码才能访问
        ports:
          - "6379:6379"
           
      spring-boot-1:                       boot应用的一个docker
        image: compose-demo:1.0            这个镜像是 docker build . -t compose-demo:1.0 这个命令,使用 Dockerfile生成的。
        # build: .
        # ports:
        #   - "10101:10101"
        expose:
          - "10101"                       这样写,docker外部,不是这个docker-compose启动的docker,访问不了。在同一个docker-compose里启动的容器有相同的一个网络.
        restart: always                   
    
        depends_on:
          - mysql
          - redis
    
      spring-boot-2:                      boot应用的另一个docker, 还可以再加,复制粘贴。
        image: compose-demo:1.0
        # build: .
        expose:
          - "10101"
        restart: always
    
        depends_on:
          - mysql
          - redis
           
        
    volumes:
      db_data:

    4. 下载镜像

        因为要用到redis, mysql, nginx的docker镜像,所以现在可以

        # docker-compose up -d

        -d 是不显示运行时的日志输出, 可以使用  docker-compose logs 查看。

        这样,nginx, mysql, redis的镜像就会就pull下来。但在执行这个命令前,最好在 /etc/docker/daemon.json里加上你的docker阿里云的加速器的配置。否则会很慢,还有可能半路挂掉。

     

      可以看到,redis, mysql, spring boot 2个,nginx 的容器都启动了。

    5. 初始化mysql数据库

      1) 查看 msyql docker id

          # docker ps

         

     2) 把 compose.sql文件copy到docker容器里 /opt目录下

         # docker cp compose.sql edabb0:/opt        

         这里 edabb0是上图中,红框内的字符串的前6位,至少要写6位,7位,8位。。。都行。要换成你自己的。

     3)进入mysql的docker容器,使用 docker容器里 /opt/compose.sql 初始化数据库

         # docker exec -it edabb0 /bin/bash   这个命令是进入docker 容器

         # mysql -u root -p                    

           输入docker-compose.yml里设置的root用户的密码

         mysql > source /opt/compose.sql

     

      数据库初始化后,输入 exit 退出 mysql 客户端,再输入 exit 退出docker

    6. 打完收功,验证一下

      

       因为nginx的端口是80, 所以不用端口号访问。两次 /redis的访问,返回的ip 不一样, 一个是172.22.0.5, 一个172.22.0.4,看来两个boot应用都可以访问了。

       如果你的虚拟机或ecs对外开放80,可以用浏览器访问:   (我用的是云主机,可以公网访问,不过你看到这篇文章时,应该就关掉了)。

      

    其实看着挺多,就是运行docker-compose up -d,然后初始化mysql就可以访问了。本篇到些结束,第三篇扯点其它的。

  • 相关阅读:
    [Leetcode] Two Sum
    [Leetcode] 4Sum
    [Leetcode] Word Break
    [Leetcode] Evaluate Reverse Polish Notation
    [Leetcode] Distinct Subsequences
    [Leetcode] Triangle
    [Leetcode] Single Number II
    [Leetcode] Convert Sorted Array to Binary Search Tree
    一起手写吧!Promise!
    一起手写吧!sleep函数!
  • 原文地址:https://www.cnblogs.com/bear129/p/12525114.html
Copyright © 2020-2023  润新知