Docker初心者がDockerを使う準備をする!

スポンサーリンク
docker-main Docker
この記事は約13分で読めます。

Dockerはよく聞くワードですが、エンジニアでも実際にどういうものか知っている・使っているという人はどれだけいるでしょうか。

ましてや僕のような非エンジニアであればなおさらです。

しかし、

このDockerはテクノロジーの教養として知っておく価値があるものだと思いました!

TomoOne
TomoOne

大学で「テクノロジー教養」という試験があったら、必ずDockerの問題は10%くらい出るんじゃないかというレベルです。

そこで、今回はDocker 初心者がDockerを使えるようになるまでを何回かに分けて書いていきます。

ここで書く内容は、Udemy で受講できる、
かめ れおんさんの米国AI開発者がゼロから教えるDocker講座

で学んだ内容を自分の中で定着するために調べたり考えたりした内容を踏まえて進めていきます。

導入は文章より動画のほうがすっと入ってくる人も多いと思いますので、少し記事を読んでいただき

「Docker面白そうだし、簡単そう」

と思った人はぜひUdemyで米国AI開発者がゼロから教えるDocker講座を受けてみてください。

それでは、Dockerを使う準備をしていきましょう!

スポンサーリンク

Dockerとは

まず、Dockerとはなにかという部分を書いていきます。

Docker ドキュメント日本語化プロジェクトにあるDocker 概要を見てみると、こう書いてあります。

Docker はアプリケーションを開発(developing)・移動(shipping)・実行(running)するための、オープンなプラットフォームです。Docker は皆さんのアプリケーションをより速く運ぶために設計されています。Docker を使うことで、アプリケーションをインフラから分離し、アプリケーションを管理するようにインフラを扱えるようにします。Dockerはコードの移動をより速く、テストを速く、デプロイを速くし、コードの記述とコードの実行におけるサイクルを短くします。

Docker はこれを実現するために、カーネルのコンテナ化機能(containerization;コンテナライゼーション)がもたらすワークフローと手法(ツール)を組みあわせます。それゆえ、アプリケーション管理とデプロイの手助けになるでしょう。

なんか、アプリケーションを速く開発やテストや本番化ができるような技術っぽいです。

そのために、コンテナ化機能というのを使っているっぽいということはわかります。

ここで、キーワードのコンテナが出てきました。

Dockerを論じる前に、コンテナという技術について知っておく必要があります。

コンテナ

コンテナは、貨物船が来る埠頭に積まれているあのでっかい箱です。

それを元にした技術で、具体的には仮想化技術に近い技術のことです。

仮想化技術はこんな感じの技術で、

ホストOSという自分のPC(MacやWindowsやLinuxなど)の上に仮想化のソフトウェア(Virtual Boxなどが有名)があり、そのソフトウェアによってゲストOSという別のOSを動かし、そのOSの上でアプリケーションやプロセス(Excelやnginxなど)を動かすことができるという技術のことです。

イメージつきやすいのは、Windows が入っているPCの上で仮想的にMac OSを動かすことができるという感じです。

めっちゃスゴイです!!!

で、これをもっと速くするために、コンテナを使うわけです。

ホストOS(MacやWindowsやLinuxなど)の上にはコンテナが乗っかっておりその中でプロセスが動くというイメージになります。

図を見比べる限り、速くなりそうですよね。

ここで僕も思ったのですがOSはどうするの??という疑問です。

OSは、ホストOS(のカーネル)を使ってコンテナの中のプロセスを動かしています。

僕はMacユーザーですので、MacOSのカーネルが使われることになります。なので、Ubuntuのコンテナを作って、プロセスを動かしていてもそれはMacOSのカーネルが動かしているということになります。

実際にはコンテナというのは、namespaceという

プロセス、ファイル構造、ユーザーID、グループIDなどを1つのOSの中で分離する事ができる技術でこのnamespaceで区切られた空間をコンテナといいます。

Docker

ここまで見た方であれば、先程引用した、

「Docker はアプリケーションを開発(developing)・移動(shipping)・実行(running)するための、オープンなプラットフォームです。・・・」

のところが分かってくるのではないでしょうか。

Dockerの特徴を挙げてみます。

Dockerの特徴

  1. 動作するOSは1つなので、消費リソースが少なくて済む。
  2. コンテナ起動は、OS的には単純にプロセスが起動しているだけなので、起動がとても速くなる。
  3. 1コンテナ1プロセスの環境が作れる。

今回は、Docker, Inc.が提供しているDockerHubというサービスを使っていきます。

Kubernetes

Dockerの話が出ると、Kubernetes(K8s)というワードも出ることが多いです。

読み方は、クバネティス/クバネテス/クーべネティス いろいろありますが、これは何かというと、ドキュメントを引用します。

Kubernetesは、宣言的な構成管理と自動化を促進し、コンテナ化されたワークロードやサービスを管理するための、ポータブルで拡張性のあるオープンソースプラットホームです。

Kubernetesは膨大で、急速に成長しているエコシステムを備えており、それらのサービス、サポート、ツールは幅広い形で利用可能です。

Googleは2014年にKubernetesプロジェクトをオープンソース化しました。KubernetesはGoogleが大規模な本番ワークロードを動かしてきた10年半の経験と、コミュニティから得られた最善のアイデア、知見に基づいています。

Kubernetesには多くの機能があります。考えられるものとしては

コンテナ基盤、マイクロサービス基盤、ポータブルなクラウド基盤

など、他にもいろいろ

