UdemyでDockerを学ぶ① 〜概要からSection1まで〜


リンクバル技術部の川畑です。エンジニアとは常に新しい技術を勉強し続けねばならない悲しい生物(!?)です。最近はそんなエンジニアのためにドットインストールや、paizaなどオンラインで簡単に勉強ができるようになってきました。そんな中で今回はDokcerを体系的に学びたいと思い、UdemyでDockerを勉強してみました。

Udemy(ユーデミー)とは

アメリカのオンライン学習プラットフォーム。学びたい講座を購入(1部無料)し受講したり、また誰でも講師となり、自分の講座を動画でインターネット上に公開できる、オンライン学習プラットフォーム。

選択した講座

今回はLearn Docker Technologies for DevOps and Developersという講座を受講しました。講座は英語のみでしたが、Docker関連の講座では、★が5段階評価の4.5と一番高い評価でした。ちなみに私は5段階評価の5と評価しました。

「Learn Docker Technologies for DevOps and Developers」の概要

講義の概要は以下の通り。

  • 講義数: 45
  • ビデオ: 4.5時間
  • 受講レベル: 初心者から上級者
  • セクションの内容
    • Section1: Get Started with Docker Technologies
    • Section2: Working with Docker Images
    • Section3: Create Containerized Web Applications
    • Section4: Docker Networking
    • Section5: Create a Continous Integration Pipeline
    • Section6: Deploy Docker Containers in Production
    • Section7: Additional Learning Materials

「Section1: Get Started with Docker Technologies」の内容

Section1の内容は以下の通り。

  • 01 Course Overview: Welcome to the Docker World
  • 02 Course Slides
  • 03 Introduction to Virtualization Technologies
  • 04 Docker’s Client-Server Architecture
  • 05 Install Docker for Mac/Windows
  • 06 Install Docker ToolBox
  • 07 Important Docker Concepts
  • 08 Run Our First Hello World Docker Container

それでは個別に見ていきます。

01 Course Overview: Welcome to the Docker World

  • 主な内容:コース全体の説明

02 Course Slides

  • 主な内容:Section1で使用する資料ダウンロード

03 Introduction to Virtualization Technologies

  • 主な内容:Hypervisor(ハイパーバイザ)とContainer(コンテナ)の比較

Hypervisor(ハイパーバイザ)

  • メリット
    • サーバコスト低
    • スケールさせるのが用意
  • 制限事項
    • カーネルリソースの重複
    • アプリケーション移植性に乏しい

Container(コンテナ)

  • メリット
    • サーバコスト低
    • デプロイが早い
    • アプリケーション移植性が保証されている

04. Docker’s Client-Server Architecture

  • 主な内容:DockerのClient/Server構成の説明

Docker Client

  • Docker Hostへのインターフェースは2種類
    • Command Line Interfafe
    • Kitematic Docker Client(GUIのDocker Cleint)

Docker Deamon

  • Docker Deamonはサーバのプロセス
  • Docker DeamonはLinuxのKernelの一部の機能を使用しているのでLinuxでしか動作しない

