1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VSCode Remote Containersで.NET Core + MySQL + Elasticsearchの開発環境構築

Last updated at Posted at 2020-10-24

現在参画しているプロジェクトにて、全文検索機能の要件があったため、既存の構成+Elasticsearchの環境構築をしてみました。
今回は開発環境構築の部分についてご紹介しようと思います。

#はじめに
今回ご紹介するのはあくまで開発環境用の最小構築であり、運用環境の構築にそのまま転用できる内容ではないことを予めご了承ください。

#環境

  • MacBook Pro 10.15.7
  • VSCode 1.50.1
  • Docker 19.03.13
  • Docker For Mac 2.4.0.0
  • Docker image version
    • mysql:8.0
    • sebp/elk:oss-792
    • mcr.microsoft.com/dotnet/core/sdk:3.1

#ソースコード
https://github.com/t-ash0410/asp.net-core-sample

#ディレクトリ構成

root/
├ .devcontainer/
 ├ db/
  ├ init/
  └ create_db.sql
   └ my.conf
 ├ devcontainer.json
 └ docker-compose.yml

create_db.sqlとmy.confに関しての説明は割愛します。

#docker-compose.yml

docker-compose.yml
version: '3'

services:
  dotnet_db:
    image: mysql:8.0
    container_name: dotnet_db
    ports:
      - "3306:3306"
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: password
    volumes:
      - "db_data:/var/lib/mysql"
      - "./db/my.conf:/etc/mysql/my.conf"
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --skip-character-set-client-handshake

  dotnet_elk:
    image: sebp/elk:oss-792
    container_name: dotnet_elk
    ports: 
      - "5601:5601"
      - "9200:9200"

  dotnet_web:
    image: mcr.microsoft.com/dotnet/core/sdk:3.1
    container_name: dotnet_web
    ports:
      - "8080:8080"
    environment:
      DB_CONNECTION_STRING: "server=dotnet_db;port=3306;uid=root;pwd=password;database=asp_net_sample"
      ELASTIC_SEARCH_SERVER: "http://dotnet_elk:9200"
    volumes:
      - "../:/dotnet-app"
    command: /bin/bash -c "while sleep 1000; do :; done"

volumes:
  db_data:
    driver: local

###各項目について

image
作成するコンテナのイメージを指定
 
container_name
作成するコンテナ名を指定
 
ports
公開するポートを指定
今回の形式は ホストマシンのポート:コンテナのポート での指定となります。
 
environment
環境変数の宣言
 
volumes
ボリュームのマウント

相対パス:絶対パスの形式は、ホストマシン上の相対パスをコンテナ上の絶対パスにマウントしています。
この場合に指定する相対パスはdocker-compose.ymlが配置してあるディレクトリからの相対パスである必要があります。

volumesに定義したkey:絶対パスの形式は、volumesに定義されたkeyに該当するdata volumeをコンテナ上の絶対パスにマウントしています。
 
command
コンテナのセットアップ完了後に実行されるコマンドを指定  

#devcontainer.json

devcontainer.json
{
	"name": "books app",
	"dockerComposeFile": [
	  "docker-compose.yml"
	],
	"workspaceFolder": "/dotnet-app",
	"service": "dotnet_web",
	"extensions": [
		"ms-dotnettools.csharp",
		"jmrog.vscode-nuget-package-manager",
		"ms-azuretools.vscode-docker",
		"p1c2u.docker-compose"
	],
	"settings": {
	  "editor.tabSize": 2,
	  "files.insertFinalNewline": true,
	  "files.trimFinalNewlines": true,
	  "terminal.integrated.shell.linux": "/bin/bash"
	},
	"shutdownAction": "none"
}

###各項目について

name
作成するアプリケーション名を指定
 
dockerComposeFile
dockerコンテナの作成に使用するdocker-composeファイルを指定
 
workspaceFolder
ワークスペースの展開先ディレクトリを指定
 
service
vscodeで接続するserviceの指定
 
extensions
開発時に利用するvscodeのextensionを指定
 
settings
vscodeの格設定を指定
 
shutdownAction
vscode終了時のコンテナに対するアクションを記述
noneの場合、vscodeが終了後もコンテナが起動したままとなります。  

#起動確認

  1. vscodeを開く
  2. command + shift + P
  3. Remote-Containers: Rebuild and Reopen in Container

  4. 正常に立ち上がれば成功

#link
###公式ドキュメント
docker-compose
ASP.NET Core向けのDocker イメージ
elk-docker
Developing inside a Container using Visual Studio Code Remote Development

###参考にさせていただいた記事
【2020年1月】令和だし本格的にVSCodeのRemote Containerで、爆速の"開発コンテナ"始めよう
DockerでMySQLを使ってみる
初めてのElasticsearch with Docker

#続き
アプリケーションコードについて

AWS上で環境構築してみた

その他番外編的に書こうと思ってるやつ

  • CircleCIを利用した.NET Coreアプリの自動デプロイ
  • Docker Composeを利用したELKスタック環境構築
  • Elasticsearchの部分をCloudsearchに置き換える
1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?