Dockerを学習して覚えたコマンドを残しておく
Docker
Dockerの基本
現在ではdocker-composeを使うのが主流
images
# Imageを作成 Dockerfileから作る
# -t [名前]:タグ [dockerfile-path]で名前をつける
docker image build -t hoge:latest [Deckerfile-path]
# Docker Imageを全て表示
docker images
# Docker Imageを削除
docker rmi [id or name]
container run
# Dockerコンテナを作成して起動
docker run --name <任意の名前> <Image名>
# option
--name [コンテナ名] # コンテナ名を指定
-p ホストのポート番号:コンテナのポート番号 # ポートを設定
-it # コンテナ内部に入る
--rm # コマンドの実行が完了した時、コンテナを破棄
-d # バックグラウンドでコンテナを実行
-v ホストのパス:コンテナのパス # volumeを指定する
-e TEST_ENV=Tee # ENV 環境変数
# コマンド例
docker run -it --name hoge -v Ubuntu:20.04
# nginxは/usr/share/nginx/html/にrootのhtmlがある
# Imageでwebserverをinstallしている場合ポートを開ける必要がある
docker run -v /Users/tee/Desktop/test/:/usr/share/nginx/html --name mynginx -p 8080:80 nginx:1.16
docker run -d -p 8080:80 --name hoge hoge
container
# 起動中のコンテナの中でコマンドを実行する
docker exec [id or name] [実行したいコマンド]
# コンテナを確認
docker ps -a
# コンテナを再開
docker start [id or name]
# コンテナを止める
docker down [id or name]
# コンテナを再起動
docker restart [id or name]
# 停止中のコンテナを削除
docker rm [id or name]
一括
# Imageを全て削除
docker image prune
# コンテナを全て削除
docker container prune
# コンテナにホストからファイルをコピー # 逆も可
docker cp [host-path] [id]:[dorcerのpath]
# ログ表示 # -fでリアルタイム
docker logs
# 起動中のコンテナの中に入る
docker exec [name or id] /bin/bash
# 詳細情報を表示
# ENVを確認したりするのに使う
docker inspect [コンテナ名]
Docker compose
複数のコンテナをまとめて操作する
基本はこちらを使う
コマンド
docker-compose.yml
で管理しているコンテナに対して作用する
現在の階層のdocker-compose.yml
に対して行われる
無い場合は親の階層を探す
# imageを作成する
# DokerfileやGemfileを修正した際なども叩く
docker compose build
# コンテナの立ち上げ
# ymlで指定されたImageかDockerfileを利用して構築
docker compose up -d
# コンテナを停止・削除
docker compose down
# ymlで管理されたコンテナを全て再起動
docker compose restart
# 対象のymlで管理されたコンテナのみ一覧表示
docker compose ps
# ログを表示
docker compose logs
# ymlで管理されたサービスを1つ指定してコマンドを実行
# Imageの構築/コンテナ作成/コマンドの実行を1度で行う
docker compose run <サービス> <コマンド>
# 起動中のコンテナでコマンド実行 shellなどを使える
docker compose exec <サービス> <コマンド>
# dangling(宙ぶらりん)状態のImageを全て削除
docker image prune
Dockerfile
Imageをコード化したもの
RUNとCMDは実行タイミングが違う
# ベースのImage
FROM ubuntu:20.04
# Imageをbuildする時に実行
RUN apt-get update -y && \
apt-get install -y nginx
# COPY HOSTのファイルをコンテナにコピーする
COPY index.html /var/www/html
# Imageをbuildする段階で環境変数を設定できる
ENV TESTENV="Tee"
# 各種コマンドを実行する際のカレントディレクトリを指定する
# Docker exec で実行する場所を決められる
WORKDIR /path/to/workdir
# Container起動直後に実行
CMD ["nginx", "-g", "daemon off;"]
CMD
以外のコマンドはImageをbuildする際に行われる
CMD
はContainerが起動した直後に実行される
Image
# rootは/var/www/html
ubuntu:20.04
docker -compose.yml
ymlファイルはスペースで親子関係を表現するファイル形式
設定ファイルでよく使われる
# versionとserviceを登録する
version: "3"
services:
web:
build: ./php # dockerfileの相対path
container_name: "php8"
ports:
- "8080:80"
db:
image: mariadb:10.4
container_name: "db2"
volume:
- ./data:/var/lib/mysql # ホスト:Container ホストは相対pathがおすすめ