- vừa được xem lúc

[Docker] 3.Docker-compose

0 0 33

Người đăng: KIEU BAO DUY

Theo Viblo Asia

1. Docker-compose

1.1 Docker-compose とは ?

  • Chapter2にてDockerfileを利用により環境を構築するとわかりました。
  • でも、DockerHubにある複数Imageを流用するとか、色々な提案に共有のデータベースを作成したい場合はどうやるべきですか?

➡ 別別のContainerを繋げるようにdocker-composeが生成される。

1.2 インストール

DockerCompose をダウンロードしインストールする。
インストールしてからインストールされているかチェックする。

docker-compose -v

2. 利用仕方

2.1 背景

下記通りにdocker-composeを作成する

  • Container1: アプリはSpringフレームワーク利用する
  • Container2: データベースはMySQLです

    今回のデモは簡単的なシナリオ:①アプリは②データベースに接続しデータを取得し表示する。

2.2 作成手順

① 要求に応じてロカールで簡単的アプリを作成する

ブラウザ上:

MySQL:


② Docker上にアプリをデプロイする

1. ファイルごとの役割説明

  • docker-composer.yml
    プロジェクトのContainerを定義・設定する

  • Dockerfile
    [Docker] 2.Dockerfileにて説明済み

2. ファイル中身
  • docker-composer.yml
    ポイントとしては environment 変数。SpringコンテナーとMySQLコンテナーを連携するため。
services: spring-webapp: # Image名 image: compose-1 # Container名 container_name: spring-container # Dockerファイルからビルドする build: . # Port定義 ports: - "9008:8080" networks: - employee-mysql # アプリ内利用するの変数 environment: DATASOURCE: jdbc:mysql://mysql-database:3306/testdb?allowPublicKeyRetrieval=true&useSSL=false # データベースを先に起動すると定義 depends_on: - mysql-database mysql-database: # Image名 (DockerHubからpullする) image: mysql:8 container_name: mysql-container restart: always networks: - employee-mysql environment: - MYSQL_ROOT_PASSWORD=root networks: employee-mysql: 
  • Dockerfile
FROM tomcat:8-jdk15-openjdk-oracle RUN rm -rf /usr/local/tomcat/webapps/HelloSpringMySQL.war COPY webroot/webapps/HelloSpringMySQL.war /usr/local/tomcat/webapps/ CMD ["catalina.sh","run"] 

3. Docker上にアプリをビルドする
  • compose-1コンテナーをビルドする
    例では単純にDocker ImageをPullするから、このステップが要らなくてもいいですが
    実際にはWebappのImageをPullしたら色々Commandを実施しないと(Dockerfileに参考)ので、このポストにて実際的な例を出したいとおもう。
docker build -t compose-1 . 

  • composerを起動し上のコンテナーをmysqlコンテナーに繋げる
docker-compose up

docker-composeの中でdocker-compose.ymlにて定義されたmysql-containerspring-containerコンテナーを起動したことを確認できる

  • 結果:
    アプリが正常にデプロイ出来ましたが、データベースが初期されてないので、エラー500が出ている。

③ データベースを初期し確認する

1. データベースを初期する
docker container exec -it d9388157a7f4 bash mysql -u root -p create database testdb; use testdb; CREATE TABLE hello ( ID int NOT NULL AUTO_INCREMENT, test varchar(255) NOT NULL, PRIMARY KEY (ID)
); INSERT INTO hello (test) VALUES ("Duy");

2.結果確認
  • 結果:
    二つのContainer (WebAppとDB)を連携できるようになりました。
    ソースコードはGithubに投げましたのでご参考ください。



参考資料

参考ソース

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 395

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 100

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 104

- vừa được xem lúc

Docker - những kiến thức cơ bản phần 1

Giới thiệu. Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker.

0 0 78

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 67

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 121