Dockerを勉強してみる
今年の年末年始休みはDockerを勉強してみることにした。
仕事ではずっとMAMPを使って環境構築をしてきた。 簡単に環境も構築できるし、特に問題も出てこなかったので愛用してきた。
だけど、最近サーバーでは動くけど、ローカルでは動かないということがたまに出てくるようになった。 合わせて、同僚に環境を構築してもらうとき、MAMPのバージョン(MySQLのバージョン)によってうまくインストールができないということが出てきた。
ここは最近デファクトとなったDockerを勉強したらこれらの問題が解決するのでは?ということで勉強してみることにした。
参考にしたもの
とりあえず、ざっくり概要が知りたかったので、以下の本を参考にした。
Dockerに手を出そうとして挫折した「プログラマ」は、まず最低限触ってみるところからリスタートしてみよう
それじゃ、いってみよう。
Dockerとは?
- 仮想環境の一種
- 古くからあるVMwareなどに比べて軽量、カスタマイズ性が高い
- 環境を共有しやすい
ふむふむ。とりあえず、軽くて共有しやすい仮想環境って感じでおぼえておけばいいのかな。(よくない)
コンテナとイメージ
コンテナ
- 仮想環境の単位
- この「コンテナ」単位でデータやプログラムを管理する
- 用途に応じて複数作成する
イメージ
- コンテナを作るテンプレート
- https://hub.docker.com/で管理していて、ダウンロードして利用する
なるほど。大体わかった。
コンテナを作る
# Docker Hubから「httpd」というapacheのイメージをダウンロードして、バックグラウンド(-d)で実行 $ docker container run --name myContainer -d -p 8080:80 httpd 0977ed7a06349576e1eaaa1c8ed3a275c49e61ed1c4e356b85e876872fad9eb5 # 起動確認 $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0977ed7a0634 httpd "httpd-foreground" 41 minutes ago Up 41 minutes 0.0.0.0:8080->80/tcp myContainer # 以下のコマンドで起動していないコンテナを含めて確認できる $ docker container ls -a # docker container ls は以下のコマンドでも確認OK $ docker ps # コンテナを停止 $ docker container stop myContainer # 停止確認。STATUS列が「Exited」となっていればOK $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0977ed7a0634 httpd "httpd-foreground" 46 minutes ago Exited (0) 2 seconds ago myContainer
コンテナ・イメージを削除
# 削除 $ docker container rm myContainer # 確認 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # イメージの削除 $ docker rmi httpd # 確認 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE
なるほど。コマンドは大体わかった。
Dockerfileとは?
- 予め必要なパッケージ、アプリケーション、各種設定を盛り込んだイメージを作るための設計図。
Docker Composeとは?
docker container run
の集合体みたいなもの。- httpd, DBなど複数のコンテナで構成されるシステムを扱う場合に使う。
Kubernetesとは?
- コンテナのオーケストレーションツール
- システム、アプリケーション、サービスの設定/運用管理の自動化のこと。
- 複数のコンテナを一度に管理できるものくらいの認識で今はOK(多分)
最後に
とりあえず、ざっくり概要はわかった。 明日はもうちょっと詳しく使い方を勉強して、実際のプロジェクトに導入して行ってみよう。