🐳

Dockerについてザーッとさらう

2021/06/11に公開

参考書籍docker基礎からのコンテナ構築 さわって学ぶクラウドインフラ 決定版

Docker

Linux上で動くソフトでLinuxにDocker EngineをインストールするとDockerのコンテナを実行できるようになる
Docker EngineをインストールしたコンピュータをDockerホストと呼ぶ
👉Macで動かす場合、Docker Desktopなどを使う
👉MacでLinuxを動かすためのもの

Dockerコンテナ

システムの実行環境を隔離した空間のことで、それぞれ独自のディレクトリ構成を持っている
コンテナ同士は影響を与えない

Dockerイメージ

コンテナの元になるもので、Linuxの基本コマンドなどが初めから搭載されている
Docker HubからDLでき、イメージには2種類ある

  • Linuxディストリビューションだけで構成されているもの
    👉ここに必要なものを追加していく形、独自コンテナを自由に作る場合に用いられる
  • アプリケーション入りイメージ
    👉自分でソフトをインストールする必要がない

作成方法

  • コンテナから作成する場合
    1. ベースとなるイメージカラコンテナを起動し、docker execやdocker cpなどで調整を加える
    2. docker commitを使いイメージ化
  • dockerfileから作成する場合
    1. ベースとなるイメージとそのイメージに対してどのような操作をするのかを記したDockerfileを作成
    2. docker buildすると一行ずつ処理され、イメージが作成される
      👉何をどう変更したかがわかるから普通こっちを使う

コンテナ操作のセオリー

  1. Docker Hubでイメージを探す
  2. docker runを実行(コンテナ起動)
  3. docker stop / docker start(停止と再開)
  4. docker logs(ログの確認、Docker Desktopでも確認できる)
  5. docker rm(コンテナの破棄)
  6. docker images rm(イメージの破棄)

コンテナ内でシェルやプログラムを実行する

(シェルとはキーボードから操作を読み取り、それを解釈実行して結果を画面に表示するプログラムのこと、bashやzsh)

コンテナ内のファイル

コンテナの中にファイルをコピーする
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: 👉ボリュームの定義が書ける
GitHubで編集を提案

Discussion