docker-compose 部署 springboot

系统:CentOS  7.9 64位。已安装:docker、docker-compose、maven、jdk。

docker-compose 部署 springboot mysql nginx。
0、目录结构:

└── exampledemo
    ├── app
    │   ├── Dockerfile
    │   ├── pom.xml
    │   └── src
    │       ├── main
    │           ├── java
    │           │   └── com
    │           │       └── example
    │           │           └── springbootlearn
    │           │               ├── controller
    │           │               │   └── HelloController.java
    │           │               ├── entity
    │           │               │   └── Hello.java
    │           │               ├── Repository
    │           │               │   └── HelloRepository.java
    │           │               └── SpringbootlearnApplication.java
    │           └── resources
    │               ├── application-dev.properties
    │               ├── application-docker.properties
    │               ├── application.properties
    │               └── banner.txt
    ├── docker-compose.yaml
    └── nginx
        └── conf.d
            └── app.conf

docker-compose.yaml:

version: '3'						# 第三代语法来构建 docker-compose.yaml 文件
services:							# 定义服务,用来表示 compose 需要启动的服务
  nginx:							# 二级标签,服务名称,用户自己定义
   container_name: c-nginx			# 容器名称
   image: nginx:1.13				# 指定服务镜像的名称或ID,如果本地镜像不存在,Compose将会尝试拉取这个镜像
   restart: always					# 自动重启,如果服务启动不成功会一直尝试。
   ports:							# 对外开放的端口。这里主机的端口映射到nginx容器端口,和expose的区别是,expose不会将端口暴露给主机。
   - 80:80							# 绑定容器的80端口到主机的80端口。前面的80是主机端口,后面的80是容器的端口
   volumes:							# 加载本地目录下的配置文件到容器目标地址下
   - ./nginx/conf.d:/etc/nginx/conf.d	# 将主机的./nginx/conf.d文件夹映射到容器内的/etc/nginx/conf.d文件夹。

  mysql:
   container_name: c-mysql
   image: mysql/mysql-server:5.7
   environment:
    MYSQL_DATABASE: springbootlearn		# 创建名为springbootlearn的库
    MYSQL_ROOT_PASSWORD: 123456			# 设置root用户的密码
    MYSQL_ROOT_HOST: '%'
   ports:
   - "3306:3306"
   restart: always

  app:
    restart: always
    build: ./app
    working_dir: /app	#设置工作目录为容器内的app文件夹
    volumes:
      - ./app:/app
      - ~/.m2:/root/.m2
    expose:				# expose暴露容器给link到当前容器的容器。和port的区别是,expose不会将端口暴露给主机。这里将当前容器的端口8080暴露给link到本容器app的容器。
      - "8080"
    depends_on:			# 先启动 depends_on 下面的服务后,再启动本服务。依赖于nginx,mysql容器,被依赖容器启动后app容器才启动。
      - nginx
      - mysql
    command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker # 使用该命令启动项目,使用 application-docker.properties配置文件

app.conf:

server {
    listen 80;
    charset utf-8;
    access_log off;

    location / {
        proxy_pass http://app:8080;	# 80端口的请求转发到服务app的8080端口。这里使用是app而不是localhost,是因为他们没有在一个容器中,在一组 compose 的services服务通讯需要使用 services 下的名称进行访问
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /static {
        access_log   off;
        expires      30d;

        alias /app/static;
    }
}

Dockerfile:

FROM maven:3.6-jdk-8

因为docker-compose.yaml中的app部分用了下面这个命令:

command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker

所以在application-docker.properties中将数据库的连接信息
localhost改为mysql。mysql为docker-compose.yaml中services下用户自己定义服务名称

jdbc:mysql://localhost:3306/springbootlearn?serverTimezone=GMT%2B8&useSSL=false

改为:

jdbc:mysql://mysql:3306/springbootlearn?serverTimezone=GMT%2B8&useSSL=false

1、执行命令:docker-compose up 启动服务
在exampledemo目录下,执行

root@xxxxxxxx exampledemo # docker-compose up

2、测试访问

curl http://127.0.0.1/hello

3、查看容器docker ps

root@xxxxxxx ~ # docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED         STATUS                   PORTS                               NAMES
41359054f00b   exampledemo_app          "/usr/local/bin/mvn-…"   5 minutes ago   Up 5 minutes             8080/tcp                            exampledemo_app_1
ac63e615b4c5   mysql/mysql-server:5.7   "/entrypoint.sh mysq…"   5 minutes ago   Up 5 minutes (healthy)   0.0.0.0:3306->3306/tcp, 33060/tcp   c-mysql
c7f7138f3f66   nginx:1.13               "nginx -g 'daemon of…"   5 minutes ago   Up 5 minutes             0.0.0.0:80->80/tcp                  c-nginx

4、docker-compose down 可关闭服务

root@xxxxxxxxxxx exampledemo # docker-compose down
Stopping exampledemo_app_1 ... done
Stopping c-mysql           ... done
Stopping c-nginx           ... done
Removing exampledemo_app_1 ... done
Removing c-mysql           ... done
Removing c-nginx           ... done
Removing network exampledemo_default
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值