開発ツール
Docker と Docker Compose
コンテナの起動・確認・ログ・中に入る・片付けと、docker compose での複数コンテナの管理。
dockerコンテナを動かす
Ubuntu には最初から入っていません。 で入れられます。
アプリを「コンテナ」という独立した環境で動かします。開発環境やサーバーの構築によく使われます。
起動する
$ docker run hello-world
$ docker run -it --rm ubuntu:24.04 bash # 使い捨てで中に入る
$ docker run -d --name web -p 8080:80 nginx # 裏で起動し、8080 → 80 をつなぐ
$ docker run -d -v "$PWD":/app -w /app node:22 npm run dev # 今のディレクトリをつないで実行
$ docker run --env-file .env myimage| オプション | 意味 |
|---|---|
-d | 裏で起動する |
-it | 対話的に使う(シェルに入るとき) |
--rm | 終了したらコンテナを消す |
--name | 名前を付ける |
-p ホスト:コンテナ | ポートをつなぐ |
-v ホスト:コンテナ | ディレクトリやボリュームをつなぐ |
-e KEY=VALUE | 環境変数 |
--restart unless-stopped | 落ちたり再起動したりしても自動で起動する |
様子を見る
$ docker ps # 動いているコンテナ
$ docker ps -a # 止まっているものも
$ docker logs -f --tail 100 web # ログを追いかける
$ docker exec -it web sh # 動いているコンテナの中に入る
$ docker stats # CPU・メモリの使用量
$ docker inspect web | jq '.[0].NetworkSettings.IPAddress'止める・消す
$ docker stop web && docker rm web
$ docker restart web
$ docker images # イメージの一覧
$ docker rmi nginx:latest
$ docker system df # 使っている容量
$ docker system prune # 止まったコンテナ・使っていないネットワーク・宙ぶらりんのイメージを消す
$ docker system prune -a --volumes # 使っていないものを全部消す(注意)イメージを作る
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["npm", "start"]$ docker build -t myapp:latest .
$ docker run -d -p 3000:3000 myappdocker compose複数のコンテナをまとめて管理
Ubuntu には最初から入っていません。 で入れられます。
compose.yaml に書いた複数のコンテナを、まとめて起動・停止します。
services:
web:
build: .
ports:
- "3000:3000"
env_file: .env
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: example
volumes:
- dbdata:/var/lib/postgresql/data
volumes:
dbdata:| 書き方 | 意味 |
|---|---|
docker compose up -d | まとめて裏で起動 |
docker compose up -d --build | イメージを作り直してから起動 |
docker compose ps | 状態 |
docker compose logs -f web | ログを追いかける |
docker compose exec web sh | 中に入る |
docker compose restart web | 再起動 |
docker compose down | 止めて消す(ボリュームは残る) |
docker compose down -v | ボリュームも消す |
docker compose pull | イメージを最新にする |
docker のその他のサブコマンド
docker cpコンテナとファイルをやり取りする
コンテナと手元の間でファイルをコピーします。
$ docker cp web:/etc/nginx/nginx.conf ./nginx.conf # コンテナ → 手元
$ docker cp ./index.html web:/usr/share/nginx/html/ # 手元 → コンテナdocker volumeデータの保存場所
コンテナのデータを保存しておく場所(ボリューム)を管理します。
$ docker volume ls
$ docker volume inspect dbdata
$ docker run --rm -v dbdata:/data -v "$PWD":/backup alpine tar czf /backup/dbdata.tgz -C /data . # ボリュームをバックアップ
$ docker volume prune # 使われていないボリュームを消す(注意)docker networkコンテナどうしをつなぐ
コンテナどうしを同じネットワークにつなぎます。
$ docker network create mynet
$ docker run -d --name db --network mynet postgres:16
$ docker run -d --name app --network mynet -e DB_HOST=db myapp # 名前(db)でつながる
$ docker network ls
$ docker network inspect mynetdocker imageイメージを管理する
イメージを取得・タグ付け・送信・ファイル化します。
$ docker pull nginx:1.27
$ docker tag myapp:latest ghcr.io/me/myapp:1.0
$ docker push ghcr.io/me/myapp:1.0
$ docker save myapp:latest | gzip > myapp.tar.gz # ファイルにする(オフライン移動用)
$ docker load < myapp.tar.gz
$ docker image history myapp # 各レイヤーの大きさ
$ docker image prune -a # 使っていないイメージを消すdocker loginレジストリにログインする
イメージを置く場所(レジストリ)にログインします。
$ echo "$GITHUB_TOKEN" | docker login ghcr.io -u me --password-stdindocker events / top / diff様子を詳しく見る
コンテナの中のプロセスや、変わったファイル、起動・停止の記録を見ます。
$ docker top web # コンテナの中のプロセス
$ docker diff web # イメージから変わったファイル
$ docker events --since 10m # 起動・停止などの出来事