【Docker Compose】MySQLのコンテナを作って、入って、最後は完全消去してみる
例としてMySQL鯖を建てながらDocker Composeの使い方をメモします。
Docker初学者なので多めに見てください
OSにはUbuntu 24.04.2 LTS x86_64
を使います。
Dockerのインストール
Docsに沿ってインストール。
既存のパッケージを削除
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt remove $pkg; done
リポジトリの設定&update
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
インストール
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
とりあえずこれで完了。
不安であればhello-worldを動かしてみたり
sudo docker run hello-world
Docker ComposeでMySQLを動かす
設定ファイル
docker-compose.yml
を書いて、サクッと動かしてみます。
mkdir docker-mysql && cd docker-mysql
vim docker-compose.yml
services:
mysql:
image: mysql:8
init: true
command: mysqld --character-set-server=utf8mb4
ports:
- "3306:3306"
volumes:
- mysql.data:/var/lib/mysql
- ./init/mysql:/docker-entrypoint-initdb.d
environment:
- MYSQL_RANDOM_ROOT_PASSWORD=YES
- MYSQL_ROOT_HOST=%
- MYSQL_USER=user
- MYSQL_PASSWORD=password
- MYSQL_DATABASE=otameshidb
- TZ=Asia/Tokyo
volumes:
mysql.data:
name: mysql.data
mysqlバージョンはv8(.0?)を使用
0.0.0.0:3306
で待ち受けしてもらって、rootのパスワードはpwgen
で作ってもらいます。
MYSQL_USER
やMYSQL_PASSWORD
、MYSQL_DATABASE
の部分はお好みで変えてください。
実行
pullしまして
sudo docker compose -f ./docker-compose.yml pull
upします
sudo docker compose -f ./docker-compose.yml up -d
-d
はdaemonの略です。バックグラウンドで実行させるために必要なフラグとなっています。
無事起動すればOK。ログを見てみます
sudo docker compose -f ./docker-compose.yml logs
MYSQL_RANDOM_ROOT_PASSWORD=YES
としてあるので、出力にパスワードが流れてきました。
mysql-1 | 2025-03-06 17:01:22+09:00 [Note] [Entrypoint]: GENERATED ROOT PASSWORD: RqNd0mPa33w0rd!
忘れないように、厳重に保管してください。
コンテナのbashからログインしてみる
ID/NAMEが知りたいのでps
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12a34567890d mysql:8 "d…" 2m Up 2m 3306 container-name-1
bashに入ります。CONTAINER ID
もしくはNAME
で実行対象を指定できます。
sudo docker exec -it container-name-1 bash
rootでログインしてみます。先ほど出力されたパスワードが必要です。
mysql -u root -p -h 127.0.0.1
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.4.4 MySQL Community Server - GPL
Copyright (c) 2000, 2025, 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>
いいですね。ログインできました。
(完全に)消去する
「もう用済みなのでこのコンテナはいらない」
「設定を変えてupしなおしたはずなのに反映されない、データとかどうでもいいからなんとかしたい」
という場合は完全消去してしまいましょう。
downだけじゃだめなの?
駄目です。コンテナとネットワークが消去されただけでボリュームが残った状態になります。
消去してみる
sudo docker compose -f ./docker-compose.yml down --rmi all --volumes --remove-orphans
-
down
でコンテナとネットワーク -
--rmi all
ですべてのイメージ -
--volumes
でdocker-compose.yml
のvolumes
に書かれたボリューム+コンテナにアタッチされたanonymous volume -
--remove-orphans
でdocker-compose.yml
の定義から削除されたサービス用の未定義コンテナ
が削除されます。
ちなみに--rmi all
についてですが、--rmi local
の場合はフィールドにカスタムタグのないイメージのみを削除します。
ここの内容はDocsにも書かれています。
おわりに
Dockerに関しては昨日~一昨日あたりから触り始めたばかりなんですが、触ってみると案外簡単で、作って遊んでぶち壊すという一連の流れが簡単に出来ていいなと思いました。
私のようにずっと「Dockerってなんだろう🤔、難しそう(x_x)」となっているのであれば、ぜひ一度触ってみることをおすすめします。
それでは。
Discussion