非エンジニアのスタートアップ 0 年生 ( 4. Docker の基本 )
こんにちは、株式会社ピケでサーバサイドエンジニアをしている古内です。
こちらの記事は【 4. Docker の基本 】になります。
1. サービス開発に必要なこと
2. HTML、CSS の基本
3. Python の基本
4. Docker の基本 ( 本記事 )
5. Django で開発
6. GCP にデプロイ
目次
1. この記事について
2. Docker と Docker Compose
3. Linux 基礎知識
4. Docker を動かしてみる
5. まとめ
1. この記事について
この記事ではサービス開発と運用の基盤の記事です。
エンジニア界隈で言うインフラエンジニアと呼ばれる人たちの領域です。
インフラというと水道、電気、ガスを連想されると思いますが Web サービスもそれに近いです。
Web サービスでのハードウェア、OS、ミドルウェア、ネットワークなどが生活に関わる水道、電気、ガスと同じような役割です。
そのインフラを Docker で構築しようってのが本記事になります。
私は最初、「初心者に Docker はきついかなぁ… 」と思っていたのですが、開発環境と本番環境に同じものを別々に用意させるほうが難しいと判断したため、初心者でも Docker を使う方針にしました。
本題に入る前に最後に 1 つだけ伝えたいことがあります。
Docker の概念を覚えるのはプログラミングの概念より難しいと思うので最初はコマンドの暗記でいいと思います。( コピペとか )
2. Docker と Docker Compose
----- Docker -----
まずは Docker をキャンピングカーに例えて解説します。
キャンピングカーなら東京で生活しても大阪で生活してもベッドやキッチンは変わりませんよね?
場所は移動しても家 ( インフラ ) そのものも移動しているので同じ環境で生活できるからです。
Docker では Dockerfile と言うものに必要なものを記述します。
キャンピングカーにはベッド、キッチン、トイレなどあります。
Dockerfile には言語、言語のバージョン、ライブラリなど書きます。
Dockerfile を開発環境と本番環境で同じものを使えば同じ環境が構築できます。
場所は移動しても Dockerfile で環境ごと移動しているイメージです。
つまり Docker は環境を移動できるコンピュータです。
----- Docker Compose -----
Docker Compose もキャンピングカーに例えて解説します。
キャンピングカーに車と居住スペースで別れている分離型があります。
( 分離型キャンピングカーのことをピックアップキャビンって言うんですね )
Docker もデータベースやアプリケーション ( Python ) などに分離して管理します。
分離している Docker を管理・接続してくれるのが Docker Compose になります。
以上が Docker と Docker Compose の解説でした。
Docker と Docker Compose のダウンロードリンクです。
Docker : https://docs.docker.com/install/
Docker Compose : https://docs.docker.com/compose/install/
3. Linux 基礎知識
Docker を使うのに本当に最低限の Linux 知識を解説します。
----- ディレクトリ -----
まずはディレクトリを解説します。
ディレクトリは Windows で言うフォルダです。
以上。
とは行きません。少しだけ知識が必要です。
以下はディレクトリの具体例です。
/usr/src/app/
先頭の「 / 」はルートと呼びます。
Windows で言うフォルダの一番上の根っこみたいなものです。
usr はディレクトリ名です。
Windows で言う usr フォルダです。
src と app も usr と同様です。
「 / 」記号は先頭以外は区切りの意味になります。
このディレクトリを文字に書き起こすと
ルートの中にある usr ディレクトリの中にある src ディレクトリの中にある app ディレクトリ
という意味になります。
/usr/src/app/test.txt
この場合だと
ルートの中にある usr ディレクトリの中にある src ディレクトリの中にある app ディレクトリの中にある test.txt ファイル
になります。
先頭から「 / 」で始まる参照の仕方を絶対参照と呼びます。
もう一つ、絶対参照ではない参照の方法があります。
/usr/src/app/test.txt
もう一度この例を題材にもう一つの参照方法を解説します。
Windows や Mac で src ディレクトリを開いていると仮定します。
その時の test.txt ファイルの参照方法は以下になります。
app/test.txt
先頭の「 / 」がなくなり、代わりに src ディレクトリ内にあった app ディレクトリから参照されています。
これを相対参照といいます。
ちなみに、今開いている src ディレクトリのことをカレントディレクトリといいます。
また、「ターミナル」や「端末」ソフトを起動したときのディレクトリをホームディレクトリといいます。
参照方法をまとめると
・「 / 」から始まる → 絶対参照
・「 / 」で始まらない → 相対参照
になります。
----- コマンド -----
続いて、Docker を使うための最低限のコマンドの解説をします。
コマンドを実行するためには専用のソフトを使います。
Mac : ターミナル
Ubuntu : 端末
Windows : コマンドプロンプト
Mac と Ubuntu は一緒なのですが Windows だけコマンドが違ってしまいます。
そのため Mac と Ubuntu を前提にしたコマンドの解説をします。
ls コマンド
現在いるディレクトリ ( カレントディレクトリ ) のファイルやディレクトリを表示する。
実行例
ls
実行結果例
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
pwd コマンド
現在いるディレクトリの表示する。
実行例
pwd
実行結果例
/usr/src
cd コマンド
ディレクトリの移動
実行例
cd app
実行結果例は特にありませんが pwd コマンドを実行するとディレクトリを移動したことが確認できます。
mkdir コマンド
ディレクトリの作成。
実行例
mkdir furuuchi
実行結果例は特にありませんが ls コマンドを実行するとディレクトリが作成されていることが確認できます。
他にも cat、rm、echo コマンドなどたくさんあります。
とりあえず上記の解説したコマンド + Docker のコマンドで運用できると思います。
4. Docker を動かしてみる
まず、ちゃんと Docker がインストールできたか以下のコマンドを実行してみましょう。
docker version
私は以下の結果になりました。 ( 人によって違う場合があります )
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:13:02 2018
OS/Arch: darwin/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:22:38 2018
OS/Arch: linux/amd64
Experimental: false
ついでに Docker Compose も以下のコマンドで確認してみましょう。
docker-compose version
私は以下の結果になりました。( これも人によって違う場合があります )
docker-compose version 1.21.1, build 5a3f1a3
docker-py version: 3.3.0
CPython version: 3.6.4
OpenSSL version: OpenSSL 1.0.2o 27 Mar 2018
この 2 つが確認できれば OK です。
ここから本格的に Docker コマンドを使って操作します。
Docker イメージをダウンロード
Docker イメージとは、環境の整った OS をダウンロードするようなイメージです。
以下コマンドでは python の 3.6 バージョンが入った OS をダウンロードしています。
docker pull python:3.6
docker pull コマンドは 「ほしい環境:バージョン」の構文になります。
ダウンロードが完了したら以下のコマンドを叩いて見てください。
docker images
このコマンドで python があれば成功です。
それでは python 環境がある Docker を動かしてみましょう。
docker run --rm -it python:3.6 bash
いきなり呪文のようなコマンドです。
このコマンドで注目するべき場所は python:3.6 bash の部分だけで大丈夫です。
他の部分は定型文です。
「 python:3.6 」部分は docker pull コマンドでダウンロードしたものです。
「 bash 」部分は Docker 上のコマンド実行ソフトを起動するという意味です。
(「 3. Linux 基礎知識 」のコマンドの実行ソフトと同じです )
コマンドの実行結果は
root@ede80049eb79:/#
このようになっていると思います。
( 人によって少し違う場合があります )
一見なにも変化がないと思うかもしれませんが現在のコマンド実行環境は Docker 上になっています。
( 手元の Windows や Mac のコマンド実行ソフトではない )
Windows や Mac の環境に戻るには、以下のコマンドを実行します。
exit
以上が Docker を実際に動かす方法でした。
何がどうなっているかわからないかもしれませんが
とりあえず、Docker 上でプログラミング言語 ( Python ) を動かせるようになった
という認識で大丈夫です。
Docker Compose については次の記事の「 5. Django で開発 」で開発と合わせて解説します。
5. まとめ
インフラ系エンジニアの人に怒られてしまうと思いますが、基本的に Web サービスのインフラは一度構築した後はほとんど変更しないので、最悪コピペレベルでも良いと思います。( 時間を節約する )
逆に、プログラムの変更は激しいです。( 特にスタートアップ )
そのため、概念と用語だけは覚えておいたほうが検索効率が上がるのでおすすめです。
ここまでのいろいろな記事を書きましたが、今回で基礎学習系は終わりです。
HTML、CSS、JavaScript、Python、Docker の概念や役割を広く浅く解説してきました。
広く浅く解説してもたくさんの技術があったので理解できなかったこともあると思います。
でも今はそれでいいと思います。
繰り返しになりますが、一番伝えたいことは
必要なときに調べる
です。
「作る前に勉強をする」より「作りながら勉強をする」の方が効率的です。
いつまで立っても勉強が終わらず、作りたいものが作れないということになってしまいがちです。
一人でも多くの人が、自分の作りたいサービスを作れることを願っています。
=======================================
PR
古内開発教室始めてみました!
この記事読んだけどもうちょっと知りたい!
自分ひとりだと心細い!
そういった方がいましたらぜひこちらを見てください!
古内開発教室
=======================================
次の記事 5. Django で開発 - その 1
前の記事 3. Python の基本
この記事が気に入ったらサポートをしてみませんか?