2022/10/31

DockerComposeの書き方

# 環境変数
x-var1: &MYSQL_PASSWORD
  "文字列"
x-var2: &DATABASE
  "文字列"
x-var3: &DB_USER
  "文字列"
x-var4: &DB_PASSWORD
  "文字列"
# システム構成
services:
  db:
    build:
      context: .
      dockerfile: Dockerfile1
    #depends_on:
    volumes:
      - db_data:/var/lib/mysql
    # environment > env_file
    environment:
      MYSQL_ROOT_PASSWORD: *MYSQL_PASSWORD
      MYSQL_DATABASE: *DATABASE
      MYSQL_USER: *DB_USER
      MYSQL_PASSWORD: *DB_PASSWORD
    env_file:
      - ./db.env
    restart: always
    #ports:
  wordpress:
    build:
      context: .
      dockerfile: Dockerfile2
    depends_on:
      - db
    #volumes:
    # environment > env_file
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: *DB_USER
      WORDPRESS_DB_PASSWORD: *DB_PASSWORD
    env_file:
      - ./wordpress.env
    restart: always
    ports:
      - "8080:80"
volumes:
  db_data:

2022/10/28

nvidia-container-toolkitインストール

# nvidia-container-toolkitインストール
## 参考文献
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
## インストール
sudo curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
sudo vi /etc/apt/sources.list.d/nvidia-container-toolkit.list
    deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
## docker再構築
sudo nvidia-ctk runtime configure --runtime=docker
## 再起動
## 動作確認
### Windows11&WSLの場合
sudo service docker start
sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
### それ以外の場合
sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

Dockerfileの書き方

# イメージ名:タグ名
FROM nginx:1.21

# メタデータ
LABEL maintainer="Namae Myouzi <mail@example.com>"

# 実行ユーザー
USER root

# ディレクトリ移動
WORKDIR /

