#author("2024-10-19T23:49:26+09:00","default:shota","shota")
* Docker [#l36def37]
#author("2024-11-03T18:04:20+09:00","default:shota","shota")
* 目次 [#xae43a58]
#contents

* Dockerとは [#s2275097]
- 仮想化を実現させるためのコンテナを作成・実行するためのもの
-- コンテナプラットフォームはDocker以外にもRedHat OpenShiftといった製品もある
- コンテナは仮想マシンと異なり軽量であり,異なるマシンでも同じ環境を再現できる可搬性も高い
- 自環境を汚すことなく,サーバ環境を再現することが可能

* コンテナイメージとコンテナ [#ea19c83e]
- コンテナはコンテナイメージから作成される
-- コンテナ自体はOS上で動作するプロセス,コンテナイメージは実行するコンテナの情報を記載したもの
- コンテナイメージは[[DockerHub:https://hub.docker.com]]といったレジストリで配布されている
- イメージのバージョンはTagで管理されている

* ライフサイクル [#tedc36fa]
- コンテナは"作成" -> "実行" -> "停止" -> "削除" というライフサイクルで動く
-- コンテナは作成コストが比較的低いため,基本的に利用が終わったあとは削除する
-- データを永続化するにはVolumesやBind mountsを利用する
- コンテナの作成はコンテナイメージを元にして行われる,各ライフサイクルを迎えるのはコンテナ,イメージ自体は再利用可能

* Engine/CLI/Desktop [#p239f1cf]
** Docker Engine [#kee9e870]
- コンテナを実行するためのソフトウェア
- Linuxカーネルの機能を使用するため,Linux環境でのみ実行可能

** Docker CLI [#n219d22c]
- Docker Engineを操作するためのコマンドを提供する
- スクリプトへの組み込みや,他ツールとの連携で自動化を実現させることが可能

** Docker Desktop [#kaaa8e24]
- macやWindowsでDockerを使うためのGUIアプリケーション
- Docker EngineやLinuxカーネルなどDockerを利用するための一式が入ったアプリケーション
- Linuxカーネルを含むため,Liux以外でDockerを利用する場合はこれをインストールする必要がある

* コンテナの実行と停止 [#nf6a1627]
- コンテナの実行にはdocker container runコマンドを利用する
- runコマンドはコンテナイメージがダウンロードされていない場合はダウンロードしてからコンテナを作成・実行を行う
- コンテナの停止にはdocker container stopコマンドを利用する
- stopコマンドの後ろにコンテナ名を指定して,コンテナの停止を行う
- docker container rmコマンドでコンテナの削除を行う

 # postgresのコンテナイメージを元にpgというコンテナが作成・実行される
 docker container run --name pg --platform linux/amd64 -e POSTGRES_PASSWORD=password -d postgres
 
 # pgコンテナを停止する
 docker container stop pg
 
 # pgコンテナを削除する
 docker container rm pg

** コンテナ内でコマンドを実行 [#d80cc575]
- docker container execでコンテナ内でコマンドを実行させることができる
- itオプションを使用してbashをしてすると,コンテナのbashに入ることができる

 # コンテナ内のbashに接続して作業を行う
 docker container exec -it pg bash
 
 # ポスグレが動いているのでなにかする
 psql -h localhost -U postgres
 ...
 \q
 
 # コンテナのbashを抜ける
 exit

** コンテナの自動破棄 [#rdacb694]
- docker起動時に"--rm"オプションをつけると,コンテナ停止時に自動的にコンテナが破棄される

 docker container run \
    --rm \
    --name pg \
    --platform linux/amd64 \
    -e POSTGRES_PASSWORD=password \
    -d postgres 
 
 # 以下のコマンドでコンテナの削除も同時に行われる
 docker container stop pg

* データの永続化 [#jce73ef3]
- コンテナ内のデータを永続化する方法は主に"ボリュームとバインドマウント"という方法がある

** ボリューム [#qa3c7f4a]
- Dockerの管理ディレクトリ配下にデータが保存される
- データの移行やバックアップが用意ではあるが,データへのアクセスは必ずDockerを通して行うため,ホストマシンから変更しないものを置く
- ボリュームには"名前付きボリューム"と"匿名ボリューム"という種類がある

*** ボリュームの作成 [#f6561cbd]
- docker volume createコマンドでボリュームを作成する
- docker volume lsコマンドで作成したボリューム一覧を確認することができる

 $ docker volume create pg-volume
 pg-volume
 
 $ docker volume ls
 DRIVER    VOLUME NAME
 local     pg-volume

*** ボリュームの使用 [#pbbb6515]
-v [ボリューム名]:[コンテナの接続されるディレクトリ]オプションでボリュームを指定することができる

 docker container run \
    --rm \
    --name pg \
    --platform linux/amd64 \
    -v pg-volume:/var/lib/postgresql/data \
    -e POSTGRES_PASSWORD=password \
    -d postgres

*** ボリュームの削除 [#q9c2e4a4]
- docker volume rmコマンドで作成されたボリュームは削除可能

 docker volume rm pg-volume

** バイマウント [#fc0e7966]
- ホストマシンのフォルダーをマウントさせる仕組み
- データは共有され,ホストマシン・コンテナの両方からアクセス可能となる

 # -vで指定
 docker container run \
    --name apache \
    -v "$PWD":/usr/local/apache2/htdocs/ \ 
    -p 8080:80 \
    -d httpd


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS