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

2022/04/04

WSLインストール

WSLインストール

# WSL設定
## 場所
C:\Users\ユーザー名\.wslconfig
## 内容
[wsl2]
memory=10GB
processors=5
swap=5GB


# コマンドプロンプト
## インストール可能OS一覧
wsl --list --online
## インストール
wsl --install OS名
## アップグレード
wsl --update
## 再起動
wsl --shutdown
## バージョン確認
wsl --list --verbose
## アンインストール
wsl --unregister OS名


# WSL内
## 日本語化
sudo apt-get install -y language-pack-ja-base
sudo apt-get install -y language-pack-ja
sudo apt-get install -y ibus-kkc
sudo update-locale LANG=ja_JP.UTF8
exit


# 注意点
serviceは使えるが、systemctlは使えない

git操作

git操作

# git初期設定
sudo apt-get install -y git
ssh-keygen -t rsa -b 4096
>パスワード
ssh -T git@github.com

git config --global user.email "メールアドレス"
git config --global user.name "名前"


# GoogleSourceRepositories運用
## 初回
gcloud init
gcloud source repos clone レポジトリ名 --project=プロジェクトID
cd レポジトリ名


# GitHub運用
## 初回
git clone git@github.com:レポジトリ名.git
cd レポジトリ名
## 毎回
git switch master
git pull
git switch dev/開発ブランチ名
## 開発ブランチ作成
git switch --create dev/開発ブランチ名
git switch -c dev/開発ブランチ名
## 開発ブランチ参加
git switch --create dev/開発ブランチ名 origin/dev/開発ブランチ名
git switch -c dev/開発ブランチ名 origin/dev/開発ブランチ名
## add,update,fix
git add ファイル名
git commit --message "[コミット種別] バックログ番号 変更内容"
git push origin dev/開発ブランチ名

git add -A
git commit -m "[コミット種別] バックログ番号 変更内容"
git push origin dev/開発ブランチ名
## remove
git rm ファイル名
git commit --message "[remove] バックログ番号 変更内容"
git push origin dev/開発ブランチ名


# TIPS
## 状態確認
git status

## レポジトリ内の全ての変更を一括追加する
git add --all
git add -A
## レポジトリ内の全ての変更を一括追加する(新規追加ファイルは対象外)
git add --update
git add -u
## ディレクトリ内の全ての変更を一括追加する
git add .

## git add前のファイルの変更を戻す
git restore ファイル名
## git add後のファイルの変更を戻す
git restore --staged ファイル名
git restore -S ファイル名

## コミット番号を確認する
git log --oneline
git log --graph

## ファイルをコミット番号の状態にする
git restore --source コミット番号 ファイル名
git restore -s コミット番号 ファイル名
## ディレクトリ内をコミット番号の状態にする
git restore --source コミット番号 .
git restore -s コミット番号 .

## masterブランチにコミットしてしまった
git rebase 1個前のコミット番号
git switch --create dev/開発ブランチ名
git cherry-pick 該当コミット番号
git push origin dev/開発ブランチ名

## ローカルブランチ一覧
git branch
## リモートブランチ一覧
git branch --remotes
git branch -r
## ブランチ一覧
git branch --all
git branch -a

## マージ済みブランチの削除
git branch --delete dev/開発ブランチ名
git branch -d dev/開発ブランチ名
## マージされていないブランチの削除
git branch --delete --force dev/開発ブランチ名
git branch -D dev/開発ブランチ名

ワイルドカード

 ワイルドカード

*
任意の0文字以上の文字列

?
任意の1文字

[a-z]
英字の1文字

[0-9]
数字の1文字

[a,b,c]
「a,b,c」のどれか1文字

[^a-z]
英字以外の1文字

[^0-9]
数字以外の1文字

[^a,b,c]
「a,b,c」以外のどれか1文字

{abc,def,ghi}
「abc,def,ghi」のうちのどれか

.
カレントディレクトリ

./hoge
カレントディレクトリのhoge

find操作

find操作

# ディレクトリ内をワイルドカードを利用したファイル名で検索
find ディレクトリ名 -name ファイル名

# ディレクトリ内の日数にアクセスされたファイルを検索
find ディレクトリ名 -atime 日数

# ディレクトリ内の日数以内にアクセスされたファイルを検索
find ディレクトリ名 -atime -日数

# ディレクトリ内の日数以降にアクセスされたファイルを検索
find ディレクトリ名 -atime +日数

# ディレクトリ内の日数に更新されたファイルを検索
find ディレクトリ名 -mtime 日数

# ディレクトリ内の日数以内に更新されたファイルを検索
find ディレクトリ名 -mtime -日数

# ディレクトリ内の日数以降に更新されたファイルを検索
find ディレクトリ名 -mtime +日数

2022/03/31

オレオレ証明書

オレオレ証明書

# opensslインストール
sudo apt-get install -y openssl

# 秘密鍵作成
openssl genrsa -aes256 -out 証明書名.key 2048
>パスワード

# 秘密鍵からパスフレーズを削除
openssl rsa -in 証明書名.key -out 証明書名.key
>パスワード

# csr
openssl req -new -key 証明書名.key -out 証明書名.csr
>Country Name:JP
>State or Province Name:都道府県
>Locality Name:市区町村
>Organization Name:会社名
>Organizational Unit Name:組織名
>Common Name:ホスト名
>Email Address:メールアドレス

# crt
openssl x509 -in 証明書名.csr -out 証明書名.crt -req -signkey 証明書名.key -days 有効日数

# pfx
openssl pkcs12 -export -in 証明書名.crt -out 証明書名.pfx -inkey 証明書名.key
>パスワード
openssl pkcs12 -export -in 証明書名.crt -out 証明書名.pfx -inkey 証明書名.key -certfile 証明書名.cer
>パスワード

# 中間証明書とサーバー証明書の結合
cat サーバー証明書(crt) 中間CA証明書(cer) クロスルート証明書(cer) >> 結合証明書(pem)

2022/03/28

ディスクのメンテナンス

ディスクのメンテナンス

# ベーシックディスク
ミラーリングできない

# ダイナミックディスク
ミラーリングできる
## 異形式状態のダイナミックディスクへの対応
形式の異なるディスクのインポート