Docker Compose


緒論


前回の記事では、Dockerの基本概念、Dockerを使用する理由、Spring BootサーバをDocker上に簡単に配置して実行してみました.また、個人のドック映像をドックに解凍してみましたが、ドック公式に発表されたMySQLNginXApacheJenkinsMySQLなどの有名なソフトウェアがドックにアップロードされました.
今回は、ドッキングステーションから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 Bootspring.datasource.urlが動作していることが確認できる.
ちなみに、docker-composeは、ドッキングステーションが仮想化技術を使用しているため、ドッキングステーションのlocalhostアドレスがオペレーティングシステムで使用されているネットワークのlocalhostアドレスとは異なるため、独自のローカルIPアドレスを提供する必要があります.
同様に、アンドロイド仮想マシンではlocalhostの動作が異なるため、キャッシュを迅速に行うことができる.
データベースは通常、ボリュームオプションでデータベースファイルを保存します.

これまでの動作の過程は図式化されており,ほぼ上記のようになっている.

Docker compose


上記の図に示すように、これらのプログラムの実行手順は以下の通りです.
  • mysqlをドック
  • にダウンロード
  • mysql
  • を実行
    構築
  • スプリングガイド
  • 運転
  • スプリングガイド
  • これで4段階を経なければならない.つまり、簡単なスプリングブートとデータベースのみを実行しても、4つのコマンドを入力する必要があります.実際のサービスといえば、この2つのアプリケーションだけでなく、多くのプログラムを順番に実行させるのは、暗記しにくくて面倒なことです.
    しかし、ここでは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
    
    まず、versiondocker-composeのバージョンを表し、docker composeがサービスを提供するコンテナ情報を以下から書きます.
    まず、mysql_dbの名義で容器が動作し、この容器はmysql:5.6の画像を使用する.問題が発生した場合、再実行を続行できるrestartのオプションが示されています.
    portおよびenvironmentは、それぞれdoker-runkermanに-p、eのコンテンツを書き込みます.ここで、MYSQL_DATABASEオプションを使用すると、コンテナでmysqlを実行し、データベースを生成できます.
    次はスプリング起動容器です.buildオプションを使用すると、Dockerfileを位置決めできます.最も重要な部分はdepends_onenvironmentです.
    実行プロセスを上から見てみましょう.
  • mysqlをドック
  • にダウンロード
  • mysql
  • を実行
    構築
  • スプリングガイド
  • 運転
  • スプリングガイド
  • mysqlは、このようなspring起動ファイルよりも先に実行する必要があります.SpringBootにインストールされている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が単純にコマンドとして実行されることを正常に確認することができる.