とあるお兄さんの雑記

基本的に技術系の内容を書きますが、何を書くかは私の気分です。

Dockerを学ぶ 第1回~Docker概要とHello World~

こんにちは。

HTC Advent Calendar 2020の5日目を担当します。
ONEJAPAN HACKATHONに参加したチームHTCの一人のkurasherです。

私は現在学習中のDockerを書きます。目標としては、Dockerを知らない全くの初心者でも最終的には最低限のDockerコマンドを習得できることとしています。出来得る限り分かりやすく書いていくつもりですので、よろしくお願いいたします。

また、この記事ではDockerについての説明よりDockerがある程度使えるようになることをメインに置きますので、Dockerそのものの理解については他の記事を参照していただきますよう、お願いします。

Docker学習に入る前に

12月3日、Kubernetes 1.20からDockerが非推奨になる理由という記事が出て、「Docker使えなくなるんじゃね?」みたいな話が出ていますが、そんなことはないです。もちろん上の記事も「Docker使えなくなるよ」とは言っていません。

公式:Don't Panic: Kubernetes and Docker
Dockerは非推奨じゃないし今すぐ騒ぐのをやめろ
ここらあたりを読めば分かりますが、普通にDockerを使えます

大して文章も読まずに特徴的な言葉だけを拾って勘違いしてしまう我々に問題があるので、正しい情報を正しく理解する力をつけましょう。

Dockerとは

Dockerは、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである。 (Wikipediaより)

と書いてありました。 この記事ではDockerの理解よりもDockerを使えることを目標にするため、あまり深入りしないようにします。興味ある方は調べてみてください。

Dockerのメリット

とはいえ、あまりに不親切なので、簡単にDockerのメリットだけ触れておきます。 普段の業務における開発では動作環境が重要になってきます。例えば、開発側がMacで最新安定バージョンの言語でアプリを作ったとしましょう。その後、テスト環境で不具合が無いかどうかを調べ、本番環境に移し、正式にリリースします。

しかし、開発環境、テスト環境、本番環境でそれぞれ違う環境だった場合、わざわざ環境を合わせる必要がありますし、せっかく作ったアプリが正常に動作しない可能性があります。

一方、Dockerだとソースコードから開発環境まで含めてすべて同じ環境にすることが出来ます。また、誰でも同じ環境を再現することが出来るため、アプリが動作しないなんてことは無くなります。

DcokerイメージとDockerコンテナ

DcokerイメージとDockerコンテナだけは押さえておきましょう。

Dcokerイメージとは

通称イメージと呼ばれています。Dockerでは作ったものをZipファイルのようにまとめ、Docker Hub(Docker用のGitHubみたいなもの)に上げることで、他の人にも共有することが可能です。
この時のZipファイルみたいなものがDockerイメージにあたります(という風に私は理解しています...)。

Dockerコンテナとは

通称コンテナと呼ばれています。通常、Dockerで何かしらのアプリを作成する場合、Docker Hubから何かしらのDockerイメージを取ってきます。しかし、それだけでは動かず、Dockerイメージを起動することで初めて動作します。
この、Dockerイメージを起動し、実際に動作できるようにしたものがDockerコンテナにあたります(という風に私は理解しています...)。

DockerイメージとDockerコンテナの理解としては、次のような例が分かりやすいかと思います。
ある日、組み立て式のデスクを購入し、組み立て式のデスクが家に届きました。この状態ではまだデスクは使える状態ではありませんが、家にはあります。
この、手元にはあるがまだ使える状態にないのがDockerイメージです。
f:id:kurasher:20201130220520p:plain

一方、段ボールを開け、実際に組み立ててデスクをいつでも使えるようにした状態がDockerコンテナの状態になります。
f:id:kurasher:20201130220617p:plain

ざっと、DockerイメージとDockerコンテナの説明をしました。最初は難しいかもしれませんが、何度もDockerに触れるうちに分かるようになってきますので、分からなかったら分からなかったで次に行きましょう!!

DockerでHello Worldをやってみる

ここからはDockerを実際に動かしてみましょう。

Docker のインストール

下記から各環境に合わせてインストールしてください。

Macの場合はこちらから
https://docs.docker.jp/docker-for-mac/install.html

Windows Pro、Enterprise、Educationはこちらから
https://docs.docker.jp/docker-for-windows/install.html

Windows Homeの場合、Dockerをインストールできない場合があります。その場合は、Docker Toolboxというものがあり、こちらの記事を参考にインストールしましょう。
【初心者】Docker Toolboxのインストール方法(Windows 10 Home Edition)

また、ブラウザ上でDockerを使うことが出来るPlay with Dockerというものもあります。4時間という制限はありますが、Dockerの学習だけならこちらでもいいかと思います。
Play with Docker

Hello Worldをやってみる

今回はHello Worldを試すだけなのでPlay with Dockerを使ってみます。

サイトにアクセスすると以下のような画面が出てきます。Play with Docker以外でもいずれDocker Hubのアカウントが必要になるので作っておきましょう。 f:id:kurasher:20201130220159p:plain

ログインして、Startすると、以下のような画面が出てきます。左側の「+ ADD NEW INSTANCE」をクリックします。 f:id:kurasher:20201201123343p:plain

すると、以下の画面が出てきて、Dockerが使えるようになります。 f:id:kurasher:20201201123525p:plain

では、ターミナルに次のコマンドを打ち込んでみましょう。

$ docker run hello-world

すると、以下のような出力が出てくるかと思います。

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:e7c70bb24b462baa86c102610182e3efcb12a04854e8c582838d92970a09f323
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

これで一応、Dockerからhello-worldを起動することが出来ました!
とはいえ、これだけではDockerの全てを把握できるわけではありませんので、次回以降Dockerコマンドについて詳しく見ていくことにします。

終わりに

今回はDockerの概要とHello Worldを試してみました。
次回以降、本格的にDockerで使われるコマンドについて説明します。