Dockerで学んだことを、自分用のメモとしてまとてみました!
参考になれば幸いです。
≫こちらのUdemy教材でDockerを学びました≫こちらの本でDockerを学びました目次
- 【Dockerイメージ編】学んだこと/よく使うコマンド
- 【Dockerコンテナ編】Dockerでよく使うコマンド
- 【Dockerコンテナ操作編】Dockerでよく使うコマンド
- 【操作の流れ】Docker CLI /Docker REST API/Dockerデーモン
- 【Dockerfile編】Dockerでよく使うコマンド
- 【Dockerfileの中身編】Dockerでよく使うコマンド
- 【ボリューム編】Dockerでよく使うコマンド
- 【Dockerネットワーク編】Dockerでよく使うコマンド
- 【Docker Compose操作編】Dockerでよく使うコマンド
- 【入門】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 イメージ名
【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を学びました≫こちらの本でDockerを学びました【Dockerコンテナ操作編】Dockerでよく使うコマンド
ここからはDockerのコンテナを操作するコマンド等の紹介になります。
下記「-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状態で動作中でも強制的に削除することができます。
docker container rm -f コンテナ名
【操作の流れ】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 API | Dockerデーモンとやり取りするインターフェース。 |
Dockerデーモン | 実際の作業を行うバックエンド(コンテナ管理、イメージ操作)。 |
【Dockerfile編】Dockerでよく使うコマンド
Dockerfile とは、Dockerイメージを作成するための設計書(スクリプト) です。
テキストファイルとして記述され、イメージのベースや追加の設定、アプリケーションや環境構築に必要な手順をカスタマイズできます。
DockerHubから取ってくるイメージは最低限の機能しかないとのこと。
そのためそれをカスタマイズして使うために、Dockerfileが必要です。
下記コマンドで、Dockerfileからイメージを作ることができます。
docker image build {Dockerfileがあるパス ビルドコンテキスト}
ここで指定したビルドコンテキストのパス(Docekerfileがあるディレクトリ)配下のファイルは、すべてDockerデーモンという場所に送られるのが特徴です。
圧縮して送られる感じです。
そのため後ほど解説するCOPYという命令で、Dockerデーモンにて複製することができるんですね。
下記コマンドのように「-f」をつけて指定すれば、Dockerfileがあるパスと、ビルドコンテキストのパスを変えて指定することができます。
docker image build -f {Dockerfileがあるパス} {ビルドコンテキストのパス}
つまり下記の例だと、Dockerfileのあるパスは「./file/」部分だけど、ビルドコンテキスト(Dockerデーモンに送る部分)は「.」にしているということですね。
docker image build -f ./file/Dockerfile .
「.dockerignore」というファイルを使えば、Dockerデーモンに送る処理を、除外するファイルを指定することができます。
test.txt
下記コマンドのように「-t」をつけて指定すれば、Dockerfileから作るイメージに名前とタグをつけることができます。
docker image build -t {任意の名前:タグ名} {Dockerfileがあるパス}
下記コマンドを使えば、イメージのレイヤー構造を確認することができます。
docker image history {イメージ名}
【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 |
ADD | COPYに似ているが、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を使いベースのimageを指定します。
FROM ubuntu:20.04
ベースとしたimageに対してRUNを使いカスタマイズします。
RUN apt update
RUN apt install -y curl
(追加先のディレクトリがなくても、ubuntuだと自動的に作成してくれます)
指定したファイルやディレクトリを、指定したパスにコピーすることができます。
COPY {追加元のファイル or ディレクトリ} {追加先のパス}
COPY ./hoge.txt /hoge/
COPY ./hoge /hoge/
コンテナを実行するときの、デフォルトコマンドを指定することができます。
CMD ["コマンド", "引数", "引数"]
#例
CMD ["ls", "-la"]
こちらはDockerfileにて一度のみ使うことが可能です。
Dockerイメージに環境変数を指定することができます。
ENV {キー}={値}
例として下記の感じですね↓
ENV hoge=HOGEHOGE
ENV hogehoge="Hoge Hoge"
ビルド時に渡す引数を指定することができます。
ARG {キー}={値}
下記のように「–build-arg」を使えば、引数を使って指定できます。
docker image build --build-arg {キー}={値} .
作業ディレクトリを指定することができます。
#例
WORKDIR /hoge/hoge
WORKDIR ..
命令 | 特徴 |
---|---|
ENV | イメージビルド時、コンテナ実行時に有効な変数 |
ARG | イメージビルド時のみ有効な変数 |
「&&」や「\」で改行することで、レイヤーの容量を小さくすることができます。
RUN apt-get update && \
apt-get install -y curl
「&&」とすることで「apt-get update」が成功した場合のみ、「apt-get install -y curl」が実行されるます。
また「\」で改行することが可能です。
改行を意味するだけで、実行自体には影響はありません。
これによりレイヤーの数が減り、容量を小さくすることが可能です。
≫こちらのUdemy教材でDockerを学びました≫こちらの本で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を学びました≫こちらの本で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 network ls
下記のコマンドで、指定したDockerネットワークの詳細を表示することができます。
docker network inspect {ネットワーク名}
またそこででてくるContainersという部分のものが、今そのネットワークに接続されてるコンテナになります。
"Containers": {},
下記コマンドで、Dockerネットワークを作成することができます。
docekr network create {ネットワーク名}
下記コマンドのように「–network ネットワーク名」を入れれば、指定したDockerネットワークにコンテナを接続することができます。
docker container run --network {ネットワーク名} nginx
下記のコマンドで、指定したDockerネットワークを削除することができます。
docker network rm {ネットワーク}
ただこのネットワークに接続して動いてるコンテナがあると、削除できないため注意。
≫こちらのUdemy教材でDockerを学びました≫こちらの本で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.yml を元にコンテナを起動することができます。
docker-compose up
ちなみに-dオプションを付けると、コンテナをバックグラウンドで実行可能です。
docker-compose up -d
下記コマンドで、docker-compose.yml の中で指定された、buildセクションに基づいてイメージをビルドします。
docker-compose build
下記コマンドで、起動中のコンテナを停止します。
docker-compose stop
ただコンテナ自体は削除されず停止状態で残ります。
再起動するときに既存の状態を保持したまま使いたい場合に便利です。
下記コマンドで、起動したコンテナを停止することができます。
docker-compose down
ネットワークやボリュームを削除します。
完全に環境をリセットしたい場合に使います。
下記コマンドで、Docker Composeにて起動している管理化コンテナを一覧で表示することができます。
docker-compose ps
下記コマンドで、ログを表示することができます。
docker-compose logs
【入門】Dockerで学んだことをまとめてみた【よく使うコマンド】:まとめ
- Dockerイメージ
- Dockerコンテナ
- Dockerコンテナ操作
- Docker CLI /Docker REST API/Dockerデーモン
- Dockerfile
- Dockerfileの中身
- ボリューム
- Dockerネットワーク
- Docker Compose
参考になれば幸いです!