富士通クラウドダイレクトブログ

初心者エンジニア向けTechBlog

富士通クラウドダイレクトブログ

初心者エンジニア向けTechBlog

【レポート】いまさら聞けないDockerコンテナ超入門

この記事は、ニフクラブログで2022-09-07に公開された記事を移転したものです。

こんにちは。 ニフクラエンジニアミートアップ事務局の鮫島です。

2022年7月26日(水)に第49回ニフクラエンジニアミートアップを開催しました。
今回のテーマは、「いまさら聞けないDockerコンテナ超入門」ということで、コンテナ実行環境のデファクトスタンダードであるDockerについて、仮想化との違いやメリットといった基礎からDocker Desktopを使ったコンテナ実行環境構築までを解説する内容でした。

久しぶりに講師はモデレーターの宮原氏が務めました。

fujitsufjct.connpass.com

コンテナはここ数年注目を集め続けている技術のひとつです。
しかし、いまだにコンテナのことがよく分からないという声は非常に多く聞きます。
国内でのコンテナ活用シーンがまだまだ限定的という理由もあると思いますが、「まずは動かしてみよう!」という宮原氏らしいセッションでした。

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

GUIでイメージを確認するとこういう感じです…

Dockerコンテナを実行しよう

さっそく、コマンドラインでDockerコンテナを実行します。

Ubuntuイメージでコンテナを実行

# docker run -it ubuntu bash

コンソールはコンテナ内で動作しているbashに移ります。
※exitで抜けられます。

実行中のコンテナを確認するには、別のターミナルを起動してこのコマンドを実行

# docker ps -a

GUIで確認するとこういう感じ。

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で確認するとこういう感じに見えます。

100MB位のファイルが追加されているはず…

コンテナを実行してみよう

これで、コンテナを実行できる環境が出来ました。

早速イメージからコンテナを動かしてみます。 まず、コンテナでNginxを実行して、ホストのポート8080番をコンテナのポート80番に紐づけます。

# docker run -d -p 8080:80 --name=web1 nginx nginx_template

続いてポートが紐づいているかを確認します。

# docker ps -a
# curl localhost:8080

またまた、GUIで確認するとこういう感じです。

ポート8080に紐づいているのが確認できます

コンテナ実行環境を構築する手順は以上になりますので、ぜひ皆様のお手元の環境で試してみてください。

まとめ

その後、Dockerfileの使用例が紹介されたあと、まとめとなりました。

視覚的にコンテナの存在を確認したい人はGUIなんですね…

コンテナ実行環境を作ることは難しくはないですが、状況を把握しづらいのでGUIも併用するといいとのこと。※何度もGUI画面を表示したのはそのため

また、コンテナを理解した上で「どのように自動化するか?」という観点が重要です。 Dockerfileを入り口にして、さらに高度な自動化(Ansibleとか)に進めばいいのでは?とのことでした。

まずは、ご自分の手元のPC上でコンテナ環境を構築して、Dockerコンテナの理解が進んだら、次のステップでKubernetesに進むのもいいと思います。

ここまでのアーカイブ動画はこちらです。 youtu.be

QAセッション

この後に行われた、Slidoを利用したQAセッションでもDockerコンテナに付随してKubernetesに関連した質問がいくつかでました。

Dockerとk8sの関係がわからん
コンテナの冗長化ってどうする?
負荷分散するならk8sがいいのか?

多くの人がコンテナに関して興味を持ちつつも疑問点も多いことが判りました。

QAセッションを見ていると、いきなりKubernetesから入るのではなく、DockerDesktopのような手元で動かせるミニマムな環境を触ってみるとコンテナのことを理解しやすいという宮原氏の考え方は納得感がありました。

QAセッション部分の動画のアーカイブはこちらをご覧ください。

youtu.be

【宣伝】FJcloud-Vでは、二か月無料枠を用意しています。
クラウドのサーバーで検証環境を構築してみたいという方におすすめです。 personal.clouddirect.jp.fujitsu.com