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就可以访问了。本篇到些结束,第三篇扯点其它的。

原文地址:https://www.cnblogs.com/bear129/p/12525114.html