色々言い訳をしつつDockerから目を逸していたのですが、そろそろ限界が来たのでキャッチアップしてみました。
dockerでmysqlを動かす
とりあえずdockerでdbサーバを立ててみます。
実務上の開発環境は生のDockerよりdocker-composeを使う場合が多いと思いますが、一旦基本的な動きを理解したいのでdockerコマンドを使います。
mysqlイメージをDocker hubからpullする
DockerのイメージをホスティングするDocker HubにMySQLの公式イメージがアップロードされているので、これを利用します。
https://hub.docker.com/_/mysql/
docker run --name mysql-sandbox -e MYSQL_ROOT_PASSWORD=password -d mysql:latest
上記コマンドで利用しているdocker各種オプションの概要は以下のようになります。
コマンド | 概要 |
---|---|
--name | コンテナ名を指定 |
-e | コンテナに渡す環境変数を指定(上記の例ではMYSQL_ROOT_PASSWORD) |
-d | デーモン(バックグラウンド)で起動(これがないとフォアグラウンドでデータベース・サーバが起動してしまう) |
コンテナが起動しているかどうか確認する
コンテナが起動しているかどうかを確かめるには、docker psコマンドを使用します。
docker ps
以下のように表示されていればOKです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7d52cd0856a1 mysql:latest "docker-entrypoint.s…" 30 minutes ago Up 30 minutes 3306/tcp mysql-sandbox
MySQLデータベースに入る
ホスト側から、コンテナにログインしてMySQLを実際に操作してみます。
docker exec -it mysql-sandbox /bin/bash
コマンド | 概要 |
---|---|
-it | 疑似TTY(pseudo-TTY)をコンテナの標準入力に接続する。コンテナ内でインタラクティブな bash シェルを作成する。 |
MySQLのdockerコンテナ内に入れたら、
root@7d52cd0856a1:/# mysql -u root -p
MYSQL_ROOT_PASSWORDで設定したパスワードを登録するとログインできます。
試しにshow databasesしてみます
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.7.21 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql>
うまくいっていますね。
docker execとdocker runの違い
個人的に混同しやすいのでメモしておきます。
- docker runは新しくコンテナを作成してコマンドを実行する
- docker execは起動中のコンテナでコマンドを実行する
MySQLコンテナを停止する
コンテナを停止するには、docker stopコマンドを使います。
docker stop mysql-sandbox
停止しているコンテナを削除する
docker container prune
削除確認メッセージ不要な場合は-fオプションをつけます
まとめ
本記事では、Dockerを使ってMySQLのコンテナを作ってログインしてデータベースが操作できるところまでをまとめました。
実務上ではここから、Dockerfileやdocker-compose.ymlを作成してInfrastrcture As a Codeを実現していくことになりますが、その過程は後日まとめようかなと思います。