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?

More than 1 year has passed since last update.

docker関連のよく使うコマンドまとめ

Posted at

docker composeのアップ

# 通常起動(初回はデーモン起動ではなく、状態が見れるこちらでやるのが良い)
# イメージを元にコンテナを作成して起動する動作となる
docker compose up

# docker-compose関連外のコンテナを起動時に削除する
docker compose up --remove-orphans

# デーモン起動
docker compose up -d 

docker composeのダウン

# コンテナとネットワークが削除される
# コンテナ内のデータも消えるので、残したい場合、ボリュームを指定すること。
# 逆に言えばコンテナ内の肥大化しやすいログ情報などは、down時に消えて
# up時にイメージと同じになるので、小さく保てる。
docker-compose down

# イメージ消して、ボリューム消して、関連外のコンテナを削除する
docker-compose down --rmi all --volumes --remove-orphans

docker compose stop start

docker-compose stop
docker-compose satrt

コンテナを削除しないのと、立ち上がりが速いです。

ちょっと確認していないですが、立ち上がりの速さから再起動していないのでは?と思われます。
(そして時は動き出す。みたいな状況では?)

一時的にコンテナを作成して中に入るコマンド

docker run -it --rm alpine:latest ash

余談だが、alpine系はbashではなく、組み込み系で使われているashを使っている

npm installだけやるワンライナー

docker run --rm -t -w /app -v $(pwd):/app node:20-alpine sh -c 'apk update && apk upgrade --no-cache && npm install -g npm@latest && npm install'

対象ディレクトリに移動してから使う。
また、ワークスペースとかボリュームの部分を変える(上記だと app の部分)

database関連で使っているやり方

# コンテナ外からヒアドキュメントを使って、複数のクエリを実行する方法
docker exec -i -e MYSQL_PWD=**** コンテナ名 mysql -u root <<\EOF
select version();
DROP DATABASE IF EXISTS test_db;
CREATE DATABASE test_db
  CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
EOF

# dumpファイルを流し込む方法(時間の測定は必須ではないがあると便利)
date && time docker exec -i -e MYSQL_PWD=**** コンテナ名 mysql test_db -uroot < /tmp/dump.sql

コマンドがうまく渡せない時

docker exec コンテナ名 sh -c 'echo hoge'

一旦リセットしたい場合

# 左が、全てのコンテナ、イメージ、ネットワークを削除
# 右が、volumeの削除
$ docker system prune -fa && docker volume prune -fa

Rancher-Desktopなどは、ファクトリーリセット機能があるので、そちらを使うのもあり。
(ファクトリーリセットは、CPUのコア数設定などもリセットかかるので、再設定も忘れずに!!)

ファイル名指定でのビルド

docker build . --file ./Dockerfileaaa --tag 'test-aaa:latest'

ファイル名が Dockerfile であればデフォルト名と同じなので省略できる。

イメージをアウトプットしたりインポートしたり

# export
docker save --output /tmp/hoge 'test-aaa:latest'

# import
docker load --input /tmp/hoge

こちらは、GithubActionsなどで毎回ビルドすると時間が掛かる場合に有用。

actions/cache@v3 でexportファイルを保存すれば、Dockerfileに変化があったときだけビルドすることができ、実行時間を大幅に短縮できる。

docker-engineでhost.docker.internalを使うには一工夫必要

docker-compose.override.yaml
version: "3.5" # docker-compose.yamlのバージョンと合わせる

services:
  app: # host.docker.internalを使用したいサービス名
    extra_hosts:
      - "host.docker.internal:host-gateway"

参考記事: https://qiita.com/skobaken/items/03a8b9d0e443745862ac

host.docker.internal は、docker-desktopなどの機能のため、docker-engineでは一手間必要らしい。

注意点など

  • docker-composeのlinksやdepends_onを使えば、コンテナの起動順を制御することはできるが、他のコンテナの起動を待つことはできない
  • Linux環境では仮想化が不要だが、docker-desktopなどで導入してしまうと、仮想化機能が使われてしまう
    • GUIがほしくて劣化を気にしないなら、その限りではない
    • ちなみに、仮想環境を使用したくない場合、docker-engineを使う
  • チームが違うシステムなどでは、無理に1つのcomposeに全部入れるよりも、複数のcomposeで動かす方が管理しやすい
  • host.docker.internal を使うとhost側に対してアクセスできるので、複数composeを動かすときなどは、上記を使うとアクセスしやすい
  • ハイフンの有無で、docker-composedocker composeとコマンドに違いがあり、ハイフン無しのほうが最新なのでそちらを使うのが良い

実行環境について

今の会社では、MacでRancherDesktop(OSS)を使用しているが、OrbStack(有償)のほうが色々と快適。

個人では無償で使えるので、MacならOrbStackがおすすめ。

総評

dockerと言っても色々ありますね。

Linux以外だと、仮想環境のオーバーヘッドなり、色々とあるので、快適に使っていきたいですね。

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?