時給単価UP【3大特典付き】
コーディングテクニック集100選⋙

【入門】Dockerで学んだことをまとめてみた【よく使うコマンド】

記事内に広告を含みます

Dockerで学んだことを、自分用のメモとしてまとてみました!

参考になれば幸いです。

≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

目次

【Dockerイメージ編】学んだこと/よく使うコマンド

Dockerイメージとはコンテナを作るための仕様書みたいなものです。

コンテナにいるソフトウェアや変数、設定などの情報が書かれてるのが特徴です。

イメージをダウンロード

下記のコマンドで、イメージをダウンロードすることができます。

docker image pull イメージ名

タグを指定するときはこちら↓

docker image pull イメージ名:数値

イメージを一覧で表示

下記のコマンドで、ダウンロードされたイメージ一覧を表示することができます。

docker image ls

すると下記のリストがでてきます。

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    20377134ad88   4 weeks ago   101MB
REPOSITORYイメージが属するリポジトリ名
TAGイメージのバージョンや識別子
IMAGE IDイメージを一意に識別するID
CREATEDイメージが作成された日時
SIZEイメージのディスク上のサイズ

イメージを破棄する

下記のコマンドでイメージを破棄することができます。

docker image rm イメージ名 or イメージID

リポジトリ名やイメージIDを指定することが可能です。

イメージを破棄する

下記のコマンドでイメージの詳細を見ることができます。

docker image inspect イメージ名
≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

【Dockerコンテナ編】Dockerでよく使うコマンド

Dockerコンテナとは、アプリケーションやその依存関係を一つの軽量な仮想環境として実行する単位です。

ホストOSのカーネルを共有しつつ、各コンテナは独立した環境で動作します。

起動が速く、リソース効率が高いのが特徴です。

イメージからコンテナ作成+起動

下記のコマンドで「イメージ取得 + コンテナ作成 + 実行 」を行ってくれます。

docker container run イメージ名

コンテナを一覧で表示

下記のコマンドでローカルにあるコマンドを一覧で表示することが可能です。

docker container ls

ちなみに「-a」をつけることで、起動してないコンテナも見ることができます。

docker container ls -a

すると下記のリストがでてきます。

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
CONTAINER IDコンテナを一意に識別するID
REPOSITORYコンテナが基づいているDockerイメージ名
COMMANDコンテナ内で実行されているコマンド
CREATEDコンテナが作成された日時または経過時間
STATUSコンテナの現在の状態
(例: Upは実行中、Exitedは停止)
PORTSコンテナのポートマッピング情報
NAMESコンテナに割り当てられた一意の名前

コンテナを停止する

下記のコマンドで、コンテナを停止することができます。

docker container stop コンテナ名

コンテナを再起動する

下記のコマンドで、コンテナを再起動することができます。

docker container restart コンテナ名

コンテナのログを表示する

下記のコマンドで、コンテナのログを表示することができます。

docker container logs コンテナ名

コンテナを破棄する

下記のコマンドで、コンテナを破棄することができます。

docker container rm コンテナ名

ちなみに停止中のコンテナにしか使うことができません。

≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

【Dockerコンテナ操作編】Dockerでよく使うコマンド

ここからはDockerのコンテナを操作するコマンド等の紹介になります。

-itオプション

下記「-it」オプションを入れることで、コンテナ内のシェルにアクセスして、見やすく操作することができます。

docker container run -it イメージ名
-iコンテナの標準入力(stdin)を開いたままにする。
ユーザーがコンテナに対してリアルタイムで入力を行えるように。
-tターミナル上でコンテナの出力を見やすく表示し、対話的な操作が可能に。

コンテナ起動時に任意のコマンドを実行

下記のコマンドで、コンテナを起動した時に実行するコマンドを指定することができます。

docker container run -it イメージ名 コマンド

既存のコンテナに任意のコマンドを実行

