#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