Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

【初心者向け】Docker+VSCodeでMySQLコンテナを作る方法の基本を解説

初心者に向けて、DockerとVSCodeでMySQLコンテナを作る方法の初歩的な解説

今回はDockerとVSCodeを連携させて、初歩的なMySQLコンテナを作る方法を解説する記事です。

作業に先立ち、VSCodeとDockerとの連携について簡単にイメージをつかみたい場合は次の記事を先に見て、実際にその環境を作ってみてください。

前準備と作業環境

最低限次のことは前提とします。

  • Docker(Docker Desktop)がインストールされている
  • VSCodeがインストールされている
  • VSCodeの拡張機能Remote Developmentがインストールされている

フォルダとファイル構成

青色の文字はフォルダ/ディレクトリの名前となります。これらのファイルの役割を大雑把にまとめると次のとおりです。

ファイル名役割
devcontainer.jsonVSCodeとDockerを連携させるためのファイル
docker-compose.yml複数のコンテナ(つまり環境)を作るときに、それらの設定や作成方法を書いたファイル
Dockerfile
(拡張子なし)
これを使ってイメージを作成するようdocker-compose.ymlに記載する
init.sql今回は使いませんが、MySQLのデータベースを作ったときに最初にいろいろな作業をさせる自動的にさせる指示を書くファイル
my.cnfデータベースの設定を書くファイル(日本語が文字化けしないようにするとか)
(フォルダ)mydata今回は使いません。いろいろなデータ置き場として私がテキトーに作ったフォルダです。
mysql.envデータベースの設定を書くファイル。今回はパスワードやデータベースの名前などを設定しています。データベース作成時に自動的に読み込まれます。

Dockerfileの内容

Dockerfileは次の内容を書いて保存しておきます。

# Ubuntu用イメージ(debian系)を指定
FROM mysql:8.0-debian


# ADDよりCOPYが望ましい
# my.cnfを、コンテナ内部の/etc/mysql/conf.d/へコピー
COPY my.cnf /etc/mysql/conf.d/

docker-compose.ymlの内容

次の内容を書いて保存しておきます。

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つの記事で大雑把にですが説明していますのでぜひご覧ください。

devcontainer.jsonの内容

次の内容を書いて保存しておきます。

{
    "name": "MYSQL_TEST",
    "service": "mysql",
    "dockerComposeFile": "docker-compose.yml",
    "workspaceFolder": "/test_workspace"
    //"customizations":{
    //    "vscode":{
    //        "extensions": [ms-azuretools.vscode-docker]
    //    }
    //}

}

my.cnfの内容

次の内容を書いて保存しておきます。

[mysqld]
character-set-server=utf8

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8

mysql.envの内容

次の内容を書いて保存しておきます。このmysql.envが、データベース作成時に読み込まれて自動的にデータベースのパスワードとデータベース名が環境変数として設定されます。

MYSQL_ROOT_PASSWORD=testpassword
MYSQL_DATABASE=test
TZ="Asia/Tokyo"

上記内容のうち、

  • 1行目のtestpassword
  • 2行目のtest

という部分はみなさんの好きな任意の文字に書き換えてください。

このように拡張子「.env」のファイルとして作成しておくと他のMySQLコンテナを作るときにいつでも使いまわせます。ただいつも同じパスワードというのはセキュリティ上よろしくありませんが。

コンテナ作成

さてここまでできれば実際にコンテナを作成してみましょう。Docker Desktopを起動させた状態にして、VSCode上で以下のキーボードショートカットを使って、

  • Windowsの場合:Ctrlキー+「K」、その後に連続して、Ctrlキー+「O(アルファベットのオゥ)」
  • Macの場合:Command(⌘)とOキー(アルファベットのオゥ)の同時押し

「.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でお得なプログラミング学習講座を探す
愛を分かち合いましょう