Kubernetesは、コンテナを中心とした管理基盤です。ユーザーワークロードの代表格であるコンピューティング、ネットワーキング、ストレージインフラストラクチャのオーケストレーションを行います。それによって、Platform as a Service(PaaS)の簡単さの大部分を、Infrastructure as a Service(IaaS)の柔軟さとともに提供し、インフラストラクチャプロバイダの垣根を超えたポータビリティを実現します。

ドキュメント

大手クラウドベンダーのサービスも充実

コンテナ、Kubernetesの技術は大手クラウドベンダーでもサービスになっているくらい利用されています。

Microsoft Azureだと

AWSだと

などがあります。

Docker Hub

さて、基本知識が分かったところで早速Docker Hubを見ていきましょう。

Docker Hub Container Image Library | App Containerization
Welcome to the world's largest container registry built for developers and open source contributors to find, use, and sh...

Docker Hubは、Docker Image(コンテナを実行するときに必要なファイルシステムのこと)をユーザーが作成したコンテナをアップロードして公開したり共有したりできるサービスのことです。

Docker Imageを管理するDockerレジストリが、Docker Hub

コードを管理するレジストリが、GitHub

Docker Hubへの登録とDocker Desktopのダウンロード

Docker Hubに登録していない人は、登録しましょう。

Docker Hubのサイトに行き、Sign Upします。プランは、0円のプランで大丈夫です。

登録が終わって、Docker Hubのサイトに行くとDocker Desktopをダウンロードできるボタンが出てきますのでダウンロード、インストールしましょう。

Docker Desktopがダウンロードできると、

アプリケーションとしては、こんなアイコンのアプリが入っており、アプリを起動させると、画面上部にクジラマークのDockerアイコンが出るようになります。

自分のPCに入っているDockerのバージョンを確認するにはこのコマンドをターミナルで実行します。

バージョン情報が出てくれば入っています。

$ docker --version

Docker version 19.03.12, build 48a66213fe

Docker HubからDocker Image をpullしてみる

それでは、実際にDocker のコマンドをつかってみます。

Docker DesktopがRunningの状態であることを確認し、以下のコマンドを実行します。

$ docker login

ここでusernameとpasswordを聞かれますのでDocker Hubに登録したときのものを入力してログインします。

素っ気ないのですが、このメッセージが出ればログイン成功です。

Login Succeeded

ログインしたら、次はpullです。

$ docker pull hello-world

すると、こんな感じでDocker Hubからhello-worldのDocker Imageの最新版が入ります。

Using default tag: latest
latest: Pulling from library/hello-world
Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
Status: Image is up to date for hello-world:latest
docker.io/library/hello-world:latest

今回持ってきたのは、Docker Hub上のこれです。

https://hub.docker.com/_/hello-world

上手くったら、イメージを見てみましょう。

$ docker images

すると、

REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
hello-world                    latest              bf756fb1ae65        7 months ago        13.3kB

こういう表示があれば無事にpullできていることがわかります。

コンテナを動かす

pullしたコンテナを、docker runコマンドで動かしてみましょう。

docker run <image>で動かすイメージを指定できます。

$ docker run hello-world

出力はこうなっているはずです。

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 ps

すると、

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

なにも出ていないです。

ドキュメントを見るとこう書いてあります。

デフォルトの docker ps は実行中のコンテナだけ表示します。全てのコンテナを表示するには docker ps -a を使います。

ということなので、 -a オプションをつけてみます。

$ docker ps -a

すると、

CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                     PORTS                    NAMES
672f87d4ea6c        hello-world            "/hello"                 2 hours ago         Exited (0) 2 hours ago                              strange_noether

出てきました。StatusがExitedになっているので、実行中ではないことがわかります。

今回はここまでです。

今回の内容をまとめてみます。

  1. Docker Hubへの登録
  2. Docker Desktopのダウンロード
  3. Docker にログインする
    docker login
  4. Docker Hubから”Hello World”のDocker Imageを持ってくる
    docker pull hello-world
  5. pullしたイメージを見てみる
    docker images
  6. コンテナを動かす
    docker run hello-world
  7. 動かしたコンテナを確認する
    docker ps -a

振り返ってみると、これだけのことをやっていました。

ややこしいdocker run hello-worldの部分を図にしてみました。

まとめ

今回は、プログラミングのはじめの1歩でもあるHello WorldのイメージをDockerで動かすまでをやってみました。

Dockerをインストールし、Docker HubからDocker Imageをpullしてきてhello worldを表示させたというのは大きな一歩です。

次からは、Dockerをもう少し深く掘ってみるところと、Ubuntuのコンテナを使ってWebページを表示してみたりなどなどを取り上げます。

教材と参考資料

米国AI開発者がゼロから教えるDocker講座
AI開発のプロが徹底的に現場目線でわかりやすく教えます.Dockerを使って超本格的なデータサイエンスやWeb開発の環境が作れるようになります.
コンテナってなんだろう― 「コンテナ」の概要を知る
コンテナ誕生までの歴史とコンテナの成長 前回に引き続き、今回はコンテナが生まれるまでの歴史とコンテナが成長してきた道のりをたどってみたいと思います。 コンテナの歴史は、1979年にchrootが誕生したことから始まります(図1)。chroo...
【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その1:コンテナってなに? 〜 | SIOS Tech. Lab
【武井の世界一わかりみ深いシリーズ】これからコンテナ、Docker、Kubernetesを始める人向けの初心者向け記事です。7回シリーズの第1回目は「コンテナ」について分かりやすく解説します!
タイトルとURLをコピーしました