Open5

[Dcoker] 学習メモ

noknok

はじめに

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

noknok

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

イメージ図
イメージ図

noknok

よく使いそうなコマンドメモ

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 {ネットワーク名} {イメージ名}

参考ドキュメント

https://docs.docker.jp/v1.9/engine/articles/systemd.html
https://docs.docker.com/reference/cli/docker/
https://docs.docker.jp/index.html

noknok

.dockerignoreの活用

  • 「.gitignore」と同じ様な使い方が出来るもので、「.dockerignore」ファイル内に不要なファイル名を記載していると、ビルド時に不要なファイルを除外してくれる。以下、ドキュメントより引用

ファイルを使用して.dockerignore、ビルド コンテキストからファイルまたはディレクトリを除外できます。
これにより、不要なファイルやディレクトリがビルダーに送信されるのを防ぎ、特にリモート ビルダーを使用する場合にビルド速度が向上します。

ターミナル
# .dockerignore内の例
node_modules
bar

参考ドキュメント

https://docs.docker.com/build/concepts/context/#dockerignore-files
https://matsuand.github.io/docs.docker.jp.onthefly/develop/develop-images/dockerfile_best-practices/#ビルドコンテキストの理解

noknok

Dockerfile内の、ARGとENVの使い分けについて

  • ARGとENVとは
    • ARG:ユーザが渡せる変数を定義するもの。イメージ作成時のみ、有効な一時的な変数
    • ENV:環境変数を定義するもの。イメージ作成時とコンテナ実行時、両方で有効な変数


  • ARGとENVの使い分けイメージ
    • ARG:イメージ作成時のみ参照の必要がある場合のみ、利用する
    • ENV:イメージが存在する間、常に参照の必要がある場合に利用する

参考ドキュメント

https://docs.docker.com/build/building/variables/
https://www.docker.com/ja-jp/blog/docker-best-practices-using-arg-and-env-in-your-dockerfiles/