docker-composeによるmysqlのデプロイメントの実践
記事目次
docker-composeによるmysqlのデプロイメントの実践
golangでapiサーバを書いたけど、テストデータも使いたいし、他の人にもファシリテートしたいので、dockerで環境をデプロイするのが一番簡単だと思う。単純に2つのコマンドを実行するだけで完了です。ブログ主の環境はwindowsで、windowsの中にcentos7の仮想マシンをデプロイします。その仮想マシンの中に、dockerをインストールし、デプロイしています。
1. dockerのインストールとデプロイ
linuxでは、簡単なコマンドで。
yum install docker
他のシステムも同様です。
2. docker-composeファイルの作成
version: '2'
services:
mysql:
network_mode: "host"
environment:
MYSQL_ROOT_PASSWORD: "yourpassword"
MYSQL_USER: 'test'
MYSQL_PASS: 'yourpassword'
image: "docker.io/mysql:latest"
restart: always
volumes:
- ". /db:/var/lib/mysql"
- ". /conf/my.cnf:/etc/my.cnf"
- ". /init:/docker-entrypoint-initdb.d/"
network_mode はコンテナのネットワークモードで、通常はテスト用にホストモードを使用します。
MYSQL_ROOT_PASSWORD
は、データベースのパスワードで、rootユーザのパスワードです。
MYSQL_USER
と
MYSQL_PASS
imageは引っ張ってくるイメージのアドレスとバージョンです。自分のイメージリポジトリに変更してもいいですが、ここは公式のものを使ってください。 volumesはローカルとDockerコンテナ内のフォルダとディレクトリをマッピングするためのパラメータがあります。
. /db
は、データベースのテーブルファイルを格納するために使用されます。
. /conf/my.cnf
はカスタム設定ファイルを保持します。
. /init
ポートで、ホストとコンテナのポートをマッピングします。docker-compose.ymlを書いたら、対応するフォルダを作成するか、自分の好きなフォルダに変更してください。以下はブロガーのフォルダ構成です。
root@localhost mysql # tree
.
├── conf
│ └── my.cnf
├── db
├── docker-compose.yml
└── init
└── init.sql
root@localhost conf # cat my.cnf
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
3. 設定ファイル、初期化ファイルの作成
root@localhost init # cat init.sql
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
create database test;
use test;
create table user
(
id int auto_increment primary key,
username varchar(64) unique not null,
email varchar(120) unique not null,
password_hash varchar(128) not null,
avatar varchar(128) not null
);
insert into user values(1, "zhangsan","[email protected]","passwd","avaterpath");
insert into user values(2, "lisi","[email protected]","passwd","avaterpath");
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
ここにある設定ファイルはあくまで簡単な例ですので、ご自身の設定に合わせて変更してください。
root@localhost mysql # docker-compose pull
....... Download the image process
root@localhost mysql # docker-compose up -d
mysql_mysql_1_234be9b015e4 is up-to-date
root@localhost mysql #
root@localhost mysql # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cffe8d56f222 docker.io/mysql:latest "docker-entrypoint... " 21 minutes ago Up 21 minutes mysql_mysql_1_234be9b015e4
root@localhost mysql # docker exec -it cffe8d56f222 bash
root@localhost:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.13 MySQL Community Server - GPL
Copyright (c) 2000, 2018, 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.
Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from user;
+----+----------+------------------+---------------+------------+
| id | username | email | password_hash | avatar |
+----+----------+------------------+---------------+------------+
| 1 | zhangsan | [email protected] | passwd | avaterpath |
| 2 | lisi | [email protected] | passwd | avaterpath |
+ ----+----------+------------------+---------------+------------+
2 rows in set (0.00 sec)
この行はルートアクセスを解除するために重要なので、他のホストでルートユーザーでデータベースにログインする場合は、この行を記述する必要があります。残りの文は、テーブル作成操作とデータ挿入操作です。
4. データベースを起動する
root@localhost mysql # docker-compose pull
....... Download the image process
root@localhost mysql # docker-compose up -d
mysql_mysql_1_234be9b015e4 is up-to-date
root@localhost mysql #
docker-compose.ymlが格納されているフォルダで実行する必要があります。
5. 初期化されたデータの確認
root@localhost mysql # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cffe8d56f222 docker.io/mysql:latest "docker-entrypoint... " 21 minutes ago Up 21 minutes mysql_mysql_1_234be9b015e4
root@localhost mysql # docker exec -it cffe8d56f222 bash
root@localhost:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.13 MySQL Community Server - GPL
Copyright (c) 2000, 2018, 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.
Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from user;
+----+----------+------------------+---------------+------------+
| id | username | email | password_hash | avatar |
+----+----------+------------------+---------------+------------+
| 1 | zhangsan | [email protected] | passwd | avaterpath |
| 2 | lisi | [email protected] | passwd | avaterpath |
+ ----+----------+------------------+---------------+------------+
2 rows in set (0.00 sec)
データベースにデータが預けられるのがわかります。
6. リモート接続を確認する
Windowsホスト上のNavicatでもデータベースに接続できます。ipは仮想マシンのip、ポートは3306、パスワードはdocker-composeファイルにあるrootパスワードです。ここで、ホストマシンのファイアウォール(私はliunx VM)をオフにしないと接続できませんし、ポート3306を開放して外部からのアクセスにすることも可能です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例