Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回はDockerとVSCodeを連携させて、初歩的なMySQLコンテナを作る方法を解説する記事です。
作業に先立ち、VSCodeとDockerとの連携について簡単にイメージをつかみたい場合は次の記事を先に見て、実際にその環境を作ってみてください。
Contents
最低限次のことは前提とします。
青色の文字はフォルダ/ディレクトリの名前となります。これらのファイルの役割を大雑把にまとめると次のとおりです。
ファイル名 | 役割 |
devcontainer.json | VSCodeとDockerを連携させるためのファイル |
docker-compose.yml | 複数のコンテナ(つまり環境)を作るときに、それらの設定や作成方法を書いたファイル |
Dockerfile (拡張子なし) | これを使ってイメージを作成するようdocker-compose.ymlに記載する |
init.sql | 今回は使いませんが、MySQLのデータベースを作ったときに最初にいろいろな作業をさせる自動的にさせる指示を書くファイル |
my.cnf | データベースの設定を書くファイル(日本語が文字化けしないようにするとか) |
(フォルダ)mydata | 今回は使いません。いろいろなデータ置き場として私がテキトーに作ったフォルダです。 |
mysql.env | データベースの設定を書くファイル。今回はパスワードやデータベースの名前などを設定しています。データベース作成時に自動的に読み込まれます。 |
Dockerfileは次の内容を書いて保存しておきます。
# Ubuntu用イメージ(debian系)を指定
FROM mysql:8.0-debian
# ADDよりCOPYが望ましい
# my.cnfを、コンテナ内部の/etc/mysql/conf.d/へコピー
COPY my.cnf /etc/mysql/conf.d/
次の内容を書いて保存しておきます。
version: "3.9"
services:
mysql:
# コンテナの名前
container_name: my_mysql
build:
# 作業ディレクトリはdocker-compose.ymlのディレクトリを指定
context: .
# docker-compose.ymlと同じディレクトリにあるDockerfileを使ってビルド
dockerfile: Dockerfile
# 外部ネットワークから8080でアクセスした場合に、
# コンテナ内の8899ポートに対応させる。
# 今回はテキトーに設定しています。
ports:
- "8080:8899"
# MySQLデータベースの環境変数を設定した外部ファイルを読み込み
env_file: mysql.env
# bind方式のマウントを設定
# source: ../../ →.devcontainerディレクトリ
# target: コンテナ内のパス
volumes:
- type: bind
source: ../../
target: /test_workspace
ここで設定しているvolumes項目の部分ですが、今回はバインドマウント方式を設定しています。このDockerにおけるマウントの機能については以下の2つの記事で大雑把にですが説明していますのでぜひご覧ください。
次の内容を書いて保存しておきます。
{
"name": "MYSQL_TEST",
"service": "mysql",
"dockerComposeFile": "docker-compose.yml",
"workspaceFolder": "/test_workspace"
//"customizations":{
// "vscode":{
// "extensions": [ms-azuretools.vscode-docker]
// }
//}
}
次の内容を書いて保存しておきます。
[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
次の内容を書いて保存しておきます。このmysql.envが、データベース作成時に読み込まれて自動的にデータベースのパスワードとデータベース名が環境変数として設定されます。
MYSQL_ROOT_PASSWORD=testpassword
MYSQL_DATABASE=test
TZ="Asia/Tokyo"
上記内容のうち、
という部分はみなさんの好きな任意の文字に書き換えてください。
このように拡張子「.env」のファイルとして作成しておくと他のMySQLコンテナを作るときにいつでも使いまわせます。ただいつも同じパスワードというのはセキュリティ上よろしくありませんが。
さてここまでできれば実際にコンテナを作成してみましょう。Docker Desktopを起動させた状態にして、VSCode上で以下のキーボードショートカットを使って、
「.devcontainer」の直上のフォルダを開きましょう。
たとえば、
/mysql/.devcontainer/XXXXX
ならば、mysqlフォルダをVSCodeで開きます。
あとは下の記事の見出し「手順4:VS CodeとDockerを実際に連携させる」の部分を参考に作業を進めてください。
上手くコンテナが作れればあとは動作確認をしてみましょう。
今回はdocker-comopse.ymlとdevcontainer.jsonでワークスペースとして、test_workspaceというフォルダを設定しましたので、VSCode上のターミナル上は次のようになっているでしょう。
(略):/test_workspace#
では、MySQLにログインしてみましょう。次のように入力しましょう。
(略):/test_workspace# mysql -u root -p
今回はユーザー名をrootにしていますが、もしすでにユーザー名を設定した場合はそれを使ってください。これを実行するとパスワード入力を求められます。mysql.envで設定したパスワードを入力します。
Enter password: (セキュリティ上の観点から入力したパスワードは非表示になっています)
間違わずに入力できれば、
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.37 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>
このような画面となっているでしょう。一番下の行では、いわゆるSQLを入力できるモードになっています。
たとえば次のSQLを入力して実行してみましょう。
mysql> SELECT VERSION(); SELECT NOW();
私の場合はこのようなものが表示されました。
これできちんとMySQLコンテナが作動していることが確認できました。あとはどんどんMySQLを操作して慣れていきましょう。
Dockerの学習にはUdemyの動画講座がおすすめです。
世界最大の動画学習サイトUdemyで、プログラミングを最速でマスターしましょう。