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を起動する

[bash] 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
[/bash]

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

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

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

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

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

[bash] 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
[/bash]

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

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

09. Deep Dive into Docker Containers

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

「docker ps」コマンド

  • Dockerコンテナの状態を確認
[例] 「docker run」コマンドに「-d」をつけてバックグラウンドで起動

[bash] ubuntu@ubuntu-xenial:~$ sudo docker run -d busybox:1.24 sleep 1000
3f177fd12c3dd64fcadfd40c1f2c533dc3b581f1097aa9505846a3cd0474e177
[/bash]
[例] 「docker ps」コマンドで状態を確認

[bash] 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
[/bash]

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

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

[bash] 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:~$
[/bash]

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

  • Container起動時に「–rm」オプションを使用すると、過去のContainer実行履歴から削除される
[例] docker runの「–rm」オプションを付けて起動したあとに、docker ps -aで確認

[bash] 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:~$
[/bash]

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

  • 「–name」オプションでDockerコンテナに名前が付けられる
[例] Dockerコンテナに「test」と名前とつけて起動

[bash] 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
[/bash]

「docker inspect」コマンド

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

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

10. Docker Port Mapping and Docker Logs Command

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

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

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

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

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

「docker logs CONTAINER_ID」コマンド

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

[bash] 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
※省略
[/bash]

おわりに

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

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