05. Install Docker for Mac/Windows

  • 主な内容:公式ドキュメントを参考にしてDockerのインストール
  • 公式ドキュメントはこちら(https://docs.docker.com/engine/installation/)

06. Install Docker ToolBox

  • 主な内容:Docker ToolBoxのインストール
  • Docker ToolBoxはMac/Windowsで提供されており、以下のものが含まれている
    • Docker Client docker binary
    • Docker Machine docker-machine binary
    • Docker Compose docker-compose binary
    • Kitematic – Desktop GUI for Docker
    • Docker Quick Start Terminal app
  • 公式ドキュメント(https://www.docker.com/products/docker-toolbox)

07. Important Docker Concepts

  • 主な内容:Dockerの重要なキーワードについての説明

Images(イメージ)

  • Containerのもととなるテンプレート
  • 「docker build」コマンドで作成
  • ImageはDocker Registryに格納

Containers(コンテナ)

  • Imageがクラスとしたら、Containerはインスタンス(実行オブジェクト)
  • Containerはアプリケーションを実行する環境

Registries and Repositories(レジストリとリポジトリ)

  • Registryには複数のRepositories/Imagesを格納
  • Docker公式のPublic registry「DockerHub」

DockerHub

  • DockerHub(https://hub.docker.com/)
  • 提供元が常に最新の状態にしてくれるので、Official Imageがおすすめ

08. Run Our First Hello World Docker Container

  • 主な内容:Docker Hubに格納されているImagesよりContainer起動するまでのハンズオン

「docker images」コマンド

  • ローカル環境の(docker deamon)が管理しているdockerイメージを確認するコマンド

「docker run」コマンド

  • DockerイメージよりDockerコンテナを起動するコマンド。Dockerイメージがローカル環境にない場合、Dockerレジストリ, DockerHubなどからDockerイメージを取ってきて起動する

[例] busyboxというリポジトリの1.24というタグのImageよりContainerを起動する

ubuntu@ubuntu-xenial:/var/run$ sudo docker run busybox:1.24 echo "hellow world"
Unable to find image 'busybox:1.24' locally
1.24: Pulling from library/busybox
385e281300cc: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:8ea3273d79b47a8b6d018be398c17590a4b5ec604515f416c5b797db9dde3ad8
Status: Downloaded newer image for busybox:1.24
hellow world

「docker run」コマンドでコンテナ内でコマンド実行

[例] Dockerコンテナ雨を起動して「ls /」を実行

ubuntu@ubuntu-xenial:/var/run$ sudo docker run busybox:1.24 ls /
bin
dev
etc
home
proc
root
sys
tmp
usr
var

「docker run」コマンドのオプション

  • 「docker run」コマンドでContainerを起動して、インタラクティブにコマンドを実行する場合は「-i」「-t」が必要

[例] 「docker run」コマンドでContainerを起動して接続

ubuntu@ubuntu-xenial:/var/run$ sudo docker run -i -t busybox:1.24
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # touch a.txt
/ # ls
a.txt  bin    dev    etc    home   proc   root   sys    tmp    usr    var
/ # exit

「exit」後に再度Containerを起動して接続すると、先程生成したファイルが消えている

ubuntu@ubuntu-xenial:/var/run$ sudo docker run -i -t busybox:1.24
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ #

09. Deep Dive into Docker Containers

  • 主な内容:Dockerコンテナをバックグラウンドで実行して、Dockerコンテナの状態の確認など
  • Dockerは通常はバックグラウンドで使用するもの

「docker ps」コマンド

  • Dockerコンテナの状態を確認

[例] 「docker run」コマンドに「-d」をつけてバックグラウンドで起動

ubuntu@ubuntu-xenial:~$ sudo docker run -d busybox:1.24 sleep 1000
3f177fd12c3dd64fcadfd40c1f2c533dc3b581f1097aa9505846a3cd0474e177

[例] 「docker ps」コマンドで状態を確認

ubuntu@ubuntu-xenial:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3f177fd12c3d        busybox:1.24        "sleep 1000"        56 seconds ago      Up 55 seconds                           kickass_stonebraker

「docker ps」コマンドのオプション

  • 「docker ps」に「-a」オプションをつけて実行すると、ローカル環境で起動されたDockerコンテナをすべてを表示

[例] ローカルBoxで起動されたDockerコンテナをすべてを表示

ubuntu@ubuntu-xenial:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS                     PORTS               NAMES
3f177fd12c3d        busybox:1.24        "sleep 1000"            3 minutes ago       Up 3 minutes                                   kickass_stonebraker
03570eb48976        busybox:1.24        "sh"                    8 hours ago         Exited (1) 7 minutes ago                       distracted_shannon
2d2c29304004        busybox:1.24        "sh"                    8 hours ago         Exited (0) 8 hours ago                         evil_ramanujan
b75f0bc9e060        busybox:1.24        "ls /"                  9 hours ago         Exited (0) 9 hours ago                         silly_lamport
c1414743fed5        busybox:1.24        "echo 'hellow world'"   9 hours ago         Exited (0) 9 hours ago                         serene_mestorf
cb2baab575cd        busybox:1.24        "echo 'hellow world'"   9 hours ago         Exited (0) 9 hours ago                         infallible_sammet
ubuntu@ubuntu-xenial:~$

「docker run」の「–rm」オプション

  • Container起動時に「–rm」オプションを使用すると、過去のContainer実行履歴から削除される

[例] docker runの「–rm」オプションを付けて起動したあとに、docker ps -aで確認

ubuntu@ubuntu-xenial:~$ docker run --rm busybox:1.24 sleep 1
ubuntu@ubuntu-xenial:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS                      PORTS               NAMES
3f177fd12c3d        busybox:1.24        "sleep 1000"            6 minutes ago       Up 6 minutes                                    kickass_stonebraker
03570eb48976        busybox:1.24        "sh"                    9 hours ago         Exited (1) 11 minutes ago                       distracted_shannon
2d2c29304004        busybox:1.24        "sh"                    9 hours ago         Exited (0) 9 hours ago                          evil_ramanujan
b75f0bc9e060        busybox:1.24        "ls /"                  9 hours ago         Exited (0) 9 hours ago                          silly_lamport
c1414743fed5        busybox:1.24        "echo 'hellow world'"   9 hours ago         Exited (0) 9 hours ago                          serene_mestorf
cb2baab575cd        busybox:1.24        "echo 'hellow world'"   9 hours ago         Exited (0) 9 hours ago                          infallible_sammet
ubuntu@ubuntu-xenial:~$

「ducker run」の「–name 」オプション

  • 「–name」オプションでDockerコンテナに名前が付けられる

[例] Dockerコンテナに「test」と名前とつけて起動

ubuntu@ubuntu-xenial:~$ docker run --name test busybox:1.24 sleep 1
ubuntu@ubuntu-xenial:~$ docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                     PORTS               NAMES
ecd10ebbdc47        busybox:1.24          "sleep 1"                8 seconds ago       Exited (0) 7 seconds ago                       test

「docker inspect」コマンド

  • Dockerイメージ/コンテナの詳細情報の表示

[例] Dockerコンテナの詳細情報を表示

ubuntu@ubuntu-xenial:~$ docker run -d busybox:1.24 sleep 100
06f2e99dd7d3bb3989be7ac70f6eb555576c0afbdb98f00dc652a4ce0da1fd48
ubuntu@ubuntu-xenial:~$ docker inspect 06f2e99dd7d3bb3989be7ac70f6eb555576c0afbdb98f00dc652a4ce0da1fd48
[
    {
        "Id": "06f2e99dd7d3bb3989be7ac70f6eb555576c0afbdb98f00dc652a4ce0da1fd48",
※省略

10. Docker Port Mapping and Docker Logs Command

  • 主な内容:DockerコンテナとホストOSとのポートのマッピングとログ出力方法について

「docker run -it -d -p HOST_PORT:LOCAL_PORT」コマンド

[例] ホストOSのポート「11088」とDockerコンテナのポート「8080」をマッピングしてDockerコンテナ起動

ubuntu@ubuntu-xenial:~$ docker run -it -d -p 11088:8080 tomcat:8.0
939040b3c40758388f1aea844e1ad162c036f4a96d3cb743d05e1e4a1d556d28
ubuntu@ubuntu-xenial:~$

ブラウザでホストOSのポート「8080」を指定してアクセス

「docker logs CONTAINER_ID」コマンド

[例] コンテナIDを指定してログを表示

ubuntu@ubuntu-xenial:~$ docker logs 939040b3c40758388f1aea844e1ad162c036f4a96d3cb743d05e1e4a1d556d28
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/lib/jvm/java-7-openjdk-amd64/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
18-Mar-2017 20:49:44.892 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.0.42
※省略

おわりに

Udemyで学習したDockerのレポートでした。Dockerは私が考えていた以上に奥深く幅広いものだと感じました。記事1つにはまとめられなかったので、不定期ですが何回かに分けてレポートさせて頂く予定となります。

リンクバルでは エンジニアを積極募集中 です。興味のある方のご応募お待ちしております。