0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】Docker

Posted at

ダウンロード

動作確認

docker container run hello-world -> 実行できたらDocker daemonが動いている

イメージ

コンテナを作る元になる土台のこと

イメージ図解

image.png

ローカルにイメージをダウンロードする

docker image pull {イメージ名:タグ名}
  • タグ名を省略した場合イメージ名:latestを指定する
  • 落としたいイメージはDocker Hubから探す

ローカルに存在するイメージ一覧を表示

docker image ls

ローカルのイメージを削除

docker image rm {イメージ名:タグ名}

Dockerfileからイメージを作成する

# 基本的には以下の感覚で良い
docker image build {Dockerfileの存在するディレクトリ}

# 厳密には以下の感覚でいる必要がある
docker image build -f {Dockerfileのパス} {ビルドコンテキストのパス}
  • -t {イメージ名:タグ}image buildのオプションに渡すとイメージに命名が出来る

  • -f {Dockerfileのパス}image buildのオプションに渡すと明示的にDockerfileを指定する

  • --target {ビルド対象のステージ}image buildのオプションに渡すと明示的に
    イメージ化するステージを指定出来る

  • ビルドコンテキストについては以下の記事を参照する

  • マルチステージビルドについては以下の記事を参照する

イメージレイヤーを可視化する

docker image history {イメージ名:タグ名}
  • イメージレイヤーについては以下の記事を参照する

Dockerfileの書き方

  • FROM {イメージ名:タグ名}ベースイメージを決める
  • RUN {コマンド}イメージビルド時にコマンドを実行する
  • COPY {コピー元ローカル内のファイル コピー先イメージ内のファイル}
    イメージビルド時にローカルからイメージに任意のファイルをコピーする
  • CMD ["コマンド", "オプション1"...]はデフォルトコマンドを上書きする
  • ENV key="value"はコンテナで使える環境変数を与える
  • ARG 変数名="デフォルト値"イメージビルド時にDockerfile内でのみ使う変数を宣言する
    • docker image buildに対して--build-arg {変数名="代入値"}
      オプションを与えて代入する
  • WORKDIR {ディレクトリパス}
    • イメージビルド時に命令が実行されるディレクトリを変更する
    • コンテナに入った瞬間のディレクトリを変更する

コンテナ

ホストOSとは隔離された実行環境のこと

コンテナ図解

image.png

イメージからコンテナを起動して実行する

docker container run {イメージ名:タグ名}
  • タグ名を省略した場合イメージ名:latestを指定する
  • imageがローカルに存在しない場合image pullからcontainer runを直列に行う
  • -itcontainer runのオプションに渡すと対話モードになる
  • --namecontainer runのオプションに渡すとコンテナ名を明示的に決定
  • --rmcontainer runのオプションに渡すと Exit状態 -> 破棄 を自動で行う
  • -dcontainer runのオプションに渡すとコンテナをバックグラウンドで実行する

バッグラウンド起動してるコンテナに接続する

docker container attach {コンテナ名 | コンテナID}

イメージから任意のコマンドでコンテナを起動する

docker container run {イメージ名:タグ名} {任意のコマンド}
  • イメージ名の後にコマンドを入力するとデフォルトコマンドを乗っ取って任意のコマンドを実行出来る

起動しているコンテナに任意のコマンドを実行する

docker container exec {コンテナ名 | コンテナID} {任意のコマンド}

実行されているコンテナを表示する

docker container ls
  • -aをオプションに付けるとexitしたコンテナも表示される

Up状態のコンテナをExit状態にする

docker container stop {コンテナ名 | コンテナID}

Exit状態のコンテナをUp状態にする

docker container restart {コンテナ名 | コンテナID}

バックグラウンドで動いてるコンテナのログを見る

docker container logs {コンテナ名 | コンテナID}

Exit状態のコンテナを破棄する

docker container rm {コンテナ名 | コンテナID}
  • Up状態のコンテナは破棄出来ないので、container stopからcontainer rmを直列に行う
  • -fcontainer rmのオプションに渡すと状態問わず破棄する

Up状態以外のコンテナを全て破棄する

docker container prune
  • CreatedExit状態のコンテナを全て破棄する

ボリューム

Docker daemonの管理下で、コンテナから独立したデータ保存領域

  • ボリュームの実体はディレクトリ
    windowsなら\\wsl.localhost\docker-desktop-data\data\docker\volumesに存在する

ボリューム図解

image.png

ボリュームを作成する

docker volume create {ボリューム名}

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

docker volume ls

ボリュームの詳細を表示する

docker volume inspect {ボリューム名}

ボリュームを削除する

docker volume rm {ボリューム名}

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

