Dockerはドッカーと読みます。
自分の中で最大の技術革命と感じたのはgitでした。そして今、Docker=コンテナ技術はそのレベルであらゆる環境の基盤となる標準技術として大きくなってきている感じがしています。
この記事ではDockerを触ってみたフィードバックや、コマンドについて記録していきたいと思います。Dockerを触っていなかった自分が読みたかった記事を自分で記録します。
見出し
- 1 Dockerの概念
- 2 Dockerのコマンド
- 2.1 docker build
- 2.2 docker-compose build
- 2.3 docker create
- 2.4 docker images
- 2.5 docker start
- 2.6 docker restart コンテナ
- 2.7 docker run
- 2.8 docker ps
- 2.9 docker exec -it コンテナ bash (もしくは sh
- 2.10 docker stop
- 2.11 docker network ls
- 2.12 docker network inspect xxxxx
- 2.13 docker network rm xxxxx
- 2.14 docker system prune
- 2.15 docker rm
- 2.16 docker rmi
- 2.17 docker volume ls
- 2.18 docker volume rm ボリューム名
- 2.19 docker-compose up
- 2.20 docker-compose down
- 3 Docker良くあるエラー・トラブル
- 4 まとめ
Dockerの概念
超簡単な概念です。
Dockerは何に使われるか
開発環境
記載した通りの環境が構築出来るので、開発環境に良く使われます。
テスト環境
ステージング環境とは別に、テストプログラムだけ走らせてすぐ破棄するような環境です。CircleCIなどのCI環境、コミットしたら勝手に環境立ち上げてテストして環境も消してくれて結果だけ教えてくれる、みたいに使われます。
本番環境
増やしたり、減らしたりが容易な為、本番環境にも使われます。webサーバ、DBサーバ等。
一時的なバッチ処理
コンテナからバッチを動かしたら、次の定時バッチまで待機している間リソースが無駄なので、 コンテナを廃棄します。
コンテナ
Dockerは1つの環境の単位をコンテナと呼びます。仮想サーバ1台みたいな感じです。
コンテナは破棄される事を想定されています。バッチが動く為に仮想サーバが立ち上がって動いて終わったらサーバも落とす。という感じです。
イメージ
コンテナのテンプレートみたいなものです。一度作った環境はコピーして何回も使い回したいので、その為にあります。
イメージは自分で構成を組む事が出来ます。仮想サーバの構成をCDに焼いて保存するような感じですので、空っぽのサーバでなく中に色々入れられたりします。
Dockerfile
Dockerイメージの構成を記載する設定ファイルです。サーバの中にインストールするものや配置するもの、立ち上げた時の設定、Dockerを立ち上げたホスト(自分のPCなど)との共有ディレクトリなどについて記載します。
イメージの元にするイメージも指定出来ます。
ビルド
Dockerfileからイメージを構築=ビルドする事を指します。
docker-compose
Dockerを束ねて管理出来るようになったやつです。サービスが複数の仮想サーバ(web+dbなど)から成り立っているのを、束ねて管理出来ます。
設定はdocker-compose.ymlに記載します。
Dockerのコマンド
正直、コマンドなんて覚えれば良い。という感じですが、Docker=コンテナ技術に関しては、今まで馴染みのない技術の為、理解出来るまで割と時間がかかりました。仮想環境など触った事がある人だったらちょっと早いと思いますが、やっぱり違います。
Dockerのコマンドは、ぱっと見で覚えられません。(自分は)どういったステータスがあってどういったフローなのかわかっていないと、似たようなコマンドが多いので、なかなかわかりません。自分の感覚ですがコメントをつけて解説していきたいと思います。
わかりやすいように、なるべく使う順番に書いていきたいと思います。
docker build
Dockerfileに書かれた構成でイメージを作ります。良く使います。
docker-compose build
docker-compose.ymlに書かれた複数Dockerfileをまとめてビルドします。
docker create
イメージからDockerfileを介さずに直接コンテナを作ります。後述のdocker-composeがある為、使った事がありませんが、一応記録しておきます。
docker images
ビルドしたイメージ一覧を確認出来ます。docker images -a とオプションをつけると a は all なので全体イメージが確認出来ます。a をつけないと中間コンテナが見れません。
docker start
コンテナを起動します。
docker restart コンテナ
コンテナを再起動します。
docker run
イメージからコンテナを作り、コンテナを起動させます。
中身は docker create & docker start です。
docker ps
起動中のコンテナを確認出来ます。プロセスのpsと覚えられます。
docker exec -it コンテナ bash (もしくは sh
起動しているコンテナの入出力をコンソールでやり取りします。コンテナへSSH接続する感覚に近いです。
docker stop
コンテナを停止します。
docker network ls
Dockerのネットワーク設定一覧を確認します。
docker network inspect xxxxx
docker network lsで見た内容の設定を詳細に確認出来ます。docker毎のネットワーク設定詳細を確認出来ます。
docker network rm xxxxx
docker network lsで見た設定を個別で削除出来ます。
docker system prune
停止コンテナ、未使用ボリューム、未使用ネットワーク、未使用イメージを削除します。
※消えてしまう為、要注意
https://qiita.com/zembutsu/items/f577ea8dad6dc64d70b6
docker rm
コンテナの削除
docker rmi
イメージの削除
docker volume ls
ボリューム一覧確認
docker volume rm ボリューム名
ボリューム削除
docker-compose up
docker-compose.ymlに書かれた複数Dockerfileのビルドされたイメージから、まとめてコンテナ起動します。
docker-compose down
docker-compose.ymlに書かれた複数Dockerfileの起動されたコンテナを停止します。
Docker良くあるエラー・トラブル
起動中のコンテナとポートが被ってコンテナが起動出来ない
どちらかのポートを変更する必要があります。
コンテナ内から特定のIPに接続出来ない
別のコンテナで既に使用しているIPと同じだと接続出来ません。docker network ls, docker network inspect xxxでコンテナIPを確認出来ます。
ログを見る
docker compose up -d でデーモン起動したらログが垂れ流しにならないので、
docker compose logs -f でログを監視する。
docker compose up で 起動したらログがそのまま垂れ流しになる。
まとめ
開発環境から広がったDockerですが、拡張性を高く運用させる為、本番もコンテナで運用するところが増えています。AWSなどのクラウドサービスでも、コンテナ系の技術が進んでおります。
という感じで、これからの基盤となるDocker=コンテナ技術をよろしくお願いいたします。(何だこれ