下記のコマンドで、既存にあるコンテナに対してコマンドを指定することができます。

docker container exec コンテナ名 コマンド名

ちなみにUp状態のコマンドに対して指定する必要があります。

コンテナ名を任意の名前に変更する

コンテナ名は自動で作成されていました。

下記コマンドのように「–name」を使えば、任意の名前に変更することができます。

docker container run --name 任意の名前 イメージ名

停止済みのコマンドを全て削除する

下記コマンドで、停止しているコンテナを全て削除することができます。

docker container prune

Up状態のコンテナは削除されません。

コンテナを実行終えた後に削除する

下記コマンドで、コンテナを実行が終わった後に削除することができます。

docker container run --rm イメージ名

コンテナがUp状態でも強制的に削除する

下記コマンドで、コンテナがUp状態で動作中でも強制的に削除することができます。

docker container rm -f コンテナ名
≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

【操作の流れ】Docker CLI /Docker REST API/Dockerデーモン

Dockerの操作の流れは「Docker CLI ⇒ Docker REST API ⇒ Dockerデーモン」という感じですね。

  • ユーザーが直接使うコマンドラインツール。
  • REST APIを使ってデーモンに命令を送る。
  • 簡単なコマンドで複雑な操作を実行可能。
  • HTTPベースのAPIで、CLIやプログラムからデーモンと通信するためのインターフェース。
  • JSON形式のリクエストとレスポンスを使用。
  • 直接操作も可能(例: カスタムアプリケーションで利用)。
  • Dockerの心臓部で、全てのコンテナやイメージ管理を担当。
  • REST APIリクエストを処理し、実際の作業を行う。
  • 通常はdockerdとしてシステム上で動作。
コンポーネント役割
Docker CLIユーザーが使うインターフェース。REST APIを呼び出す。
Docker REST APIDockerデーモンとやり取りするインターフェース。
Dockerデーモン実際の作業を行うバックエンド(コンテナ管理、イメージ操作)。
≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

【Dockerfile編】Dockerでよく使うコマンド

Dockerfile とは、Dockerイメージを作成するための設計書(スクリプト) です。

テキストファイルとして記述され、イメージのベースや追加の設定、アプリケーションや環境構築に必要な手順をカスタマイズできます。

DockerHubから取ってくるイメージは最低限の機能しかないとのこと。

そのためそれをカスタマイズして使うために、Dockerfileが必要です。

Dockerfileからイメージを作成

下記コマンドで、Dockerfileからイメージを作ることができます。

docker image build {Dockerfileがあるパス ビルドコンテキスト}

ここで指定したビルドコンテキストのパス(Docekerfileがあるディレクトリ)配下のファイルは、すべてDockerデーモンという場所に送られるのが特徴です。

ジト
ジト

圧縮して送られる感じです。

そのため後ほど解説するCOPYという命令で、Dockerデーモンにて複製することができるんですね。

Dockerfileとパスとビルドコンテキストのパスを変える

下記コマンドのように「-f」をつけて指定すれば、Dockerfileがあるパスと、ビルドコンテキストのパスを変えて指定することができます。

docker image build -f {Dockerfileがあるパス} {ビルドコンテキストのパス}

つまり下記の例だと、Dockerfileのあるパスは「./file/」部分だけど、ビルドコンテキスト(Dockerデーモンに送る部分)は「.」にしているということですね。

docker image build -f ./file/Dockerfile .

.dockerignoreで除外する

「.dockerignore」というファイルを使えば、Dockerデーモンに送る処理を、除外するファイルを指定することができます。

test.txt

Dockerfileで作成するイメージに名前をつける

下記コマンドのように「-t」をつけて指定すれば、Dockerfileから作るイメージに名前とタグをつけることができます。

docker image build -t {任意の名前:タグ名} {Dockerfileがあるパス}

Dockerfileのレイヤー構造を確認する

