Docker 使っていますか?
みなさんが開発に Docker を導入していますか?
最近の開発環境において、Docker を導入していていないところは時代遅れと言っても過言ではないレベルで浸透してきたツールですね。
というようなことを書くと煽ってるみたいですが、かくゆう私もつい一年前までは Docker 何それ?おいしいの?という状態でした。
ネット上や本で Docker の解説をしている記事をよく見かけますが、正直プログラミング始めたばかりの方や Docker 勉強してみるか。という時に Docker 力を身に着けるほどの記事に会えなかったので、今回は Docker を学ぶために、DB を作ったり消したりできる感覚を掴んでみましょう
また、雛形を用意しておくのでよく分からなくてもコマンドを実行するだけで記事の中身を達成できるようにします。
Docker を使う前準備
本記事では mac の場合の方法を取り扱います。(Docker は OS 関係なく挙動するので、mac 以外の方は 「docker 導入
」とかで検索してみるといいかなと思います。)
brew install docker
また、公式から Docker のデスクトップツールをダウンロードしてください。
Docker のアカウントを持ってない人はこのタイミングで作成して、上記でダウンロードしたツールにログインしておいてください。
ここまでの手順を踏めば、以下の docker
というコマンドにパスが通ってる状態になっていると思います。もし、通ってない場合はターミナルの再起動か、他の方の記事を読んでみるのが良いかもです。
docker
Docker の雛形用意してます
私のリポジトリにサンプルの物を用意しましたので、README に従って Docker を体験してみましょう。
一応簡単に手順を書きますので、読み飛ばしても大丈夫な人は読み飛ばしてください。
まずはどこでも良いのでローカルの PC 上に上記のサンプルを clone してください。(git の説明は省きますね)
git pull https://github.com/mergitto/docker-index-sample
cd docker-index-sample
以下のコマンドで docker を起動できます(初回だけ image を引っ張ってくるので時間が少しかかります)
docker-compose up
- 起動後以下のコマンドで mysql にアクセスしてみてください
- password が聞かれると思うので、
docker-compose.yaml
でMYSQL_ROOT_PASSWORD
に設定したパスワードを入力してください
mysql -u root -p --host 127.0.0.1 -P 4306 < initial.sql
以上のコマンドで新しいデータベースと users テーブルが作られます
Docker を使ってみるというのはこの時点でもう入門できています!
どんなことが起こっているのかを説明して、さらに理解していきましょう!とその前に今回のサンプルで使った docker-compose.yaml
について簡単に理解しておきましょう。
docker-compose.yaml の説明
今回のサンプルでは以下のような yaml ファイルの中身でしたね。
version: "2"
services:
db:
image: mysql:5.7
container_name: db
volumes:
- "./.data/db:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "4306:3306"
version
は yaml ファイルの記述方法のバージョンを指定しているだけです。今は気にせず大丈夫です。
今回大事な部分は以下のオプションです
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
environment:
- MYSQL_ROOT_PASSWORD: root
ports:
- "4306:3306"
image … Docker で前もってビルドされて用意されている環境です
- 参照: https://hub.docker.com/_/mysql?tab=description
- つまり自分の PC とは別の OS やパッケージが入っている環境みたいなイメージで大丈夫です。
volumes … データの永続化のために、ローカル PC 上のデータと Docker で立ち上げた環境のデータを mount しています
- ローカル PC 上に
.data
というディレクトリができていると思うので確認してみてください
- ローカル PC 上に
environment … 設定した image に合わせて環境変数を設定します
- 今回の場合は root ユーザのパスワードに root を設定しています
ports … Docker 上で起動している DB とつなぐためにポートフォワーディングしています。端的にいうと、Docker 上の玄関とローカル PC の玄関を指定して、その玄関でのみ繋がるようなイメージです
- 今回の場合はローカル PC 上では 4306, Docker 上では 3306 につながっています
- ちなみに、mysql では 3306 がデフォルトのポートとして使われています
- postgres では 5432 がデフォルトのポートとして使われます
これが今回の docker-compose.yaml の最低限の説明という感じです
docker-compose の動作
docker-compose の動作はとてもシンプルです
- docker-compose で指定している image をローカル PC 上に pull してくる(無ければ)
- docker-compose で設定しているオプションをもとに image を立ち上げる
- 立ち上げた image は mac 上のプロセスに起動される
正直、それぐらいしか自分もわかっていないですが、これぐらいの理解で十分だと思います。好きな人が奥深くまで実装を理解すれば良いと思います
pull した image を確認してみましょう
まずは、先述した通りに docker を起動していたら、起動中のプロセスを確認することができます
docker ps
上記のコマンドで起動中のコンテナを確認できます
ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
911725f61aa1 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 33060/tcp, 0.0.0.0:4306->3306/tcp db
docker-compose で指定した port や、使われている image を確認することができます
pull した image も確認してみましょう
docker images
以下のような表示がなされると思います
pull した image の実体は Docker Hub に登録されています
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 383867b75fd2 5 months ago 373MB
image はどの OS で起動しても変わらない環境を提供できるので、Docker が環境構築のデファクトになりつつあるのです
まとめ
Docker いかがだったでしょうか
とりあえず起動してみると、そんなにむずかしくないことが分かったのではないでしょうか。いや、まだよくわからん。という人もいるかもしれません。
Docker はいくら起動しようが停止しようが、image を削除しても環境には全く影響がないので気軽にコマンド打ってなれていってみてください。