# ローカルファイルをコンテナ内にコピーする
## 設定ファイル
COPY ./default.conf /etc/nginx/conf.d/
## コンテンツ
COPY ./*.html /var/www/html/
## 証明書
COPY ./ssl /etc/nginx/ssl

# イメージ作成時に実行するコマンド
RUN \
  apt-get update \
  && apt-get upgrade -y \
  && apt-get autoremove -y

# コンテナ実行時に実行するコマンド
## 上書き不可
ENTRYPOINT ["/usr/bin/date"]
## 上書き可能
CMD ["/usr/bin/date"]

# ListenPort
EXPOSE 80 443

# HealthCheck
HEALTHCHECK \
  --interval=30s \
  --timeout=10s \
  --start-period=60s \
  --retries=2 \
  CMD curl -f http://localhost/ || exit 1

Dockerインストール

# Dockerインストール
## 参考文献
https://docs.docker.com/install/linux/docker-ce/ubuntu/
## ゴミ削除
sudo apt-get remove -y docker
sudo apt-get remove -y docker-engine
sudo apt-get remove -y docker.io
sudo apt-get remove -y containerd
sudo apt-get remove -y runc
## 依存関係インストール
sudo apt-get install -y ca-certificates
sudo apt-get install -y curl
sudo apt-get install -y gnupg
sudo apt-get install -y lsb-release
## インストール
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" >> /etc/apt/sources.list.d/docker.list'
sudo apt-get update
sudo apt-get install -y docker-ce
sudo apt-get install -y docker-ce-cli
sudo apt-get install -y containerd.io
sudo apt-get install -y docker-compose-plugin
## 動作確認
### Windows11&WSLの場合
sudo service docker start
sudo docker container run --rm hello-world
### それ以外の場合
sudo docker container run --rm hello-world
## sudoなしでdocker使いたい場合
sudo usermod -aG docker $USER
## バージョン確認
docker --version
docker compose version

# docker-image
## イメージ一覧
sudo docker image ls -a
sudo docker images -a
## コンテナからイメージ作成
sudo docker container commit コンテナID イメージ名:タグ名
sudo docker commit コンテナID イメージ名:タグ名
## Dockerfileからイメージ作成
sudo docker image build -f ./Dockerfile -t イメージ名:タグ名 .
sudo docker build -f ./Dockerfile -t イメージ名:タグ名 .
## イメージ削除
sudo docker image rm イメージID
sudo docker rmi イメージID

# docker-container
## コンテナ一覧
sudo docker container ls -a
sudo docker ps -a
## コンテナ情報
sudo docker container inspect コンテナID
sudo docker inspect コンテナID
## コンテナ起動
sudo docker container start コンテナID
sudo docker start コンテナID
## コンテナ停止
sudo docker container stop コンテナID
sudo docker stop コンテナID
## コンテナ削除
sudo docker container rm コンテナID
sudo docker rm コンテナID

# docker-network
## ネットワーク一覧
sudo docker network ls
## ネットワーク作成
sudo docker network create --subnet "10.5.0.0/16" --attachable ネットワーク名
## ネットワーク削除
sudo docker network rm ネットワークID

# docker-volume
## ストレージ一覧
sudo docker volume ls
## ストレージ作成
sudo docker volume create
## ストレージ削除
sudo docker volume rm
## 未使用データ削除
sudo docker volume prune

# docker共通
## ディスク使用量確認
sudo docker system df
## 未使用データ削除
sudo docker system prune
## リソースの使用状況確認
sudo docker container stats -a
sudo docker stats -a
## ログ確認
sudo docker container logs -t コンテナID
sudo docker logs -t コンテナID
## ログ
/var/lib/docker/containers/コンテナID/コンテナID-json

# イメージからコンテナ起動
sudo docker container run -it --name コンテナ名 -p ホストのポート番号:コンテナのポート番号 イメージ名:タグ名 ${SHELL}
sudo docker run -it --name コンテナ名 -p ホストのポート番号:コンテナのポート番号 イメージ名:タグ名 ${SHELL}
## コンテナから離脱
### コンテナ終了
exit
### コンテナ維持
「Ctrl+P」→「Ctrl+Q」
## コンテナに再接続
sudo docker container attach コンテナID
sudo docker attach コンテナID

# イメージからコンテナをバックグラウンド起動
sudo docker container run -itd --name コンテナ名 -p ホストのポート番号:コンテナのポート番号 イメージ名:タグ名
sudo docker run -itd --name コンテナ名 -p ホストのポート番号:コンテナのポート番号 イメージ名:タグ名
## イメージからコンテナをバックグラウンド起動かつ終了時自動削除
sudo docker container run -itd --rm --name コンテナ名 -p ホストのポート番号:コンテナのポート番号 イメージ名:タグ名
sudo docker run -itd --rm --name コンテナ名 -p ホストのポート番号:コンテナのポート番号 イメージ名:タグ名
## コンテナに接続
sudo docker container exec -it コンテナID ${SHELL}
sudo docker exec -it コンテナID ${SHELL}

# コンテナレジストリサーバー
## 認証情報
$HOME/.docker/config.json
## イメージへのタグ付け
sudo docker image tag イメージ名:タグ名 コンテナレジストリサーバー/イメージ名:タグ名
sudo docker tag イメージ名:タグ名 コンテナレジストリサーバー/イメージ名:タグ名
## イメージpull
sudo docker image pull コンテナレジストリサーバー/イメージ名:タグ名
sudo docker pull コンテナレジストリサーバー/イメージ名:タグ名
## イメージpush
sudo docker image push コンテナレジストリサーバー/イメージ名:タグ名
sudo docker push コンテナレジストリサーバー/イメージ名:タグ名

# DockerComposeでコンテナ起動
sudo docker compose -f ./compose.yaml up -d
## 状態確認
sudo docker compose ps -a
## コンテナ停止
sudo docker compose stop
## コンテナ削除
sudo docker compose rm
## 全削除(イメージ、コンテナ、ネットワーク)
sudo docker compose down --rmi all