LoginSignup
75
70

More than 5 years have passed since last update.

目指せ文系からの一流エンジニア!初心者のDocker勉強会

Last updated at Posted at 2016-05-17

はじめまして、私は文系学部に通っている大学4年の@sivertigoと申します。
まったくもってプログラミングは未経験ですが、あるIT企業から内定をいただいたため、ITエンジニアになるための勉強をはじめました。先輩から勉強会という形でたくさんのことを学ばせていただいているので、せっかく学んだことを忘れないよう、備忘録として残しています。
自分の理解が間違っていたらご指摘ください。。。

第一回(5/12)の勉強会ではざっくり言うと
・dockerとは何者なのかを勉強して、
・dockerを公式サイトからインストールし、
・docker machineをつかってみて
・ubuntuをdockerを使って立てて
・vimをインストールし
・rubyの簡単なコードを動かすところまで行いました。

以上が今回の記事の内容となります。


dockerとはなんぞや?

Kobito.meazo9.png

dockerとは、ひとことで言うと仮想環境を簡単に立てることができる便利ツールのようです。

正直学ぶ前まではとっつきにくい超難しいツールなんだと思ってました。

だって、コンテナとかイメージとか仮想化とか、語感からして難しそうで・・・。

実は仮想環境については少しだけ事前知識はありました。先輩(@sadayuki-matsuno)にmacbookを貸していただく前まではオラクル社が開発しているVirtual Boxを使ってwindowsからubuntuを使えるようにしてプログラミングの勉強をしようかなと考えて、試行錯誤をしておりました。

でも、自分の愛用のノートパソコンだとうまく立ち上がらず、失敗する原因もよくわからないまま全てを諦めました。笑

そんなVirtual Boxとdockerは何が違うのでしょうか。
その違いを表したイメージ図を以下のサイトに確認しました。

Kobito.6J5OdT.png
引用元URL:【Docker入門】コンテナ型仮想化技術Dockerを使ってみた

dockerは右のコンテナ型にあたりますが、ライブラリ、ミドルウェア、アプリをまとめて立ち上げるイメージですかね。手間がかからなさそうな印象を受けます。(あまりよくわかっていません。)


docker利用のメリット

 さて、dockerを利用するとどのようなメリットがあるのでしょうか。
 docker導入のメリットについては以下のQiitaに掲載された記事がよく書かれているため、参照しました。

こちらによるとメリットは以下のとおり。

  • 同一性
    複数人で開発する際に、環境の差が生まれない。
  • カプセル化
    アプリケーション込みの環境をコンテナというカプセルに隠蔽することができる。
    コンテナという単位に対するテストが可能に。
    コンテナを捨てる・再生成するのが容易。
  • ポータビリティ(一貫性とも)
    開発に使ったコンテナをCIでテストできる。 CIでテストしたコンテナをサーバーにデプロイできる。
    デプロイしたコンテナをスケールできる。

開発におけるDocker導入のメリット

 特に開発環境の差異が原因で起こるエラーがなくなることが大きいメリットのような印象を受けました。これは、将来エンジニアになってから重宝するに違いないですね!勉強のやる気もグンと上がります!!


dockerをインストールする

 今回自分が使っている環境はOS X 10.10.5です。dockerをos xにインストールする方法については、公式文書を参考にしました。
https://docs.docker.com/engine/installation/mac/


これに従いながらDocker Toolboxのページに飛んで、mac用のDownloadボタンから押して素直にインストールしました。
それからiTermを開いてどうにかこうにかすると

Kobito.su90yF.png

こんなかんじの画面が開きました。(上記画像は公式サイトからの引用)これでdockerが使えるようになりました。


ためしにdocker -vとdocker-machine -vを打ってみてバージョン確認をすると、きちんと返ってきます。
スクリーンショット 2016-05-13 17.56.08.png


これで、iTerm(bash)からdocker-machineやdockerのコマンドが打てるようになりました。

Docker machineとDockerの違い

