🐳

【Docker Compose】MySQLのコンテナを作って、入って、最後は完全消去してみる

2025/03/06に公開

例として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
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_USERMYSQL_PASSWORDMYSQL_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ですべてのイメージ
  • --volumesdocker-compose.ymlvolumesに書かれたボリューム+コンテナにアタッチされたanonymous volume
  • --remove-orphansdocker-compose.ymlの定義から削除されたサービス用の未定義コンテナ
    が削除されます。
    ちなみに--rmi allについてですが、--rmi localの場合はフィールドにカスタムタグのないイメージのみを削除します。

ここの内容はDocsにも書かれています。

おわりに

Dockerに関しては昨日~一昨日あたりから触り始めたばかりなんですが、触ってみると案外簡単で、作って遊んでぶち壊すという一連の流れが簡単に出来ていいなと思いました。

私のようにずっと「Dockerってなんだろう🤔、難しそう(x_x)」となっているのであれば、ぜひ一度触ってみることをおすすめします。

それでは。

Discussion