個人的な備忘録：Docker Hubを使ってmysqlイメージをpullし、ローカルでログインして遊んでみた

## はじめに

Docker Hubは、公式のDockerイメージを簡単に取得し、ローカル環境で利用できる便利なプラットフォームです。

:::note warn
***Docker Hubを単体で利用する機会は多くないかもしれませんが、この記事ではMySQLイメージを取得し、ローカルでログインする方法を試してみます。***
:::

本記事は、個人的な備忘録としてまとめたものです。**そのため、一部内容が簡略的かもしれませんが、少しでも参考になれば嬉しいです！**

## 書こうと思ったきっかけ
Dockerは、コンテナ型仮想化技術として広く利用されており、特にDocker Hubを活用することで、アプリケーションのセットアップが驚くほど簡単になります。

前回の記事では、Nginxのイメージをローカルに取得し、コンテナとして立ち上げることに成功しました。***次に、MySQLのイメージを使ってみたいと思い、この記事を書くことにしました。***

:::note info
**この経験を通じて得た学びを、自分の理解を深めるためにもアウトプットとしてまとめてみることにしました。**
:::

この記事が、同じようにDockerを学んでいる方々の参考になれば幸いです！

## Docker Hubとは？

**Docker Hub**は、Docker イメージを保存、共有、管理するための公式のリポジトリサービスです。  

https://hub.docker.com/?_fsi=3tcUFNH7

***Dockerの利用を効率化するための様々な機能を提供しています。***

---

### 主な機能

#### Docker イメージの公開と共有
- アプリケーションやミドルウェアのDockerイメージを共有可能。
- オープンソースや商用イメージを利用できるため、開発効率が向上。

#### 公式イメージの提供
- MySQL、Nginx、Redisなど、よく使われるアプリケーションの公式イメージを簡単に取得可能。
- 公式サポートのあるイメージを利用することで信頼性を確保。

#### プライベートリポジトリ
- プライベートなイメージを保存可能。
- チームや個人で安全にイメージを利用できる（プライベートリポジトリは有料プランが必要）。

#### CI/CDとの統合
- Docker Hubを使って自動ビルドを設定可能。
- 継続的インテグレーションやデプロイメントパイプラインと統合し、開発フローを効率化。

---

## Docker Hubを利用してローカルで動かしてみた

以下は、Docker Hubのイメージをローカルで簡単に動かす手順です。

### 1. Dockerのインストール
Dockerをインストールしていない場合は、公式サイトからインストールしてください。  

https://www.docker.com/products/docker-desktop/

### 2. Docker Hubにログイン
Docker Hubでアカウントを作成し、ターミナルからログインします。

```bash
docker login
```

ログインコマンドを実行すると、以下のようなメッセージが表示されます。

```bash
➜  Desktop git:(main) ✗ docker login

USING WEB-BASED LOGIN
To sign in with credentials on the command line, use 'docker login -u <username>'

Your one-time device confirmation code is: xxx-xxx
Press ENTER to open your browser or submit your device code here: https://login.docker.com/activate
```

ブラウザが自動で開き、`https://login.docker.com/activate`にアクセスする画面が表示されます。指示に従ってログインを完了してください。

**ログインが成功すると、以下のような画面が表示されます。**

![Screenshot 2025-01-19 at 21.56.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/dfd62152-03f1-065a-6d19-cc971008982a.png)

### 3. Dockerイメージを取得
**Docker Hubから利用したいイメージを検索します。例えば、`mysql`イメージを使う場合：**

```bash
docker pull mysql
```

このコマンドを実行すると、Docker Hubから最新の`mysql`イメージがローカル環境にダウンロードされます。

### 4. Dockerコンテナを実行
ダウンロードした`mysql`イメージを使ってコンテナを起動します。以下のコマンドを実行してください。


```bash
docker run -d -p 3306:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
```

**コマンドのオプション解説**

- `-d`: バックグラウンドで実行。
- `-p 3306:3306`: ローカルのポート`3306`をコンテナのポート`3306`にマッピング。
- `--name my-mysql`: コンテナに`my-mysql`という名前を付ける。
- `-e MYSQL_ROOT_PASSWORD=my-secret-pw`: 環境変数としてMySQLのルートパスワードを設定。