# 以下二つは同じ挙動を取る
docker container run -v {ボリューム名}:{コンテナ内絶対パス} {イメージ名}

docker conitaner run --mount type=volume,src={ボリューム名},dst={コンテナ絶対パス} {イメージ}
  • コンテナ内ディレクトリをボリュームに同期させて起動する

バインドマウント

ホストOS内ディレクトリとコンテナ内ディレクトリを同期させて起動させる機能

バインドマウント図解

image.png

ホスト側のファイル・ディレクトリをコンテナと同期させてコンテナ起動

# 以下二つは同じ挙動を取る
docker contianer run -v {ホスト側パス}:{コンテナ内絶対パス} {イメージ名} 

docker conrainer run --mount type=bind,src={ホスト側パス},dist={コンテナ内絶対パス} {イメージ名}

ネットワーク

コンテナ群を論理的に分割グルーピングしたもの

  • 同ネットワーク内のコンテナはコンテナ間通信が可能
  • 異ネットワーク内のコンテナはコンテナ間通信が出来ない

ネットワーク図解

image.png

ホストOSのポートとコンテナのポートを紐づけて外部からの通信をコンテナへ伝達する

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

ネットワーク一覧を表示する

docker network ls

ネットワークの詳細情報を表示する

docker network inspect {ネットワーク名}
  • Containersを見るとネットワーク配下のコンテナが分かる

ネットワークを作成する

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

コンテナを任意のネットワークに接続して起動する

docker container run --network {ネットワーク名} {イメージ名}
  • --networkを指定しなかった時、コンテナはデフォルトのbridgeネットワーク配下に
    配置される
  • ユーザ定義ネットワークではコンテナ名からIPアドレスを自動で名前解決出来る

指定したネットワークを削除する

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

Docker Compose

コンテナ群の起動を1コマンドで行えるモノ

  • docker-compose.ymldocker compose upで起動するコンテナ群のcontainer run
    渡すオプションを予め記載しておくファイル

コンテナを起動する

# docker-compose.ymlに定義された全コンテナを起動する
docker compose up

# docker-compose.ymlに定義された内指定したコンテナを起動する
docker compose up {サービス名}
  • --buildcompose upのオプションに渡すとイメージが存在してもimage buildを行う

docker compose upで起動した全コンテナを破棄する

docker compose down

特定のコンテナで任意のコマンドを実行する

docker compose exec {サービス名} {コマンド}

ディレクトリ内のcompose upで起動しているコンテナ一覧を表示する

docker compose ps

docker-compose.ymlの書き方

  • version: {バージョン}Docker Composeの解釈されるバージョンを指定する
  • services配下に入れ子でサービス名を記載し、各サービスを定義する

各サービスdockerリソースコンテナと同等

  • 各サービスに対して入れ子で以下のように起動時のオプションを記載出来る

    • build: {ビルドコンテキストパス}image build時のビルドコンテキストを指定する
      • contexttargetを入れ子にするとimage build--targetオプションを使える
    • image: {イメージ名:タグ名}image build時のDocker Hubのイメージを指定する
      • 各サービスにはbuildimageのどちらかが必須
    • portscontainer run-pオプション
    • environmentcontainer run-eオプション
    • volumescontainer run-vオプション
    • container_namecontainer run--nameオプション
    • tty: truecontainer run-tオプション
    • depends_onは指定したサービス群が起動するまで自サービスの起動を待つオプション
  • volumes配下に入れ子でボリューム名を記載し、ボリュームの新規作成を定義する

以下がdocker-compose.ymlの例

volumesの例
version: "3.9"

services:
  api:
    build: ./api
    ports:
      - 8080:8080
    depends_on:
      - db
  db:
    image: postgres:15
    ports:
      - 5432:5432
    environment:
      - POSTGRES_PASSWORD=mypassword
      - POSTGRES_USER=postgres
      - POSTGRES_DB=appdb
    volumes:
      - db-storage:/var/lib/postgresql/data
      - ./db/initdb:/docker-entrypoint-initdb.d
volumes:
  db-storage:
ステージ指定でのimage build例
version: "3.9"
services:
  api:
    container_name: api
    build: ./api
    ports:
      - 8080:8080
    tty: true
    volumes:
      - ./api:/workspace:cached
  web:
    container_name: web
    build:
      context: ./web
      target: base
    ports:
      - 3000:3000
    environment:
      - REACT_APP_API_SERVER=http://localhost:8080/api
    tty: true
    # :cached ホスト側での変更を瞬時に同期させないがパフォーマンスを向上させる
    volumes:
      - ./web:/workspace:cached
    depends_on:
      - api
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?