勉強会でDocker入門してみた
3/31/2024
## 参考
- スライド: [お手軽環境構築!はじめてのDocker講座 - Speaker Deck](https://speakerdeck.com/miyakei1225/oshou-qing-huan-jing-gou-zhu-hazimetenodockerjiang-zuo)
- リポジトリ: [miyakei1225/Docker-Hands-on: Dockerハンズオン用のリポジトリです! (github.com)](https://github.com/miyakei1225/Docker-Hands-on)
## Dockerとは
コンテナ型の仮想環境。
例: Node.jsのインストール
Dockerを使わない場合
各個人でインストールする必要があるため、バージョンなどの微妙な差が出てきてしまう。OS間での差異もあったりするので厄介。
→ バグの原因になったりする
使う場合
全員が同じ環境を作れる!
削除が簡単!あれこれ開発環境を入れてしまう自分みたいな人間におすすめ
## 構成
以下の3つを覚えておけば問題ナシ
1. イメージ
2. コンテナ
3. ボリューム
### イメージ
Dockerの設計図。コンテナを作るための設定を行う。
イメージを元にコンテナを起動することで、それぞれの開発環境を作れる。
イメージの共有から他のメンバーが同様の環境を作れる。
[Docker Hub](https://hub.docker.com)を使っても良いが、GitHubのほうが一般的。
#### Recent Tagsについて
イメージのバージョンのこと。
Dockerに対応しているバージョンが記載されている。
Docker Tagには何を使うのか?-> Alpine Linux多い
参考: [軽量Dockerイメージに安易にAlpineを使うのはやめたほうがいいという話 - inductor's blog](https://blog.inductor.me/entry/alpine-not-recommended)
### コンテナ
アプリの実行環境。
コンテナは作成・起動・削除が可能。
Docker Desktopでこの作業が楽に行える。
### ボリューム
データの永続化を担当する場所。永続化: 外部HDDみたいなもの
基本的にコンテナを削除するとデータは消える。
外部にデータ保管場所が欲しい!!これが**ボリューム**。
コンテナの外にボリュームが乗っかっている。
Dockerの詳しい構成は後に調べる #task
## yamlについて
設定を`compose.yaml`に記載する。
構文はGitHub Actionsの際に触っているのでだいたいわかる。
ホスティングについて
GCP, AWSやVercel, Cloudflareも使用できる。
参考: [Docker + React + TypeScript の 環境構築方法 #Docker - Qiita](https://qiita.com/91works-i-kato/items/9f9ad03fee32d42ed547)
## Docker Compose
複数コンテナの定義と実行を行う。
正体はyamlファイル。
以下のコマンドを使用する。
例:
```bash
docker-compose build # イメージ構築
docker-compose up -d # コンテナ作成 -dでバックグラウンドで実行できる
docker-compose stop # 停止
docker-compose down # 停止と削除
```
基本的には`docker-compose stop`を使うことが多いそう。
### TTYについて
`false`にするとどうなるか?→ 実行してすぐ終了してしまう。
TTY: 標準入出力先のデバイスのこと。
ttyは仮想端末を配置するコマンドである。
参考: [DockerのTTYって何? (zenn.dev)](https://zenn.dev/hohner/articles/43a0da20181d34#%E3%81%A7%E3%81%AFdocker%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Btty%E3%81%A8%E3%81%AF%EF%BC%9F)
### DockerFile
コンテナのビルド時や起動時の作業を1つにまとめたもの。
`compose.yaml`との違いは、yamlは起動やその諸設定を行える。DockerFileでは起動時やビルド時の作業を定義する。
### docker, docker-composeコマンドの違い
1つのコンテナを起動するか、2つ以上のコンテナを起動するかの違い。
### コマンドオプションについて
- sh -c
- コマンドを実行するときに使われる
- shでシェル実行、-cで以降が文字列であると示す