未来を変える日記

ETロボコンを目指して

Docker (1) 何ができる?

 前回のシリーズ記事(GitとGit Hub)から1か月以上開きましたが、その間、Dockerを学習していました。

f:id:corgi-eric:20210125052906p:plain:w300
https://www.docker.com/

 主に利用した教材はこちらです。

www.udemy.com

 Docker本体の使い方に加え、KubernetesやSwarmもカバーしているビデオ教材ですが、今回はDockerの使い方の所のみを視聴しました。その後の自主課題として、VPSでWordpressを動かせるdocker-compose.yml を作成。

 以上の学習内容をシリーズ記事にまとめます。
 1回目の今回は大まかなイメージを掴むために、Dockerで何ができるか?を記載します。

何ができる?

 これまでクジラのようなアイコンも、下の引用のような説明も知ってはいたけど、よくわかっていなかったDocker。

Docker は、アプリケーションをすばやく構築、テスト、デプロイできるソフトウェアプラットフォームです。
Docker とは | AWS

 読むだけだと、(* ̄- ̄)ふ~んとスルーしがちなので、手を動かして体験した方が手っ取り早い。

例えば、Ngnix

 WebサーバーのNgnixをDockerで立ち上げてみます。Docker導入済みの環境で以下のコマンドを打ちます。

docker container run --publish 80:80 nginx

 --publish 80:80は、Nginxコンテナ通信用に内側:外側で80番ポートを開けというオプションです。

 さて、ターミナルに謎の文字列がでてきます(下のスクショ)。最後の1行に"ready for start up"とあり、起動したことがわかります。

f:id:corgi-eric:20210125063922p:plain

ブラウザで確認

 では、ブラウザから localhost を開きます。そこには、Welcome to nginx!の文字。動いてます。
f:id:corgi-eric:20210125055931p:plain

 再びコマンドラインに戻ります。起動に使ったターミナルは使えないので、もう一枚ターミナルを準備して、次の2行を打ちます。

docker container ls
docker container stop [NAME]

 2行目の[NAME]は、1行目で表示されたコンテナ名(sad_easley)に置き換えます(下のスクショ参照)。

f:id:corgi-eric:20210125061037p:plain

 この後、再度、localhostにアクセスすると下の表示。Nginxはもう動いていません。

f:id:corgi-eric:20210125061112p:plain

Nginxで設定を変えてみる

 もう一度、起動して、今度は少し弄ってみます。

docker container run --publish 80:80 --detach --name websrv nginx:1.18.0-alpine

 今度は、起動後もターミナルを使いたいのでバックグラウンドで動いてもらいます(--detach オプション)。事前に名前(websrv)も付けておきます(--name websrv オプション)。加えて、Nginxのバージョンも指定し、1.18.0。alpine linux版としてます。

404 Not Foundを表示

 起動後、わざと、存在しないページ( localhost/index.php)を表示させてみます。

f:id:corgi-eric:20210126070457p:plain

 404 Not Foundとなり、その下に Nginxのバージョン(1.18.0)が表示されているのがわかります。このバージョン表示を消す設定変更をしてみます。

コンテナ内に入る

 起動中のNginx コンテナ(websrv)内で作業を行います。

docker exec -it websrv ash

 docker execにて、Nginxコンテナ内からashシェルを起動。-it オプションで、ターミナルモードに。

f:id:corgi-eric:20210126062544p:plain

設定ファイルを編集する

 Nginxコンテナ内でNginxの設定ファイルを編集します。

vi /etc/nginx/nginx.conf

 下のスクショのようにServer_tokens offを追加します。

f:id:corgi-eric:20210126062909p:plain

 追加できたら、コンテナ内でNginxを再起動し、コンテナのターミナルから抜けます。

nginx -s reload
exit
設定変更を確認

 ブラウザをリロードボタンを押すと、作業前にはあったNginxのバージョン表示を消すことができました。

f:id:corgi-eric:20210126063241p:plain

コンテナとは?

 前節では何度かコンテナという言い方をしました。下の図のようなイメージです。

f:id:corgi-eric:20210126064946p:plain
Nginxをコンテナ化して持ち運べる

使いまわせる

 自宅ではWindows、公開サーバー(Digital OceanなどのVPS)ではUbuntuを利用しているなど作業環境は違うことが通常です。
 従来は手間がかかったようですが、今は間にDockerを入れることで同じコンテナ(Docker上でNginxを動作させるための最小単位)を使いまわせるようになりました。

スクラップ&ビルドも容易

 開発とは、あれこれ試行錯誤の世界になりますが、Dockerを利用することで、試行錯誤も容易になります。

Nginxコンテナを破壊する

 上の例で、NginxのコンテナにServer_tokens off(バージョン表示無し)の設定を加えてみました。試しにこいつを破壊してみます。

docker container stop websrv
docker container rm websrv
docker container run --publish 80:80 --detach --name websrv nginx:1.18.0-alpine

 stopでコンテナを停止。その後のrmで削除。その上で、作り直し。

f:id:corgi-eric:20210126070415p:plain

 ブラウザをリロードするとNginx/1.18.0とバージョン表示が復活。初期の状態に戻せました。

f:id:corgi-eric:20210126070457p:plain

まとめ

 今回は、学習で得たDockerの利用イメージについて共有させて頂きました。WebサーバーのNginxにてコンテナを起動し、設定変更をしてみたり、コンテナをスクラップ&ビルド(破壊と再生)してみたりしました。
 次回は導入方法と具体的な使い方を説明する予定です。