Haramaki0326 / StudyToDo

2021年にチャレンジ、やりたいことリスト
0 stars 0 forks source link

Dockerの基本コマンド #85

Closed Haramaki0326 closed 2 years ago

Haramaki0326 commented 2 years ago

Dockerの基本

参考:Zenn

基本の要素

基本のコマンド

コマンドの形

Docker の周辺知識

dockerコマンドは体系化されている

docker container run

docker container ls

docker container stop

docker container exec

docker container run <イメージ名> <コンテナで実行するコマンド>

-it

-i : --interactive

-t : --tty

--rm

docker exec <コンテナ名> bash -c "実行したいコマンド"オプション

リダイレクトやパイプが必要な場合に利用する

# 停止と起動

ネットワーク、ストレージ

Dockerfile

Compose

Haramaki0326 commented 2 years ago

コンテナとは

コンテナは特定のコマンドを実行するために作られる ホストマシン上の隔離された領域 です。

Docker に不慣れな間はコンテナをホストマシン上で動いている仮想 OS のように感じるかもしれませんが、コンテナの実体は Linux の Namespace という機能によりほかと分離されたただの1プロセスでしかありません。 Linux の Namespace 自体はもう 20 年近く存在する技術であり、それをコンテナやイメージというものを用いて扱いやすくした技術が Docker ということになります。

ホストマシンにも各コンテナにも Process ID 1 のプロセスや /etc/hosts などのファイルがあり重複していますが、Namespace により隔離された領域をマッピングすることで衝突を回避しています。

この Namespace をイメージから作り出すことで異なる OS に見えるようにしてくれたり、Namespace を簡単に作ったり消したりできるようなコマンドを提供してくれたりするものが Docker と言えます。

そう考えると【 1部: 仮想化とは 】で説明した「コンテナ型仮想化には OS は含まれておらず、ホストマシンのカーネルを使っている」ということが理解しやすいはずです。 コンテナはあくまでホストマシンの1プロセスであり、仮想サーバではないのです。

コンテナには次のような特徴があります。

  1. コンテナはイメージをもとに作られる
  2. Docker の CLI や API を使って、生成や起動や停止を行うことができる
  3. 複数のコンテナは互いに独立していて影響できず、独自に動作する
  4. Docker Engine の上ならローカルマシンでも仮想マシンでもクラウド環境でも動かせる

Haramaki0326 commented 2 years ago

イメージとは

イメージはコンテナの実行に必要なパッケージで、ファイルやメタ情報を集めたもの です。

イメージは複数のレイヤーというものからなる情報のことであり、ホストマシンのどこかに .img のような具体的な単一のファイルが存在するわけではありません。

イメージにはレイヤーによって次のような情報が含まれています。

イメージは Docker Hub で公開されています。

( Docker Hub に公開されているのは Dockerfile ではありません。)

そのおかげで、たとえばチームで「php8.1 のイメージを使う」と決めておけば、同じ開発環境を構築することが容易にできます。

Haramaki0326 commented 2 years ago

Dockerfileとは

Dockerfile の必要性と有用性 ここまでで次のことを理解しました。

しかし Docker Hub にある公式イメージなどは軽量にするためにレイヤーが最低限しか積み上がっておらず、あまり多機能ではありません。 たとえば Ubuntu コンテナには vi も curl も入っていませんでした。

そこで「公式イメージでは十分なセットアップが得られない」場合に「あらかじめ必要なセットアップを済ませたイメージを自分で作成しておく」というアプローチを取ることになります。

Dockerfile は既存のイメージ ( = レイヤーたち ) に追加でレイヤーを乗せることができるので、OS 設定などの労力を払わずに簡単にイメージを作成することができます。

Haramaki0326 commented 2 years ago

Docker Compose

概要

Compose ファイルは YAML ファイルであり、 サービス(services) 、 ネットワーク(networks) 、 ボリューム(volumes) を定義します。Compose ファイルのデフォルトのパスは ./docker-compose.yml です。

Dockerfileとの対応表

やりたいこと Docker コマンド Yaml ファイル
App コンテナの定義 - app:
App コンテナ名の指定 container run --name container_name:
App イメージのビルド image build build:
App バインドマウント container run --mount volumes:
App ポートを公開 container run --publish ports
App ネットワークに接続 container run --network -
App デフォルト命令の指定 container run <command> command:
DB コンテナの定義 - db:
DB コンテナ名の指定 container run --name container_name:
DB 環境変数を指定 container run --env environment:
DB イメージのビルド image build build:
DB ボリュームをマウント container run --mount volumes:
DB バインドマウント container run --mount volumes:
DB ネットワークに接続 container run --network -
DB エイリアスを設定 container run --network-alias -
Mail コンテナの起動 container run mail:
Mail イメージの指定 - image:
Mail プラットフォームの指定 container run --platform platform:
Mail ポートを公開 container run --publish -
Mail エイリアスを設定 container run --network-alias -
ほか ボリュームの作成 volume create
ほか ネットワークの作成 network create -