LoginSignup
0
0

Docker Composeを使用してMySQLとSping Bootの複数サーバコンテナを作成する

Last updated at Posted at 2024-02-25

Docker Compose

Docker Compose は、マルチコンテナー アプリケーションを定義および実行するためのツールです。Compose を使用すると、アプリケーション スタック全体の制御が簡素化され、単一のわかりやすい YAML 構成ファイルでサービス、ネットワーク、ボリュームを簡単に管理できるようになります。

Docker Composeを使用して複数サーバコンテナを作成する

Sping Bootアプリ作成

@RestController
public class HelloController {

  // 「/hello」へアクセスがあった場合
  @GetMapping("/hello")
  public String helloWorld() {
    // 文字列を返す
    return "Hello Spring-Boot World!!";
  }

Sping BootのDockerfileを作成する

FROM eclipse-temurin:11
RUN mkdir /opt/app
COPY demo.jar /opt/app
CMD ["java", "-jar", "/opt/app/demo.jar"]

Docker Composeのyamlを作成する

version: '3.8'

services:
  mysql:
    container_name: my-mysql
    image: mysql
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: admin
    restart: always
    networks:
      - my-network

  springDemo:
    container_name: spring-demo
    build: ./springboot
    image: spring-demo
    ports:
     - "8080:8080"
    working_dir: /app
    networks:
      - my-network

volumes:
  mysql-data:

networks:
  my-network:

MySQLとSping Bootのサーバを作成する

$ tree ./
./
├── docker-compose.yml
└── springboot
    ├── Dockerfile
    └── demo.jar
$ docker compose up -d
[+] Running 3/3
 ✔ Network compose-mysql_my-network  Created                                                             0.2s
 ✔ Container spring-demo             Started                                                             0.7s
 ✔ Container my-mysql                Started                                                             0.8s

Sping Bootのアプリを確認する
image.png
MySQLを確認する

$ docker container exec -it my-mysql sh
sh-4.4# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> exit
Bye
sh-4.4# exit
exit
$ docker container ls -a
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS
                              NAMES
3d6d4923451a   mysql         "docker-entrypoint.s…"   6 minutes ago   Up 6 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   my-mysql
de315cae95a4   spring-demo   "/__cacert_entrypoin…"   6 minutes ago   Up 6 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              spring-demo
$ docker volume ls
DRIVER    VOLUME NAME
local     b371e62c3e10b85c9c1ef23a17fecef7c858283a6feef6f892cf39414985aef3
local     compose-mysql_mysql-data
local     mysql-data
$ docker network ls
NETWORK ID     NAME                       DRIVER    SCOPE
2b1c922114f4   bridge                     bridge    local
eec3c81527a8   compose-mysql_my-network   bridge    local
0ca730ab1c0e   host                       host      local
4b11b0190fa9   none                       null      local
$ docker compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
my-mysql            mysql               "docker-entrypoint.s…"   mysql               7 minutes ago       Up 7 minutes        0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
spring-demo         spring-demo         "/__cacert_entrypoin…"   springDemo          7 minutes ago       Up 7 minutes        0.0.0.0:8080->8080/tcp, :::8080->8080/tcp

全てコンテナを停止する

$ docker compose stop
[+] Running 2/2
 ✔ Container spring-demo  Stopped                                                                        0.5s
 ✔ Container my-mysql     Stopped                                                                        3.3s
 $ docker compose ps
NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS
$ docker container ls -a
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS                        PORTS     NAMES
3d6d4923451a   mysql         "docker-entrypoint.s…"   9 minutes ago   Exited (0) 13 seconds ago
my-mysql
de315cae95a4   spring-demo   "/__cacert_entrypoin…"   9 minutes ago   Exited (143) 16 seconds ago
spring-demo

全て停止してコンテナーを完全に削除する
--volumes:使用されるデータ ボリュームも削除する

$ docker compose down --volumes
[+] Running 4/4
 ✔ Container spring-demo             Removed                                                             0.0s
 ✔ Container my-mysql                Removed                                                             0.0s
 ✔ Volume compose-mysql_mysql-data   Removed                                                             0.0s
 ✔ Network compose-mysql_my-network  Removed
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ docker volume ls
DRIVER    VOLUME NAME
local     b371e62c3e10b85c9c1ef23a17fecef7c858283a6feef6f892cf39414985aef3
local     mysql-data
$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
2b1c922114f4   bridge    bridge    local
0ca730ab1c0e   host      host      local
4b11b0190fa9   none      null      local
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0