紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【人生初】漫画の感想とWindows上にVagrantを入れてHello Worldするまでの手順まとめ #マンガでわかるDocker

f:id:yokoyantech:20190314181122p:plain

はじめに

人生初Dockerです。

先月行われたJAWS DAYS2019で、湊川あいさんのマンガでわかるDockerを購入しました。

自分が携わっているProduction環境をDockerに乗せ換えるために、Dockerの検証をはじめました。 漫画の感想と、Windows環境でDockerの環境を構築して、Hello Worldを表示するまでの手順をまとめます。

マンガでわかるDockerとは

湊川あいさんが書かれている作品です。 こちらです。とてもいい本です。 私は書籍で購入しましたが、ダウンロード販売も行われています。

llminatoll.booth.pm

難しいイメージがあるDockerを、とてもわかり易くマンガで描かれています。 こういう難しそうな技術をマンガにすることで敷居を下げてくれるのはとても有難いです!!

以下、漫画の感想です。

【感想1】5年放置していたDockerを学ぶきっかけをわかばちゃんが与えてくれた

Dockerの存在は5年ぐらい前から知っていました。 しかし、 Vagrantがあるから十分だとか、 Production環境でやるにはまだ早いらしいとか、キャッチアップしない理由ばかりを並べて、気づけば 世の中から、随分取り残されていることに気づきました。 AWS ECSを触らないまま、EKSもリリースされてしましましたが、私は未だにEC2を触っています。

5年間ずっとできなかったことが、700円のマンガでわかるDockerを読むだけで、やってみようと思い、結果として、Dockerの環境構築をして、Hello Worldまでできるようになったというのは、非常に効率の良い投資だと感じました。

一人であれこれできない理由を考えるよりも、漫画を読んでできる方法を学んだ方がよっぽど人生前向きですね。Dockerって難しそうだなー、と思っている30代のエンジニアの方、とてもおすすめです。

【感想2】VagrantとDockerの違いもよくわかった

私のチームの開発環境ではVagrantを使っています。 コンテナが流行っているし、やってみたいな、そろそろやらないといい加減ヤバイな、と思いつつも、VagrantとAnsibleで十分じゃないのと思っていました。 実際、Vagrantを使えば簡単にスタートラインを揃えることはできます。

しかし、そこから開発者ごとでBOXを作り直さないまま、手動でGemを追加したりしていくため、細かい差異が生まれていきます。地味に今、困っている問題です。

Dockerの場合、冪等性があり、メンテナンスが用意であることから、担当者や環境毎の際が発生しにくいということが漫画に書かれており、なるほどなーと思わず唸りました。(このあたりの話は、マンガでわかるDocker2に書かれています)

マンガでわかるDockerでは、まずDockerを使うと何が便利なのか、何がいいのか、ということが前段にあり、そこから一つ一つわかばちゃんが初心者の目線で作業を進めてくれます。疑問点はPHPさんが答えてくれます。そのステップが読んでいて非常に心地よく、自分でもやってみようかなと思えました。

【感想3】時間が限られている人にこそおすすめしたい

私は、何かを学ぶ時には、0を1にする瞬間が一番労力を使う気がします。理由は面倒くさいから。

AWS を使うようになってから、日々進歩する技術の速度についていくことが限界だと感じるようになってきました。新しいサービスが次々とリリースされ、既存のサービスにも新機能が追加されていくため、数年前に学んだ知識があっという間に陳腐化します。

常に勉強し続けることができればよいのですが、時間は有限であり、全てに手を出すことは物理的に無理です。しかし、マンガでわかるDockerのような技術の漫画を読んで、トレンドの技術をキャッチアップするというのは、育児で時間が限られている私にとっては、非常に効率が良いなと感じました。

もちろん、漫画だけですべてを理解することはできませんが、まずはじめてみよう!という、ある意味一番ハードルが高いところを超える手助けをしてくれるのは大変有難いです。

【作業ログ】WindowsにDocker環境を構築してHello Worldするまで

マンガを読みながら、やってみた作業ログです。マンガではWindowsではなく、Macで環境構築していたため、独自にやってみました。

WindowsだけどDockerやってみたい!という方の参考になれば幸いです。

私のPC

  • Windows10 pro 64bit

方針

  • WindowsにVagrant入れる
  • Vagrant上にUbuntu入れる
  • Vagrant上にDocker入れる

※Docker for Windowも検討しましたが、Windows端末上で開発をしないので見送り。

事前準備

  • rubyのインストール
  • Vagrantのインストール
  • VirtualBoxのインストール

参考情報

qiita.com

VagrantFileの作成

  • Ubuntu18でもよかったんですが、今のProduction環境がUbuntu16.04で動いているため、今回の検証もUbuntu16にしています。
  • ホスト名、IPアドレスは任意の値でOKです。
  • synced_folderでファイル同期するようにすると便利です。
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  config.vm.hostname = "docker-dev"
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "private_network", ip: "192.168.33.99"
  config.vm.synced_folder ".", "/home/vagrant/docker-dev"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true

    # Customize the amount of memory on the VM:
    vb.memory = "2048"

    vb.customize [
      "modifyvm", :id,
      "--vram", "256", # ビデオメモリ確保(フルスクリーンモードにするため)
      "--clipboard", "bidirectional", # クリップボードの共有
      "--draganddrop", "bidirectional" # ドラッグアンドドロップ可能に
    ]
  end
end

Vagrantの起動

  • コマンドプロンプトで実行
    • 初回起動は10分くらい時間かかります
vagrant up

SSH確認

vagrant teraterm

image

または、vagrant sshでもOKです。

Dockerのインストール

VagrantFileの修正

  • 以下を追加して保存
  config.vm.provision "docker"

Vagrantのプロビジョニング

  • Dockerをインストールするため、Vagrantのプロビジョニングを行う
  • コマンドプロンプトから以下を実行
vagrant provision
==> default: [vagrant-hostsupdater] Checking for host entries
==> default: [vagrant-hostsupdater]   found entry for: 192.168.33.99 docker-dev
==> default: Running provisioner: docker...
    default: Installing Docker onto machine...

再度UbuntuへSSH

vagrant teraterm

Dockerプロセスの確認

  • Dockerデーモンのプロセスを確認
$ docker container ls
  • 起動しているコンテナがないため、以下のようにタイトルだけ返されればOK
vagrant@docker-dev:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
vagrant@docker-dev:~$

Hello Worldの実行

  • DockerHubから、Hello Worldのイメージをダウンロードして実行
$ docker run hello-world
  • 以下のように表示されれば成功!
vagrant@docker-dev:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
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 runでは以下がまとめて実行される
    • イメージ取得
    • イメージ生成
    • イメージ起動

まとめ

ということで、今回はマンガでわかるDockerついて、感想とやってみた作業ログを書きました。 コンテナの技術はとても面白いです。 2巻と3巻も購入させて頂いたので、自分で試してみて、また感想をブログに書きたいと思います。

湊川あいさんをこれからも応援しています!