下記コマンドを使えば、イメージのレイヤー構造を確認することができます。

docker image history {イメージ名}
≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

【Dockerfileの中身編】Dockerでよく使うコマンド

ここからはDockerfileの中身にて書くコードの紹介になります。

主な書くコードがこちら↓

命令説明
FROMベースとなるDockerイメージを指定。
Dockerfileは必ず1つのFROMから始まる。
FROM ubuntu:20.04
RUNコマンドを実行して、イメージをビルドする際に必要な操作を実行。RUN apt-get update && apt-get install -y curl
CMDコンテナ実行時にデフォルトで実行されるコマンドや引数を指定。
ただdocker run 時に上書き可能。
CMD ["python3", "app.py"]
ENTRYPOINTコンテナ実行時に実行されるメインコマンドを設定。
CMDと併用することで、コマンド引数を固定化できる。
ENTRYPOINT ["nginx", "-g"]
WORKDIRコンテナ内での作業ディレクトリを指定。
以降の命令で相対パスを簡潔に記述可能。
WORKDIR /app
COPYホストマシンからファイルやディレクトリをコンテナイメージ内にコピー。COPY . /app
ADDCOPYに似ているが、URLからのダウンロードや圧縮ファイルの解凍も可能。ADD https://example.com/file.tar.gz /tmp/
ENV環境変数を設定。
コンテナ内で必要な設定値を柔軟に渡すことが可能。
ENV NODE_ENV=production
EXPOSEコンテナがリッスンするポート番号を指定
(実際に公開するには docker run -p が必要)。
EXPOSE 8080
ARGビルド時に渡す引数を指定。
docker build –build-argで値を指定可能。
ARG VERSION=1.0
VOLUMEコンテナとホスト間でデータを共有するボリュームを指定。
データ永続化に使用。
VOLUME /data
LABELイメージにメタデータ(作者やバージョン情報など)を追加。LABEL maintainer="you@example.com"
USERコンテナ内で実行されるコマンドの実行ユーザーを指定。USER nonrootuser

この中からよく使うであろう命令を解説していきます。

FROM

基本的にはFROMから始まる事が多いです。

FROMを使いベースのimageを指定します。

FROM ubuntu:20.04

RUN

ベースとしたimageに対してRUNを使いカスタマイズします。

RUN apt update
RUN apt install -y curl

(追加先のディレクトリがなくても、ubuntuだと自動的に作成してくれます)

COPY

指定したファイルやディレクトリを、指定したパスにコピーすることができます。

COPY {追加元のファイル or ディレクトリ} {追加先のパス}

COPY ./hoge.txt /hoge/

COPY ./hoge /hoge/

CMD

コンテナを実行するときの、デフォルトコマンドを指定することができます。

CMD ["コマンド", "引数", "引数"]

#例
CMD ["ls", "-la"]

こちらはDockerfileにて一度のみ使うことが可能です。

ENV

Dockerイメージに環境変数を指定することができます。

ENV {キー}={値}

例として下記の感じですね↓

ENV hoge=HOGEHOGE
ENV hogehoge="Hoge Hoge"

ARG

ビルド時に渡す引数を指定することができます。

ARG {キー}={値}

下記のように「–build-arg」を使えば、引数を使って指定できます。

docker image build --build-arg {キー}={値} .

WORKDIR

作業ディレクトリを指定することができます。

#例
WORKDIR /hoge/hoge

WORKDIR ..

ENV ARGの特徴

命令特徴
ENVイメージビルド時、コンテナ実行時に有効な変数
ARGイメージビルド時のみ有効な変数

レイヤーの容量を小さくする方法

「&&」や「\」で改行することで、レイヤーの容量を小さくすることができます。

RUN apt-get update && \
    apt-get install -y curl

「&&」とすることで「apt-get update」が成功した場合のみ、「apt-get install -y curl」が実行されるます。

また「\」で改行することが可能です。
改行を意味するだけで、実行自体には影響はありません。

