docker 部署spring boot with 数据库

docker 部署spring boot with 数据库

spring boot 工程目录


└── src
    ├── main
    │   ├── docker
    │   │   └── docker-compose.yml
    │   ├── java
    │   └── resources
    │       ├── application-dev.yml
    │       ├── application-test.yml
    │       ├── application.yml
    │       ├── logback.xml
    │       ├── static
    │       └── templates
    └── test

docker-compose.yml配置文件

version: '3'
services:
  mysql:                # mysql 服务名称
    image: mysql:8.0.22
    container_name: mysql
    restart: always
    volumes:
      - $PWD/data:/var/lib/mysql
    ports:              
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: "111111"
      MYSQL_ROOT_HOST: '%'
      TZ: Asia/Shanghai
    command: --default-authentication-plugin=mysql_native_password
    user: root
    networks:
      - micro
  mvc-app:
    build:
      context: ../java
      dockerfile: ./Dockerfile
    environment:
      TZ: Asia/Shanghai
    ports:
      - 8080:8080
    volumes:
      - $PWD/log:/app/app-logs
    depends_on:
      - mysql1   # mysql服务名称
    networks:
      - micro

# 指定桥接网络
networks:
  micro:
    driver: bridge

application-dev.yml配置文件

spring:
  datasource:
  	# jdbc:mysql://mysql服务名称:容器未映射的端口,这里是3306,而不是3307 !!
    url: jdbc:mysql://mysql:3306/mysql?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 111111

测试类

@GetMapping("/ds/index")
public List<String> index() throws SQLException {
    Connection connection = DriverManager.getConnection(dataSourceProperties.getUrl(), 
                                                       dataSourceProperties.getUsername(),
                                                        dataSourceProperties.getPassword());
    PreparedStatement preparedStatement = connection.prepareStatement("select * from user");
    ResultSet resultSet = preparedStatement.executeQuery();
    List<String> list = new ArrayList<>();
    while (resultSet.next()){
        String user = resultSet.getString("user");
        list.add(user);
    }
    log.info("result: {}", JSON.toJSONString(list));
    log.debug("result: {}", JSON.toJSONString(list));
    log.warn("result: {}", JSON.toJSONString(list));
    log.trace("result: {}", JSON.toJSONString(list));
    return list;
}

docker部署工程

micro-boot
├── data
├── docker-compose.yml
├── Dockerfile
├── log
└── mvc.jar

Dockerfile配置

首先将spring boot 工程进行打包

FROM openjdk:8-jdk-alpine
RUN mkdir /app
WORKDIR /app         # 连接容器后进入的文件夹
COPY mvc.jar /app/app.jar
ENTRYPOINT ["java","-jar","/app/app.jar"]  # 执行命令

启动docker

docker-compose up
Building mvc-app
Step 1/5 : FROM openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/5 : RUN mkdir /app
 ---> Running in 5d29e6a3c3b3
Removing intermediate container 5d29e6a3c3b3
 ---> 4d716ca14c36
Step 3/5 : WORKDIR /app
 ---> Running in 13668487ff05
Removing intermediate container 13668487ff05
 ---> f5af50788398
Step 4/5 : COPY mvc.jar /app/app.jar
 ---> 1a983d221cde
Step 5/5 : ENTRYPOINT ["java","-jar","/app/app.jar"]
 ---> Running in 864eb5d08faf
Removing intermediate container 864eb5d08faf
 ---> 4ea526aeb68f

Successfully built 4ea526aeb68f
Successfully tagged micro-boot_mvc-app:latest
WARNING: Image for service mvc-app was built because it did not already exist. 
To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating mysql1 ... done
Creating mvc-app ... done
Attaching to mysql, mvc-app
...
mvc-app    | 
mvc-app    |   .   ____          _            __ _ _
mvc-app    |  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
mvc-app    | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
mvc-app    |  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
mvc-app    |   '  |____| .__|_| |_|_| |_\__, | / / / /
mvc-app    |  =========|_|==============|___/=/_/_/_/
mvc-app    |  :: Spring Boot ::                (v2.4.3)
mvc-app    | 
...
查看自定义网络

docker-compose启动时,以工程名_networkname拼接, 这里是micro-boot_micro

$ docker inspect micro-boot_micro 
[
    {
        "Name": "micro-boot_micro",
        "Id": "2f8013fc5bc1c6bff5fa206e25823c919f5f4fd3dcac11fff125a35fd6b361d9",
        "Created": "2021-03-07T11:04:19.782251034+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.31.0.0/16",
                    "Gateway": "172.31.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "af9269273c05639b8ec825b9bb56f4fa8e4ad35fa32b6399f751516107f16ec8": {
                "Name": "mysql",
                "EndpointID": "537ef35c442450a0d8dae1d640ac3f5f5e854c6b2a6cd1d208de5bcbf0046110",
                "MacAddress": "02:42:ac:1f:00:02",
                "IPv4Address": "172.31.0.2/16",
                "IPv6Address": ""
            },
            "d71bd1a859e3da7b6bea1fdd6b4acc32f0b86697b3c50048ceeb10c9612cd4b9": {
                "Name": "mvc-app",
                "EndpointID": "0535389acfa11c87ae167139706f960689c695a6f20eb36abe09d79e153676e7",
                "MacAddress": "02:42:ac:1f:00:03",
                "IPv4Address": "172.31.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "micro",
            "com.docker.compose.project": "micro-boot",
            "com.docker.compose.version": "1.27.4"
        }
    }
]

## 查看所有网络
NETWORK ID     NAME                DRIVER    SCOPE
6d53aefd647d   bridge              bridge    local
2f8013fc5bc1   micro-boot_micro    bridge    local
9e2a9b45c38c   zookeeper_default   bridge    local

# docker network命令
$ docker network help
Usage:  docker network COMMAND
Manage networks
Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks


## 看docker服务是否启动
$ docker ps
CONTAINER ID   IMAGE               COMMAND                 PORTS                               NAMES
d71bd1a859e3   micro-boot_mvc-app  "java -jar /app/app.…"  0.0.0.0:8080->8080/tcp              mvc-app
af9269273c05   mysql:8.0.22        "docker-entrypoint.s…"   33060/tcp, 0.0.0.0:3307->3306/tcp  mysql

进入mvc-app容器,然后 pingmysql 服务

$ docker exec -it mvc-app /bin/sh
/app # ls
app-logs  app.jar
/app # ping mysql
PING mysql1 (172.31.0.2): 56 data bytes
64 bytes from 172.31.0.2: seq=0 ttl=64 time=0.134 ms
64 bytes from 172.31.0.2: seq=1 ttl=64 time=0.125 ms
64 bytes from 172.31.0.2: seq=2 ttl=64 time=0.125 ms
64 bytes from 172.31.0.2: seq=3 ttl=64 time=0.126 ms
64 bytes from 172.31.0.2: seq=4 ttl=64 time=0.114 ms
^C
--- mysql1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.114/0.124/0.134 ms

可以看见容器之间通信是OK的

访问

访问 http://localhost:8080/ds/index

[
  "root",
  "mysql.infoschema",
  "mysql.session",
  "mysql.sys",
  "root"
]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值