ここまでで、docker-machineとdockerという二種類の別のコマンドが出てきました。
その二つは何が違うんだろうと疑問に思いますよね。以下、私が初学者なりに解釈してまとめてみました。間違いがありましたらご指摘ください。

  • docker
     実際にコンテナを作ったり、イメージを使ったり作ったりするツール。

  • docker-machine
     dockerが動くような仮想マシンを作って、管理するためのツールです。docker-machineコマンドを使ってdockerを実行させるサーバや仮想マシンを管理します。dockerはlinux上で動く仕様になっているため、MacやWindowsユーザーの場合、直接dockerだけをインストールしても使用することができません。linux以外のOSで動かすためにはdockerが動くための仮想マシンを立ててその上に仮想OSを立てる必要があるみたいです。


なのでdockerを使う前にdocker-machineを使う必要があります。

Docker machineで仮想マシンをつくる

 ということで、docker-machineコマンドを使ってdockerを動かすための仮想マシンを作っていきたいと思います。

まず、何も操作していない状態でdocker-machine lsコマンドを打ってみます。

そうすると、現在のdockerマシン一覧が表示されます。

docker-machine ls

Kobito.iHbOWl.png

ここでは自分がすでに作っていた'default'という名前の仮想マシンがありますが無視してもらって結構です。何も作成しない状態であれば、

NAME        ACTIVE   DRIVER       STATE     URL                 SWARM   DOCKER    ERRORS

とだけ表示されるはずです。ここでは、何もマシンが作成されていないことを確認しました。


次に新しくdocker machineを作成していきます。

docker-machine createのコマンドを使います。これを打ち込むと新しく仮想マシンが作成されます。ここでは仮想環境をvirtualboxを利用して構築しています。名前はなんでも良いのですが、今回は私がよく使う名前sivertigoで作っています。

docker-machine create --driver virtualbox sivertigo

Kobito.kIlffT.png

これで、sivertigoという名前でマシンが作成されました。もう一度lsコマンドでマシンのリストを確認してみます。

docker-machine ls

Kobito.5Cc3S6.png

下の方に新しく"sivertigo"という名前の仮想マシンができていますね。
ただ、作っただけではこのマシンはきちんと動いてくれません。きちんと作成した仮想マシンとホストマシンを連携させるように環境を設定しなければなりません。

docker-machine env sivertigo

Kobito.mEEHiZ.png

これでdockerが動くときにsivertigoマシンに呼びかけるように設定するにはどうすればいいか表示されました。一番最後の行に書いてあるevalコマンドを打つことでこの4行の設定を一気に行います。

eval $(docker-machine env sivertigo)

これで環境設定は終わりです。

Linux(ubuntu)をdockerにいれる

これで、ようやくdockerを使えるようになりました。ここからdockerを使うためにイメージをインストールしてコンテナを作っていきますが、一旦ここで初期段階ではイメージもコンテナも何もないことを確認しましょう。

docker ps           #コンテナをリストで表示する
docker images         #イメージをリストで表示する 

Kobito.FiysFA.png

以上、イメージもコンテナも何もありません。

イメージって?コンテナって?

ここまでで、docker machineを使えるようにしただけではイメージもコンテナも何もないことを確認しました。

ここでド文系な私が思うことは一つ。
コンテナとかイメージとか言われても全く想像がつかない・・・。

ということで簡単に今回私が先輩に習ったコンテナとイメージのイメージを書いておきます。
以下ではOSのubuntuをイメージとしてコンテナを作る例を図示しています。

Kobito.a0PdDS.png

こんな感じであってますでしょうか。
イメージはコンテナを作るための元になるデータで、
コンテナはイメージから作られたインスタンスです。

一つのイメージから複数のコンテナを作ることができるってかんじです。
コンテナをまたイメージとして固めることもできるらしいのですが、その辺はまだ私が全く使用しておらず理解してないので割愛させていただきます。

(ちなみにどんなイメージがあるのか気になったので調べてみました。参考にどうぞ。)
docker認定イメージ一覧


Dockerで最新のubuntuを使うには

ここからは、ubuntuのイメージをダウンロードしてきて、それをもとにコンテナを一つ作ろうと思います。

工程としては、
・ubuntuイメージをdockerにpull(ダウンロード)する
・ubuntuイメージを元にコンテナをrun(起動)する
といった感じです。


dockerにubuntuイメージをpullする

docker pull ubuntu:latest

Kobito.cKIA39.png

これでubuntuが使えるようになったはずです。
きちんとubuntuのイメージがpullされたかどうかを再度docker imagesコマンドで確認します。

docker images