これによりレイヤーの数が減り、容量を小さくすることが可能です。

≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

【ボリューム編】Dockerでよく使うコマンド

Dockerのボリュームとは、コンテナとホスト間でデータを永続化したり共有するための仕組みのこと。

コンテナを削除しても、データを保持することができます。

これによりコンテナの起動・停止・削除に関係なく、データを安全に管理することが可能です。

ボリューム領域を作成する

下記コマンドで、ボリューム領域を作成することができます。

docker volume create {ボリューム名}

ボリューム領域の一覧を表示する

下記コマンドで、作成したボリューム領域の一覧を表示することができます。

docker volume ls

ボリューム領域の詳細を表示

下記コマンドで、指定したボリュームの詳細情報を表示することができます。

docker volume inspect {ボリューム名}

すると下記の情報がでてきます。

[
    {
        "CreatedAt": "2024-12~~",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/my-volume/_data",
        "Name": "name-volume",
        "Options": null,
        "Scope": "local"
    }
]

この「Mountpoint」がボリュームが存在するパスになりますね。

ただこちらのボリューム領域は仮想的なので、直接アクセスしてみるのはできないとのこと。。

ボリューム領域を削除する

下記コマンドで、指定したボリューム領域を削除することができます。

docker volume rm {ボリューム名}

ボリュームに接続しつつコンテナを起動

下記コマンドで、ボリュームに接続しながらのコンテナを起動することができます。

docker container run -v {ボリュームの名前}:{コンテナの絶対パス} {イメージの名前}
docker container run --mount type=volume src={ボリュームの名前},dst={コンテナの絶対パス} {イメージの名前}

コンテナの絶対パスの配下にあるファイル等は、変更されたら指定したボリューム領域に反映されるのが特徴です。

どちらを使っても実行処理は同じとのこと。

例となるコード

例として書きみたいな感じですね↓

docker container run -it -v hoge-volume:/hoge1 --name container01  ubuntu:20.04 
docker container run -it -v hoge-volume:/hoge2 --name container02  ubuntu:20.04 

この場合
「container01」の「/hoge1」のディレクトリ中身と、
「container02」の「/hoge2」のディレクトリ中身は、
「hoge-volume」のボリュームの中身にて同期されます。

つまり「/hoge1」の中に「test.txt」を作成したら、同期されてるので「/hoge2」のなかで「test.txt」が見れるということですね。

バインドマウントのコマンド

バインドマウントとは、ホストの指定したディレクトリやファイルをコンテナ内の特定のパスにリンクする仕組みです。

ようはホストからアクセスすることができます。

docker container run -v {ホストの絶対パス}:{コンテナの絶対パス} {イメージの名前}
docker container run --mount type=volume src={ホストの絶対パス},dst={コンテナの絶対パス} {イメージの名前}

どちらを使っても実行処理は同じとのこと。

≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

【Dockerネットワーク編】Dockerでよく使うコマンド

Dockerネットワークは、コンテナ同士やコンテナとホスト間の通信を管理するための仕組みです。

コンテナに個別のIPアドレスを割り当て、通信の連携を設定できます。

ホストマシンとコンテナのポートを紐づけ

下記コマンドのように「-p」を使えば、ホストとコンテナのポートを紐づけができます。

docker container run -p {ホストマシンのポート}:{コンテナのポート} {イメージ名}

例として下記のようにコマンドを打つと、ホストのポート3000をコンテナ内のポート80にマッピングします。

docker container run -p 3000:80 nginx

つまり「http://localhost:3000 」にアクセスすると、コンテナ内で稼働する nginx のWebサービスに接続することが可能です。

Dockerネットワークの一覧を表示

下記のコマンドで、Dockerネットワークの一覧を表示することができます。

docker network ls

Dockerネットワークの詳細を表示

下記のコマンドで、指定したDockerネットワークの詳細を表示することができます。

