Docker Compose
緒論
前回の記事では、Dockerの基本概念、Dockerを使用する理由、Spring BootサーバをDocker上に簡単に配置して実行してみました.また、個人のドック映像をドックに解凍してみましたが、ドック公式に発表された
MySQL
、NginX
、Apache
、Jenkins
、MySQL
などの有名なソフトウェアがドックにアップロードされました.今回は、ドッキングステーションから
docker-compose
をインポートして実行し、スプリングガイドファイルを接続し、docker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.6
でこのプロセスを簡略化する方法について説明します.この文章はDockerの勉強と勉強をまとめた文章で、間違いがあるかもしれません.
MySQL on Docker
端末で
mysql:5.6
を実行します.まず、ローカルDockerイメージでmysql-client
を検索し、そうでない場合はDockerセンターからダウンロードしてみます.その後、
MySQL workbench
またはroot
などの任意のデータベースプログラムを使用して、3307番ポートにMySQL
という名前のパスワードを入力すると、CREATE DATABASE mysql_docker;
が実行されていることがわかります.その後、
entity, repository, controller
によってデータベースが生成される.MySQLがパソコンにインストールされていなくても、大きなコンテナで瞬時にデータベースを実行できます.
Spring Boot Application
まずspringBootアプリケーションを作成しました.コードはここです。で見ることができ、コーヒー情報を追加およびインポートする簡単なAPIであり、クローン化することもできるし、
application.properties
を単独でコピーすることもできる.次に、
docker ps -a
を以下のように記述してMySQLドライバとJPAを接続します.spring.datasource.url=jdbc:mysql://<로컬 아이피 주소>:3307/mysql_docker?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.format_sql=true
logging.level.org.hibernate.type=trace
次いで、3307番ポートMySQL
での正常な動作をdocker build -t spring-docker .
によって検証した.docker run -p 8081:8080 spring-docker
によってイメージを形成します.その後、MySQL
を介してアプリケーションを実行します.これにより正常踏切の
Spring Boot
とspring.datasource.url
が動作していることが確認できる.ちなみに、
docker-compose
は、ドッキングステーションが仮想化技術を使用しているため、ドッキングステーションのlocalhostアドレスがオペレーティングシステムで使用されているネットワークのlocalhostアドレスとは異なるため、独自のローカルIPアドレスを提供する必要があります.同様に、アンドロイド仮想マシンではlocalhostの動作が異なるため、キャッシュを迅速に行うことができる.
データベースは通常、ボリュームオプションでデータベースファイルを保存します.
これまでの動作の過程は図式化されており,ほぼ上記のようになっている.
Docker compose
上記の図に示すように、これらのプログラムの実行手順は以下の通りです.
構築
しかし、ここでは
docker-compose
を使用して、これらのすべてのプロセスを圧縮し、一度に実行することができる.docker
は通常一緒にインストールされ、yml
ファイルを作成することによって、プロセス全体を一連のファイルに書くことができ、ファイルを実行するコマンドによってプロセス全体を削減することができます.プロジェクトルートフォルダに
docker-compose.yml
という名前のファイルを作成し、次のように記入します.参考までに、ファイルはDockerfile
と異なり、yml
の形式を守れば、ファイル名は自由に変更できます.version: '3'
services:
mysql_db:
image: mysql:5.6
restart: always
ports:
- 3307:3306
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_ROOT_USER=root
- MYSQL_USER=user
- MYSQL_PASSWORD=password
- MYSQL_DATABASE=mysql_docker
spring-docker:
build: .
restart: always
ports:
- 8081:8080
depends_on:
- mysql_db
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://192.168.0.11:3307/mysql_docker?serverTimezone=Asia/Seoul
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=root
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
まず、version
はdocker-compose
のバージョンを表し、docker compose
がサービスを提供するコンテナ情報を以下から書きます.まず、
mysql_db
の名義で容器が動作し、この容器はmysql:5.6
の画像を使用する.問題が発生した場合、再実行を続行できるrestart
のオプションが示されています.portおよびenvironmentは、それぞれdoker-runkermanに-p、eのコンテンツを書き込みます.ここで、
MYSQL_DATABASE
オプションを使用すると、コンテナでmysqlを実行し、データベースを生成できます.次はスプリング起動容器です.buildオプションを使用すると、
Dockerfile
を位置決めできます.最も重要な部分はdepends_on
とenvironment
です.実行プロセスを上から見てみましょう.
構築
jdbc
にはmysqlが必要です.したがって、depends_on
のオプションで、mysql_db
が先に実行された後に実行されると書けばよい.また、環境の
application.properties
でJavaを使用しない部分はオプションを単独で提供することができ、SPRING_JPA_HIBERNATE_DDL_AUTO=update
という部分はここに記入する必要があります.なぜなら、JPAを使用したSpringBootアプリケーションをdocker composeで実行した場合、
Hibernates
はデータベースにエンティティオブジェクトを自動的に作成しないからです.解決策は、sql文を直接作成し、
docker-compose.yml
ファイルでオプションとして実行することです.しかし、このようにすると@Entity
と分岐する可能性があるので、最も簡単なのはenvironment
に直接価格を決めて解決します.その後、端末上で
docker-compose -f docker-compose.yml up
を実行すると、MySQL
およびSpring Boot
が単純にコマンドとして実行されることを正常に確認することができる.Reference
この問題について(Docker Compose), 我々は、より多くの情報をここで見つけました https://velog.io/@peppermint100/Docker-Composeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol