Open5
[Dcoker] 学習メモ

はじめに
Dockerに関して学んだ内容についてメモします。

Dockerファイルからコンテナ実行までの流れ
イメージ図

よく使いそうなコマンドメモ
Dockerの管理・設定
ターミナル
# Docker起動
sudo systemctl start docker
# Docker停止
sudo systemctl stop docker
# Docker自動起動の設定
sudo systemctl enable docker
イメージ操作
ターミナル
# イメージダウンロード(DockerHubなどからダウンロード)
docker image pull {イメージ名}
# 一覧表示(利用可能なもののみ表示 or 不要なもの含めて表示)
docker image ls
docker image ls -a
# 削除(特定のイメージ)
docker image rm {イメージ名 or イメージID}
# 削除(利用されていないイメージ全て)
# MEMO: 「利用されていないイメージ = タグを持たず、他のコンテナからも参照されないイメージ」
# 利用されていないイメージは、「宙ぶらりんイメージ(dangling image)」と言う
docker image prune
# イメージの詳細表示
docker image inspect {イメージ名}
# イメージのレイヤー表示
docker image history {イメージ名}
# Dockerfileからイメージ作成
# MEMO: Dockerが存在するディレクトリパスを指定する
docker image build {ディレクトリパス}
# Dockerfileからイメージ作成(イメージに名前とタグを付ける)
# 例: docker image build -t hogeImage:tagName .
docker image build -t {任意のイメージ名:任意のタグ名} {ディレクトリパス}
コンテナ操作
ターミナル
# 起動
docker container run {イメージ名}
# デタッチモードで起動
# MEMO: コンテナ実行時には「デタッチモード」と「フォアグラウンドモード」がある
# デタッチモード: 「-d」オプションを付けることで、バックグラウンドで起動される
# フォアグラウンドモード: 何も指定しないと、こちらのモードになる
docker container run -d {イメージ名}
# 一覧表示(利用可能なもののみ表示 or 不要なもの含めて表示)
docker container ls
docker container ls -a
# 停止
docker container stop {コンテナ名}
# 再起動
docker container restart {コンテナ名}
# 削除(ステータスがExitになっているコンテナにのみ有効)
docker container rm {コンテナ名}
# 強制削除(ステータスがUpになっているコンテナを強制的に削除)
docker container rm -f {コンテナ名}
# 削除(利用されていないコンテナ全て)
docker container prune
# コンテナにコマンド実行させる
# 例:docker container exec {コンテナ名} ls
docker container exec {コンテナ名} {実行したいコマンド}
# ファイルコピー: ホストー>コンテナ
docker container cp {ホストパス} {コンテナ名}:{コンテナパス}
# ファイルコピー: コンテナー>ホスト
docker container cp {コンテナ名}:{コンテナパス} {ホストパス}
ボリューム操作
ターミナル
# 新規ボリューム領域作成
docker volume create {ボリューム名}
# 一覧表示
docker volume ls
# 削除
docker volume rm {ボリューム名}
# ボリュームの詳細表示
docker volume inspect {ボリューム名}
# ボリュームマウントでコンテナ起動
# MEMO: 書き方の違いのみでどちらも同じ
docker container run -v {ボリューム名}:{コンテナ内の絶対パス} {イメージ名}
docker container run -mount type=volume src={ボリューム名},dst={コンテナ内の絶対パス} {イメージ名}
# バインドマウントでコンテナ起動
# MEMO: 書き方の違いのみでどちらも同じ
docker container run -v {ホスト側の絶対パス}:{コンテナ内の絶対パス} {イメージ名}
docker container run -mount type=bind src={ホスト側の絶対パス},dst={コンテナ内の絶対パス} {イメージ名}
# バインドマウント時に、絶対パスの記載を省略した記法
# MEMO:「$(pwd)」コマンド使うと絶対パスを省略できる
docker container run -v $(pwd):{コンテナ内の絶対パス} {イメージ名}
ネットワーク操作
ターミナル
# 作成
docker network create {ネットワーク名}
# 削除
docker network rm {ネットワーク名}
# ネットワークの詳細表示
docker network inspect {ネットワーク名}
# 指定したネットワークに接続したコンテナを起動
docker container run --network {ネットワーク名} {イメージ名}
参考ドキュメント

.dockerignoreの活用
- 「.gitignore」と同じ様な使い方が出来るもので、「.dockerignore」ファイル内に不要なファイル名を記載していると、ビルド時に不要なファイルを除外してくれる。以下、ドキュメントより引用
ファイルを使用して.dockerignore、ビルド コンテキストからファイルまたはディレクトリを除外できます。
これにより、不要なファイルやディレクトリがビルダーに送信されるのを防ぎ、特にリモート ビルダーを使用する場合にビルド速度が向上します。
ターミナル
# .dockerignore内の例
node_modules
bar
参考ドキュメント

Dockerfile内の、ARGとENVの使い分けについて
- ARGとENVとは
- ARG:ユーザが渡せる変数を定義するもの。イメージ作成時のみ、有効な一時的な変数
- ENV:環境変数を定義するもの。イメージ作成時とコンテナ実行時、両方で有効な変数
- ARGとENVの使い分けイメージ
- ARG:イメージ作成時のみ参照の必要がある場合のみ、利用する
- ENV:イメージが存在する間、常に参照の必要がある場合に利用する
参考ドキュメント