docker network inspect {ネットワーク名}

またそこででてくるContainersという部分のものが、今そのネットワークに接続されてるコンテナになります。

"Containers": {},

Dockerネットワークを作成

下記コマンドで、Dockerネットワークを作成することができます。

docekr network create {ネットワーク名}

コンテナを指定したDockerネットワークに接続する

下記コマンドのように「–network ネットワーク名」を入れれば、指定したDockerネットワークにコンテナを接続することができます。

docker container run  --network {ネットワーク名} nginx

Dockerネットワークを削除する

下記のコマンドで、指定したDockerネットワークを削除することができます。

docker network rm {ネットワーク}

ただこのネットワークに接続して動いてるコンテナがあると、削除できないため注意。

≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

【Docker Compose操作編】Dockerでよく使うコマンド

Docker Composeは、複数のDockerコンテナを一括で管理・起動するためのツールです。

開発環境や複雑なシステムのセットアップを効率化します。

ファイルの例

ファイルの例として、名前や拡張子は下記になります。

docker-compose.yml

例として下記のようなファイルを作成してみました。

こんな感じでポートやボリュームなどを一括で管理することができます。

# Docker Compose のバージョン
version: '3.9'

# サービスの定義
services:
  # Webサーバーコンテナ
  web:
    # 使用するベースイメージ
    image: nginx:latest
    # ホストのポート8080をコンテナのポート80にマッピング
    ports:
      - "8080:80"
    # ホストの ./html ディレクトリをコンテナの /usr/share/nginx/html にマウント
    volumes:
      - ./html:/usr/share/nginx/html

  # データベースコンテナ
  db:
    # 使用するベースイメージ
    image: mysql:8.0
    # 環境変数を設定(例: MySQLのパスワードやデータベース名)
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: example_db
      MYSQL_USER: user
      MYSQL_PASSWORD: password

  # ビルドするアプリケーションコンテナ
  app:
    # Dockerfile を使って独自イメージをビルド
    build:
      # ビルドコンテキスト(このディレクトリ内の Dockerfile を使用)
      context: .
      # Dockerfile のファイル名(必要なら指定)
      dockerfile: Dockerfile
    # コンテナの再起動ポリシー
    restart: always

Docker Composeを起動

下記コマンドで、docker-compose.yml を元にコンテナを起動することができます。

docker-compose up

ちなみに-dオプションを付けると、コンテナをバックグラウンドで実行可能です。

docker-compose up -d

Docker Composeにてイメージをビルド

下記コマンドで、docker-compose.yml の中で指定された、buildセクションに基づいてイメージをビルドします。

docker-compose build

Docker Composeにて起動中のコンテナを停止

下記コマンドで、起動中のコンテナを停止します。

docker-compose stop

ただコンテナ自体は削除されず停止状態で残ります。

再起動するときに既存の状態を保持したまま使いたい場合に便利です。

Docker Composeを停止する

下記コマンドで、起動したコンテナを停止することができます。

docker-compose down

ネットワークやボリュームを削除します。

完全に環境をリセットしたい場合に使います。

Docker Composeの管理化コンテナを表示する

下記コマンドで、Docker Composeにて起動している管理化コンテナを一覧で表示することができます。

docker-compose ps

Docker Composeのログを表示

下記コマンドで、ログを表示することができます。

docker-compose logs
≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

【入門】Dockerで学んだことをまとめてみた【よく使うコマンド】:まとめ

  • Dockerイメージ
  • Dockerコンテナ
  • Dockerコンテナ操作
  • Docker CLI /Docker REST API/Dockerデーモン
  • Dockerfile
  • Dockerfileの中身
  • ボリューム
  • Dockerネットワーク
  • Docker Compose
ジト
ジト

参考になれば幸いです!

≫こちらのUdemy教材でDockerを学びましたicon≫こちらの本でDockerを学びました

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA