DockerfileでMySQLをセットアップしてダンプをインポートする方法
Dockerfile で MySQL をセットアップし、ダンプをインポートする方法
手順
- Dockerfileの作成 まず、Dockerfileを作成する必要があります。Dockerfile は、MySQL コンテナの作成方法を記述したテキストファイルです。以下の例では、MySQL 5.7 を含む基本的な Dockerfile を示します。
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD=password
ENV MYSQL_DATABASE=mydatabase
RUN apt-get update && apt-get install -y gnupg
# ダンプファイルを WORKDIR にコピー
COPY dump.sql ./
# MySQL サーバーを起動
CMD ["mysqld"]
この Dockerfile では、以下のことを行っています。
FROM mysql:5.7
:MySQL 5.7 イメージをベースとして使用します。ENV MYSQL_ROOT_PASSWORD=password
:MySQL root ユーザーのパスワードを設定します。ENV MYSQL_DATABASE=mydatabase
:作成する MySQL データベースの名前を設定します。RUN apt-get update && apt-get install -y gnupg
:MySQL コンテナに必要なパッケージをインストールします。COPY dump.sql ./
:dump.sql
ファイルをコンテナのWORKDIR
ディレクトリにコピーします。CMD ["mysqld"]
:MySQL サーバーを起動します。
- Docker コンテナの作成
Dockerfile を作成したら、Docker コンテナを作成できます。以下のコマンドを使用して、
my-mysql
という名前のコンテナを作成できます。
docker build -t my-mysql .
docker run -d --name my-mysql -p 3306:3306 my-mysql
このコマンドは、以下のことを行っています。
-d
:コンテナをデタッチモードで実行します。--name my-mysql
:コンテナにmy-mysql
という名前を付けます。-p 3306:3306
:コンテナのポート 3306 をホストのポート 3306 にマップします。my-mysql
:起動するコンテナの名前を指定します。
- MySQL クライアントへの接続 コンテナが起動したら、MySQL クライアントを使用して接続できます。以下のコマンドを使用して、MySQL クライアントをコンテナに接続できます。
docker exec -it my-mysql mysql -u root -p
docker exec -it my-mysql
:my-mysql
コンテナ内でインタラクティブシェルを開きます。mysql -u root -p
:MySQL クライアントを起動し、root ユーザーとしてログインします。
MySQL クライアントに接続したら、データベースを作成および操作できます。
- ダンプのインポート
MySQL クライアントに接続したら、以下のコマンドを使用して、
dump.sql
ファイルをmydatabase
データベースにインポートできます。
mysql mydatabase < dump.sql
このコマンドは、dump.sql
ファイルの内容を mydatabase
データベースにインポートします。
注意事項
- この例では、MySQL root ユーザーのパスワードを
password
に設定しています。本番環境で使用する場合、パスワードは強力なものに変更する必要があります。 - この例では、3306 番ポートをホストに公開しています。ファイアウォールでこのポートを開放する必要がある場合があります。
Dockerfile で MySQL をセットアップし、ダンプをインポートする - サンプルコード
Dockerfile
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD=password
ENV MYSQL_DATABASE=mydatabase
RUN apt-get update && apt-get install -y gnupg
COPY dump.sql ./
CMD ["mysqld"]
使用方法
- この Dockerfile を
Dockerfile
という名前で保存します。 - 以下のコマンドを使用して、
my-mysql
という名前の Docker コンテナを作成します。
docker build -t my-mysql .
docker run -d --name my-mysql -p 3306:3306 my-mysql
- 以下のコマンドを使用して、MySQL クライアントをコンテナに接続します。
docker exec -it my-mysql mysql -u root -p
mysql mydatabase < dump.sql
- このサンプルコードはあくまで例であり、本番環境で使用する場合には修正が必要となる場合があります。
- MySQL root ユーザーのパスワードは、必ず強力なものに変更してください。
- コンテナのポートを開放する前に、ファイアウォールの設定を確認してください。
Dockerfile で MySQL をセットアップし、ダンプをインポートする - その他の方法
Docker Compose を使用すると、複数のコンテナを定義および管理することができます。これは、MySQL コンテナと、ダンプファイルを格納するボリュームを定義するのに役立ちます。
例
version: "3.9"
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydatabase
volumes:
- ./dump.sql:/var/lib/mysql/dump.sql
ports:
- "3306:3306"
mysql-client:
image: mysql:5.7
volumes-from:
- mysql
entrypoint: ["mysql", "-u", "root", "-p", "-h", "mysql", "mydatabase"]
mysql
サービス:MySQL 5.7 コンテナを定義します。
- この
docker-compose.yml
ファイルを保存します。 - 以下のコマンドを使用して、Docker Compose を使用してコンテナを起動します。
docker-compose up -d
docker-compose exec mysql-client
mysql mydatabase < dump.sql
Docker Hub から事前構築済みのイメージを使用する
MySQL を含む事前構築済みの Docker イメージが、Docker Hub で公開されています。これらのイメージを使用すると、自分で Dockerfile を作成する必要がなくなります。
docker run -d --name my-mysql -p 3306:3306 mysql:5.7
このコマンドは、MySQL 5.7 イメージを使用して my-mysql
という名前のコンテナを作成し、3306 番ポートをホストに公開します。
コンテナが起動したら、以下のコマンドを使用して MySQL クライアントに接続できます。
docker exec -it my-mysql mysql -u root -p
Volume を使用すると、コンテナ間でデータを永続的に保存できます。これにより、Dockerfile にダンプファイルを埋め込む必要がなくなり、ダンプファイルを別の場所に保存できます。
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD=password
ENV MYSQL_DATABASE=mydatabase
RUN apt-get update && apt-get install -y gnupg
VOLUME /var/lib/mysql
CMD ["mysqld"]
この例では、/var/lib/mysql
ディレクトリをボリュームとしてマウントしています。
docker volume create my-mysql-data
docker run -d --name my-mysql -v my-mysql-data:/var/lib/mysql -p 3306:3306 my-mysql
docker exec -it my-mysql mysql -u root -p
mysql mydatabase < /var/lib/mysql/dump.sql
- 上記はほんの一例であり、ニーズに合わせてさまざまな方法を組み合わせることができます。
- Dockerfile を使用する場合は、セキュリティを念頭に置いてパスワードを安全に設定してください。
- Volume を使用する場合は、ボリュームのバックアップ方法を検討してください。
mysql docker