Kobito.uuPlC7.png

これで、正常にubuntuイメージが作成されてリストに表示されていることがわかりました。


イメージからコンテナを作成する

次は無事取得できたイメージを使ってコンテナを作成していきます。

以下のコマンドを入力することで最新のubuntuイメージを元に、"SAMPLE"という名前のコンテナが作成されます。

docker run -d -it --name SAMPLE ubuntu:latest /bin/bash

Kobito.z3VgZ5.png

このコマンドはどういうことかというと

docker run [オプション] [--name {コンテナー名}] {イメージ名}[:{タグ名}] [コンテナーで実行するコマンド] [引数]

という中身になっています。オプションには-i-t-dが使われています。

d: バックグランドで実行
i: コンテナの標準入力を開く
t: ttyを確保する
p: ポートフォワード

引用元Qiita記事:Dockerでコンテナ作成/起動/停止/自分用Image作成

そして、コンテナを作成したことを確認するためにdocker psでコンテナ一覧を確認します。

docker ps

Kobito.yApIG7.png



こんな結果になります。CONTAINER IDはテキトーに作成されるようです。


作成したコンテナに接続して使ってみる

SAMPLEコンテナができました。
次はコンテナに接続してみます。
以下のコマンドを打つと、作成したコンテナの中に入ることができます。

docker exec -it SAMPLE /bin/bash

Kobito.0n4Wyw.png

こんな感じでコンテナの中に入れましたか。
この中はもう既に仮想のubuntuOSで動いてるサーバーです。好き勝手いじり放題。


同じ方法で作成したコンテナであれば、ほかの人と開発環境を同じにできるので、
コードを書いたときに「あれっ、なんでそっちでは動くのにこっちでは動かないの?」なんてことがありません。
こうしてコンテナを作って作業をするメリットは実際に開発やテストをしているエンジニアにとっては言わずもがなですが、
環境の違いに気を配るなんて、IT初心者にとってはなおさら至難の技。
環境の違いによる無駄な苦労がなくなるのは本当に助かります!!最高です!!


vimをコンテナ内でインストールしてみる

次に入ったコンテナの中でvimというエディタをインストールして使ってみたいと思います。v
Linux上で何かソフトウェアをインストールするには apt-get install ソフト名というコマンドを使います。それに従ってコマンドを打ってみましょう。

apt-get install vim

Kobito.XAtK9K.png

はい、打ち込みましたがエラーがでました。
E: Unable to locate package vimと言っています。
このエラーは以下のコマンドを打ってアップデートをすることで解消できるようです。
(なぜ解消されるのかは私自身は全く理解しておりません。どなたか教えてていただけると幸いです。)

apt-get update
apt-get install vim

こんなかんじになります。
Kobito.VgVdUL.png

こんな感じで無事にvimがインストールされたと思います。


rubyをコンテナ内で動かしてみる

今回の勉強会でやったことの仕上げです。rubyをインストールして使ってみます。
先ほどと同様にrubyもapt-get installを使ってインストールします。

apt-get install ruby

Kobito.TB7WM1.png

こんな感じでインストールが進んでいきます。完了するはずです。できたかどうか確認するために

ruby -v

を打ってみてください。

Kobito.Q0hyvc.png

きちんと返ってきました。現時点(2016/5/18)で最新バージョンのrubyがインストールされました。

試しに自分のホームディレクトリ上にsampleディレクトリを作成し、
その中にsample.rbというファイルを作って実行してみます。

cd                  #ホームディレクトリに移動
ls                  #ホームディレクトリに何もないことを確認
mkdir sample        #sampleという名前のディレクトリを作る
ls                  #sampleディレクトリに何もないことを確認
cd sample           #sampleディレクトリに移動
vim sample.rb       #sample.rbという名前のファイルをvimエディタで作成&編集する
ls                  #sample.rbが作成できたことを確認
ruby sample.rb      #rubyでsample.rbを実行

Kobito.7aNYff.png

こんな感じになるとおもいます。ちなみに、"sample.rb"の中身はこんな感じです。

Kobito.jOEvnx.png


コンテナへの接続を切る

exit

Kobito.azuhpp.png
これでいつものローカルサーバーの中に戻りました。
以上、Docker勉強会の内容まとめでした。

75
70
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
75
70