🐳
Dockerについてザーッとさらう
参考書籍docker基礎からのコンテナ構築 さわって学ぶクラウドインフラ 決定版
Docker
Linux上で動くソフトでLinuxにDocker EngineをインストールするとDockerのコンテナを実行できるようになる
Docker EngineをインストールしたコンピュータをDockerホストと呼ぶ
👉Macで動かす場合、Docker Desktopなどを使う
👉MacでLinuxを動かすためのもの
Dockerコンテナ
システムの実行環境を隔離した空間のことで、それぞれ独自のディレクトリ構成を持っている
コンテナ同士は影響を与えない
Dockerイメージ
コンテナの元になるもので、Linuxの基本コマンドなどが初めから搭載されている
Docker HubからDLでき、イメージには2種類ある
- Linuxディストリビューションだけで構成されているもの
👉ここに必要なものを追加していく形、独自コンテナを自由に作る場合に用いられる - アプリケーション入りイメージ
👉自分でソフトをインストールする必要がない
作成方法
- コンテナから作成する場合
- ベースとなるイメージカラコンテナを起動し、docker execやdocker cpなどで調整を加える
- docker commitを使いイメージ化
- dockerfileから作成する場合
- ベースとなるイメージとそのイメージに対してどのような操作をするのかを記したDockerfileを作成
- docker buildすると一行ずつ処理され、イメージが作成される
👉何をどう変更したかがわかるから普通こっちを使う
コンテナ操作のセオリー
- Docker Hubでイメージを探す
- docker runを実行(コンテナ起動)
- docker stop / docker start(停止と再開)
- docker logs(ログの確認、Docker Desktopでも確認できる)
- docker rm(コンテナの破棄)
- docker images rm(イメージの破棄)
コンテナ内でシェルやプログラムを実行する
(シェルとはキーボードから操作を読み取り、それを解釈実行して結果を画面に表示するプログラムのこと、bashやzsh)
- コンテナ停止中・・・
docker run -it 〇〇 /bin/bash
- コンテナ起動中・・・
docker exec -it 〇〇 /bin/bash
👉おすすめ記事docker run -it の「-it」とはなにか
コンテナ内のファイル
コンテナの中にファイルをコピーする
docker cp コピー元のパス コンテナ名:コピー先パス
ファイルを失わないようにする(マウントする)
docker run -v ローカルのディレクトリ:コンテナのディレクトリ
起動時に指定
👉マウントはディレクトリに対して行うのがほとんど
- バインドマウント・・・ローカルのディレクトリ配下にファイルなどを保存👉ローカルで参照できる
- ボリュームマウント・・・docker engineにファイルなどを保存👉ブラックボックス
Dockerネットワークについて
- ローカルとコンテナのポートを紐づけて通信👉bridgeネットワークというdockerが用意してくれてるネットワークを使用
- コンテナ名で通信したい時はDockerネットワークを使用👉
docker network create
で新しいネットワークを作成し、run時に--netオプションで紐づける - コンテナ間の通信では、実際のIPアドレスを見ている👉コンテナポートを識別してるのではないため、run時に実行する-pオプションは関係ない
- hostネットワークとnoneネットワーク👉ローカルのIPアドレスを全部のコンテナで共有するやり方と全くネットワークに接続しないやり方で、あまり使われない
Docker Compose
あらかじめコンテナの起動方法やボリューム、ネットワークの構成などを書いた定義ファイル(Composeファイル)を読み込ませることで構築をまとめて実行する方法
👉docker-compose.ymlというファイル名で作成、「サービス」「ネットワーク」「ボリューム」を定義
python製のツールのため、Docker Engineの一部ではない
docker-compose.ymlの書き方
- version: 👉Docker Composeのバージョン指定、バージョンによって書き方が違う
- services: 👉コンテナの定義部分、どのイメージ、ネットワークを使用するのか、環境変数の設定、などもここに書く
- networks: 👉基本名前だけを指定、オプションで好きなIPアドレスにできたりするが、設定自体省略できる
- volumes: 👉ボリュームの定義が書ける
Discussion