🤏

[Docker] Dockerのコマンド逆引きとか

に公開

はじめに

これは自分用です。
わかりにくいかもしれませんがご了承ください。

基本コマンド

コンテナをビルドする

docker build [OPTIONS] <PATH(Dockerfileがあるディレクトリ)>

  • -t "<イメージ名>:<タグ>" \cdots タグはなくてもいい
  • --ssh default=$SSH_AUTH_SOCK --mount=type=ssh のときに使う

動いているコンテナを取得

  • docker ps
  • docker container ls
  • docker container list
  • docker container ps

OPTIONS:

  • -a, --all 動いてないやつも出す
  • -q, --quiet IDだけズラッと

便利コマンド

コンテナを一掃する

止まってるやつだけ
docker container prune
-fをつけるとプロンプトが出ない

全部吹き飛ばす
docker rm -f $(docker ps -aq)

ビルド(Dockerfileなど)

alpineのベストプラクティス

# Dockerfile
RUN apk update
RUN apk add --no-cache <...package name>

別のステージからファイルを持ってくる

# Dockerfile
COPY --from=builder /run-example-app /bin/

ビルド時にsshを使いたい(プライベートリポジトリなど)

Dockerfileに

RUN \
  mkdir -p -m 0600 ~/.ssh && \
  ssh-keyscan github.com >> ~/.ssh/known_hosts && \
  git config --global url."git@github.com:".insteadOf https://github.com/

RUN --mount=type=ssh ssh git@github.com

これ試してないから動くかどうかわからんけど多分動くと信じて

docker build --ssh default
明示的にしたいときは
docker build --ssh default=$SSH_AUTH_SOCK

composeの場合

service:
  container:
    build:
      context: .
      ssh:
        - default

参考
https://qiita.com/j-yabu/items/8fb3ae7caee69292e706

その他(名前案が思いつかない)

.envから環境変数を設定したい

docker run --env-file .env
とか

# compose.yaml
service:
  container:
    ...
    env_file: .env
    #とか
    env_file:
      - .env
      - .env.dev

単一ファイルをread-onlyでマウント

docker run --mount type=bind,source=./data.json,target=/app/data.json,readonly <image name>

# volumeのほうがいい場合
docker run -v ./data.json:/app/data.json:ro <image name>

composeで、あるコンテナが起動したあとに起動させたい

# compose.yaml
service:
  db:
    image: example-db-image:latest
  db-required-backend:
    image: example-backend-image:latest
    depends_on: db

Discussion