こんにちは。 ニフクラエンジニアミートアップ事務局の鮫島です。
2022年7月26日(水)に第49回ニフクラエンジニアミートアップを開催しました。
今回のテーマは、「いまさら聞けないDockerコンテナ超入門」ということで、コンテナ実行環境のデファクトスタンダードであるDockerについて、仮想化との違いやメリットといった基礎からDocker Desktopを使ったコンテナ実行環境構築までを解説する内容でした。
久しぶりに講師はモデレーターの宮原氏が務めました。
コンテナはここ数年注目を集め続けている技術のひとつです。
しかし、いまだにコンテナのことがよく分からないという声は非常に多く聞きます。
国内でのコンテナ活用シーンがまだまだ限定的という理由もあると思いますが、「まずは動かしてみよう!」という宮原氏らしいセッションでした。
Dockerコンテナ超入門
コンテナの特徴
コンテナは1コンテナ1プロセスで動作するので、ハイパーバイザーのオーバーヘッドが無い分仮想マシンより速いというのは、よく言われることです。
コンテナは、最新のテクノロジーだからオンプレや仮想マシンよりも優れている…というわけではなく、一定の条件下では他の基盤にないメリットがあるので、それを理解した上で活用する必要があることを理解しましょう。
Dockerを動かす方法(Docker Desktop)
Dockerを動かす方法ですが、クラウドという選択肢はもちろんあります。
まずは、お手元のパソコンで動作させてみるのがコストもかからず手軽でいいだろうという判断で、Docker Desktopを使いました。
WIndows版・Mac版だけでなく、β版にはなりますがLinux版もありますし、GUIでインストールから動作確認まで視覚的にも判りやすいようです。
Dockerのインストール
インストールは下記のサイトからお好きなものを選択していただけます。 www.docker.com
インストールそのものは、管理権限が必要だったり、学習用途に限るという利用許諾を確認するだけで特に難しくないはずです。
インストールして起動した後で、Dockerイメージをダウンロードします。 まず、UbuntuのDockerイメージを検索して…
# docker search ubuntu
続いてダウンロードします。
# docker pull ubuntu
※最新イメージがダウンロードされます。 念のためDockerイメージを確認しましょう。
# docker images
Dockerコンテナを実行しよう
さっそく、コマンドラインでDockerコンテナを実行します。
Ubuntuイメージでコンテナを実行
# docker run -it ubuntu bash
コンソールはコンテナ内で動作しているbashに移ります。
※exitで抜けられます。
実行中のコンテナを確認するには、別のターミナルを起動してこのコマンドを実行
# docker ps -a
GUIでも起動はできますが、設定できるパラメータが限定されているのでコマンドラインで動かすのに慣れた方が良いとのこと。
Nginxのインストール
まず、コンテナにNginx(エンジンエックス)をインストールします。
# docker run -it --name=nginx ubuntu bash
apt updateを実行して最新版にします。
# apt update
続いて、Nginxをインストール
# apt install nginx
そしてNginxを起動します。
# nginx
動作確認をします。
# curl localhost
これでサンプルHTMLが表示されればNginxが動作していることになります。
Nginxから抜ける場合は、下記のコマンドです。
# nginx -s quit
コンテナのイメージ化
続いて、コンテナをイメージ化します。
まずNginxをフォアグラウンドで実行するように設定(daemonモードをオフにする)します。 コンテナ内でNginxをバックグラウンド実行するとコンテナが停止してしまいます。
# echo "daemon off;">>/etc/nginx/nginx.conf
※上記のコマンドはコンテナ内で実行します。 こういう、コンテナならではの制約がたまにあるので要注意とのこと。
いったんコンテナから抜けて
# exit
現在の状態をコンテナイメージとして保存します。
# docker commit nginx nginx_template
# docker images
GUIで確認するとこういう感じに見えます。
コンテナを実行してみよう
これで、コンテナを実行できる環境が出来ました。
早速イメージからコンテナを動かしてみます。 まず、コンテナでNginxを実行して、ホストのポート8080番をコンテナのポート80番に紐づけます。
# docker run -d -p 8080:80 --name=web1 nginx nginx_template
続いてポートが紐づいているかを確認します。
# docker ps -a
# curl localhost:8080
またまた、GUIで確認するとこういう感じです。
コンテナ実行環境を構築する手順は以上になりますので、ぜひ皆様のお手元の環境で試してみてください。
まとめ
その後、Dockerfileの使用例が紹介されたあと、まとめとなりました。
コンテナ実行環境を作ることは難しくはないですが、状況を把握しづらいのでGUIも併用するといいとのこと。※何度もGUI画面を表示したのはそのため
また、コンテナを理解した上で「どのように自動化するか?」という観点が重要です。 Dockerfileを入り口にして、さらに高度な自動化(Ansibleとか)に進めばいいのでは?とのことでした。
まずは、ご自分の手元のPC上でコンテナ環境を構築して、Dockerコンテナの理解が進んだら、次のステップでKubernetesに進むのもいいと思います。
ここまでのアーカイブ動画はこちらです。 youtu.be
QAセッション
この後に行われた、Slidoを利用したQAセッションでもDockerコンテナに付随してKubernetesに関連した質問がいくつかでました。
・Dockerとk8sの関係がわからん
・コンテナの冗長化ってどうする?
・負荷分散するならk8sがいいのか?
多くの人がコンテナに関して興味を持ちつつも疑問点も多いことが判りました。
QAセッションを見ていると、いきなりKubernetesから入るのではなく、DockerDesktopのような手元で動かせるミニマムな環境を触ってみるとコンテナのことを理解しやすいという宮原氏の考え方は納得感がありました。
QAセッション部分の動画のアーカイブはこちらをご覧ください。
【宣伝】ニフクラ/FJcloud-Vでは、二か月無料枠を用意しています。
DockerDesktopの次のステップとして、Kubernbetesを試してみたい!という方は、Kubernetes Service Hatobaも無料対象なので、ぜひお試しください。
personal.clouddirect.jp.fujitsu.com