コンテナが正常に起動すると、MySQLサーバーがポート`3306`で利用可能になります。

**接続方法**

MySQLクライアントや他のアプリケーションから接続する場合、以下の情報を使用してください：

- **ホスト**: `localhost`
- **ポート**: `3306`
- **ルートユーザーのパスワード**: `my-secret-pw`

#### `Is the docker daemon running?`のエラーについて

このエラーは、Dockerが正しく動作していない、もしくはDockerデーモンが起動していない場合に表示されます。

***以下のようなエラーメッセージが表示されることがあります。***

```bash
➜  Desktop git:(main) ✗ docker pull nginx
Using default tag: latest
Cannot connect to the Docker daemon at unix:///Users/xxx/.docker/run/docker.sock. Is the docker daemon running?
```

私の場合は、単純にDockerアプリを起動していなかったため、アプリを起動することで問題が解決しました。

![Screenshot 2025-01-20 at 8.41.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/527ff231-53b4-9453-88bc-21f0697bd581.png)

## コンテナ内のMySQLにログインする方法
DockerでMySQLコンテナを起動した後に、コンテナ内のMySQLにログインする方法を解説します。***以下の手順に従えば、簡単にアクセスできます。***

### 手順 1: 実行中のコンテナを確認

まず、MySQLコンテナが起動しているか確認します。以下のコマンドを実行してください。

```bash
docker ps
```

このコマンドで、実行中のコンテナ一覧が表示されます。起動したMySQLコンテナがリストに表示されていることを確認します。

**例: `my-mysql`という名前のコンテナが動作中の場合の出力**

```bash
CONTAINER ID   IMAGE    COMMAND                  ...   NAMES
abc123xyz456   mysql    "docker-entrypoint.s…"  ...   my-mysql
```

### 手順 2: MySQLにログイン
次に、```docker exec```コマンドを使用して、MySQLにログインします。

```bash
docker exec -it my-mysql mysql -u root -p
```

- **my-mysql**: コンテナ名です。自分の環境に合わせて置き換えてください。
- **mysql -u root -p**: MySQLのルートユーザーとしてログインするコマンドです。

コマンドを実行すると、以下のようにパスワードの入力を求められます。

```bash
Enter password:
```

ここで、コンテナ起動時に設定したルートパスワード（例: `my-secret-pw`）を入力します。

### 手順 3: ログイン成功
パスワードを正しく入力すると、MySQLのプロンプトが表示されます。

```sql
➜  Desktop git:(main) ✗ docker exec -it my-mysql mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 9.1.0 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> 
```

これで、MySQLにログインできました！ここからはSQLコマンドを使用してデータベース操作を自由に行えます。

## まとめ
Docker Hubは、公式のDockerイメージを簡単に取得し、ローカル環境で利用できる便利なプラットフォームです。

:::note warn
**※ポイント**
***Docker Hubの基本的な流れは、「イメージの検索・取得 → コンテナの起動」です。***
:::

初めてDockerを触る場合は、`nginx`や`mysql`などの公式イメージを活用して、実際に動かしてみることをおすすめします。

***今回のブログ内容が、どなたかの技術の助けになれば幸いです。***

## おまけ：コンテナの確認と削除方法
Dockerで動作中のコンテナを確認・管理するための基本的な操作を紹介します。

### 実行中のコンテナを確認する

現在実行中のコンテナを確認するには、以下のコマンドを使用します：

```bash
docker ps
```

このコマンドを実行すると、動作中のコンテナリストが表示されます。

:::note alert
***リストにはコンテナIDや名前、使用中のポートなどが含まれます。停止や削除の操作を行う際に必要な情報を確認してください。***
:::

### コンテナの停止と削除

特定のコンテナを停止するには、以下のコマンドを使用します：

```bash
docker stop <コンテナID>
```

- `<コンテナID>`には、停止したいコンテナのIDを入力してください。

停止したコンテナを削除するには、以下のコマンドを実行します：

```bash
docker rm <コンテナID>
```

これらの基本操作を覚えておくと、Docker環境を効率的に管理できるようになります。***初めてDockerを触る方でも安心して操作を進められるよう、ぜひ参考にしてください！***