はじめに
人生初Dockerです。
先月行われたJAWS DAYS2019で、湊川あいさんのマンガでわかるDockerを購入しました。
今日は朝10時に湊川あいさんの本を4冊買いました。マンガでわかるDocker AWS編だけ買うつもりが湊川さんとお話してとても素敵な方だったので全部買いました。これからも応援してます! #Docker 勉強してproduction環境をコンテナ化したいなー。 #jawsdays #jawsug pic.twitter.com/TG6dzWmP7i
— Yokoyama Hironori (@yokoyantech) 2019年2月23日
自分が携わっているProduction環境をDockerに乗せ換えるために、Dockerの検証をはじめました。 漫画の感想と、Windows環境でDockerの環境を構築して、Hello Worldを表示するまでの手順をまとめます。
#マンガでわかるDocker のおかげでhello worldできたー!敷居が高いなーと思う技術を漫画にしていただいて本当に有難いなあ。Windows環境にVagrant入れて検証したのでブログにも書きたいと思う。
— Yokoyama Hironori (@yokoyantech) 2019年3月15日
マンガでわかるDockerとは
湊川あいさんが書かれている作品です。 こちらです。とてもいい本です。 私は書籍で購入しましたが、ダウンロード販売も行われています。
難しいイメージがある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のインストール
参考情報
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
または、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巻も購入させて頂いたので、自分で試してみて、また感想をブログに書きたいと思います。
湊川あいさんをこれからも応援しています!