Docker上でMySQLの対話モードに入る方法。コンテナの中でSQLクエリを実行する手順

dockerとmysqlDocker

Docker上出来状しているMySQLのDBサーバーにアクセスして、MySQLを実行する方法について。

Docker上のMySQLコンテナに入る

まずは 、dokcer ps コマンドで、現在起動しているコンテナを確認する。

> docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED        STATUS        PORTS                                     NAMES
db17e4d0fc2b   wordpress:latest               "docker-entrypoint.s…"   42 hours ago   Up 28 hours   0.0.0.0:10090->80/tcp, :::10090->80/tcp   wp
d01dd3b83a41   phpmyadmin/phpmyadmin:latest   "/docker-entrypoint.…"   42 hours ago   Up 28 hours   0.0.0.0:10099->80/tcp, :::10099->80/tcp   phpmyadmin
dab19e479a65   mysql:5.6                      "docker-entrypoint.s…"   42 hours ago   Up 28 hours   3306/tcp                                  wp_mysql

上記例の場合、3つのコンテナが起動している。(1)WordPress, (2)phpMyAdmin, (3)MySQL。この中でMySQLの対話モードに入れるのは(3)MySQL コンテナ。(phpMyAdminではない)

コンテナの中に入るコマンドは以下になる。

$docker exec -it コンテナ名 bash

> docker exec -it wp_mysql bash
root@dab19e479a65:/#

MySQLの対話モードを起動する

コンテナに入ったら、まずはMySQLが存在してるか確認する。

$ mysql –version でバージョン情報が表示されれば、MySQLがインストールされている。

root@dab19e479a65:/# mysql --version
mysql  Ver 14.14 Distrib 5.6.51, for Linux (x86_64) using  EditLine wrapper

バージョンが確認できたら、ルートユーザーとしてMySQLにログインする。以下コマンドを実行。

$mysql -u ルートユーザー名 -h ホスト名 -pパスワード

オプション内容必要性デフォルト
-uユーザー名必須root
-hホスト名省略可(localhostとみなす)localhost
-pパスワード必須root

※「-p」のパスワード指定時の注意点
 ・「-p」の後に空白を入れずにパスワードを記述する
 ・「Warning: Using a password on the command line interface can be insecure.」セキュリティの警告がでるが問題ない。警告を出したくない場合は以下で対応可能。
 ・「-p」の後ろに空白を入れ、パスワードを指定しなければ、コマンド実行後にパスワードを聞かれる。入力している文字は表示されないが、パスワードを入力してEnterをクリックすればログインできる。
 ・「-p」は「–password」と同じ。

デフォルトの設定の場合

もし、MySQLの設定がデフォルトのままで、ルートユーザーの情報などを変更していない場合は以下の設定になっている。

  • ルートユーザー名: root
  • ホスト名: localhost ※省略可能
  • パスワード: root

次のコマンドを実行すればルートユーザーとしてログインできる。

# mysql -u root -proot
ルートユーザーとしてログインに成功した例

以上でDocker上のMySQLコンテナの対話モードの起動が完了。これでSQLが実行できる。

MySQLの対話モードとDockerコンテンナから抜ける

MySQLの対話モードとDockerコンテンナから抜けるには、どちらも「exit」を使う。

mysql> exit
Bye

root@dab19e479a65:/# exit
exit

>

(補足)docker上でMySQLを起動するためのdocker-compose.yml

version: "3.7" # docker-composeの書式のバージョン
services: # 以下にサーバ情報を記載
  db: # データベースサーバ(MySql)名(任意の名前を指定可)
    image: mysql:5.6 # 使用するデータベースのイメージ名とバージョン(https://hub.docker.com/_/mysql)
    container_name: wp_mysql
    #restart: always # PC再起動時などDocker自体が起動したときにこのサーバも自動で起動するよう設定
    environment: # 環境変数
      MYSQL_ROOT_PASSWORD: root # rootユーザのパスワード(任意に指定可)
      MYSQL_DATABASE: wp_db # WordPress用データベース名(任意に指定可)
      MYSQL_USER: wp_user # WordPress用接続ユーザ名(任意に指定可)
      MYSQL_PASSWORD: root # WordPress用パスワード(任意に指定可)

  wordpress: # アプリケーションサーバ(PHP,WordPress)名(任意の名前を指定可)
    image: wordpress:latest # 使用するWordPressのイメージ名とバージョン(latestは最新を表す https://hub.docker.com/_/wordpress)
    container_name: wp
    #restart: always # PC再起動時などDocker自体が起動したときにこのサーバも自動で起動するよう設定
    depends_on: # 先に起動させるサーバを指定
     - db
    ports:
     - "10090:80" # アプリケーションサーバの80番ポートをローカルの10080番ポートにつなげる(http://localhost:10080 でアクセスできるようになる)
    environment:
      WORDPRESS_DB_HOST: db:3306 # データベースサーバ名:ポート番号
      WORDPRESS_DB_USER: wp_user # WordPress用接続ユーザ名(dbの内容に合わせる)
      WORDPRESS_DB_PASSWORD: root # WordPress用パスワード(dbの内容に合わせる)
      WORDPRESS_DB_NAME: wp_db # WordPress用データベース名(dbの内容に合わせる)
    volumes:
       - ./html:/var/www/html
       
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: phpmyadmin
    #restart: always
    depends_on:
      - db
    ports:
      - 10099:80
タイトルとURLをコピーしました