Docker初心者の為にわかりやすくまとめてみた

Dockerはドッカーと読みます。

自分の中で最大の技術革命と感じたのはgitでした。そして今、Docker=コンテナ技術はそのレベルであらゆる環境の基盤となる標準技術として大きくなってきている感じがしています。

この記事ではDockerを触ってみたフィードバックや、コマンドについて記録していきたいと思います。Dockerを触っていなかった自分が読みたかった記事を自分で記録します。

スポンサーリンク

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 run

イメージからコンテナを作り、コンテナを起動させます。

中身は docker create & docker start です。

docker ps

起動中のコンテナを確認出来ます。プロセスのpsと覚えられます。

docker exec -it コンテナ bash

起動しているコンテナの入出力をコンソールでやり取りします。コンテナへ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ですが、拡張性を高く運用させる為、本番もコンテナで運用するところが増えています。AWSなどのクラウドサービスでも、コンテナ系の技術が進んでおります。

という感じで、これからの基盤となるDocker=コンテナ技術をよろしくお願いいたします。(何だこれ