趣味でプログラミングを勉強しています。
軽量に動作して高速に環境を構築できる「Docker」(ドッカー)を今回記事にしてみました。
Dockerとは?
コンテナ技術を使ったアプリケーションの実行、運用をするためのプラットフォーム
コンテナとは?
ホスト上に論理的な区画(コンテナ)を作り、アプリケーションを動作させるのに必要なライブラリやアプリケーションを1つにまとめ、あたかも個別のサーバのように使うことができるようにしたもの
→ホストOSのリソースを論理的に分離して複数コンテナで共有して使うので、間接的にかかるコストが少なく軽量で高速に動作するのが特徴
コンテナの歴史
FreeBSD jail
https://ja.wikipedia.org/wiki/FreeBSD_jail
Solaris Containers
https://www.oracle.com/technetwork/jp/server-storage/solaris10/containers-169727-ja.html
Dockerの機能
-
Dockerイメージ(コンテナの元)を作る機能
Dockerイメージ アプリケーションの実行に必要なファイル群が格納されたディレクトリ -
Dockerイメージを共有する機能
・Dockerレジストリ
イメージを持つリポジトリ(イメージの集まり)を預かるサービス
・DockerHub https://hub.docker.com/
Docker、コンポーネントで動くリソースを集めた場所 -
Dockerコンテナを動かす機能
Dockerのエディションは2つ
コミュニティ版(CE; Community Edition)
エンタープライズ版(EE; Enterprise Edition)
Dockerが動く仕組み
・コンテナという独立環境を作り、コンテナを区画化してアプリケーションの実行環境を作る
・Linuxカーネルのnamespaceという機能を使いコンテナを仮想的に隔離する
・Dockerコンテナと外部ネットワークが通信を行うときは、NAPTの機能を使って通信する
Linux namespaces
https://en.wikipedia.org/wiki/Linux_namespaces
NAPT
1つのIPアドレスを複数のコンピューターで共有する技術で、IPアドレスとポート番号を変換する機能
Dockerのインストールと動作確認
####環境
Windows 10 Pro 64bit メモリ 16G
Docker for Windows v 19.03.5
1. Docker Desktop for Windowsをインストール
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
2. コマンド実行
docker container run amazonlinux:latest //bin/echo 'Introduction to Docker'
#####説明
docker container run
コンテナを作成/実行
amazonlinux:latest
もとになるDockerイメージ
//bin/echo 'Introduction to Docker'
コンテナ内で実行するコマンド
1回目はダウンロードするので時間がかかるが、
2回目以降はダウンロードされたDockerイメージをもとにDockerコンテナを起動するので高速に動く
Dockerコマンド
Dockerバージョン
docker version
実行環境の詳細設定
docker system info
ディスクの利用状況
docker system df
Dockerを使ってWebサーバを構築
コマンド実行
docker container run --name webserver -d -p 8000:80 httpd
#####説明
--name webserver -d
「webserver」という名前のコンテナをバックグラウンドで起動
-p
コンテナのポートをホスト側に公開
8000:80
ホスト8000番ポートとコンテナ80番ポートをマッピング
バックグラウンド
相対的に低い優先度で動作し、入力がごく少ないか全くなく、最小限の出力を行うプロセス
httpdサーバの状況確認
docker container ps
コンテナ詳細
docker container stats webserver
httpd停止
docker stop webserver
httpd起動
docker start webserver
今回はDockerのさわりを記事にさせていただきましたので、
次回、「Docker Compose」を使った複数コンテナの環境構築を記事にしたいと思います。