Dockerを動かしてみた


今回は2つの教材でdocker学習しました。

ドットインストールDocker入門

本田有呼さん著「Dockerのことが全くわからず現場で形見の狭い思いをしているプログラマー向けの本」

○ Dockerとは

コンテナ型のアプリケーション実行環境のことです。
2013年に公開されてから爆発的に普及しました。

仮想化技術は長年、VirtualBoxなどが主流でした。
しかし、これらには次のようなデメリットがあります。
・導入や運用が大変
・動作が重い

ホストとなるOSの中で、更に独立したOSを動かしているイメージなので、重くなって当然ですね。

これがDockerなら、「コンテナ」という単位でOSをそのまま動かせて、カーネルをホストのOSと共有できます。
*カーネル:OSの根幹

・軽い
・早い
・運用しやすい
とメリットがたくさんなので広まったわけですね。

#Dockerの仕組み
それではDockerについて簡単に解説します。
ここでは、Dockerのインストールや設定は省略します。
わかりやすいサイトいくらでもあるので、そちらを参考にしてください。

####Dockerファイル
Dockerイメージを作るための元ネタのことです。
Dockerイメージにテキストで命令します。
ビルドすることで、Dockerイメージが出来上がります。
ビルドについてはまた後ほど解説...

####Dockerイメージ
コンテナを作るための雛形です。
どんなOSにどんなアプリを搭載してどんな動作をするか、などの情報が入っています。
雛形さえ作ってしまえば、同じ内容のコンテナを量産できます。

####Dockerコンテナ
Dockerイメージを生成することで出来上がります。
コンテナには実行中・停止・破棄の3つの状態があります。

####Dockerの作業の流れ
①Dockerファイルに必要な記述をする
②ビルドしてDockerイメージが出来上がる
③実行してコンテナが生成される

#Dockerのコマンド
それでは、ファイル・イメージ・コンテナでよく使うコマンドを見ていきましょう。

###Dockerファイルの必須コマンド5つ

○FROM
Dockerイメージのベースとなるイメージを指定します。
指定したイメージはDocker Hubというポスティングサービスからダウンロードされるんです。


FROM ubuntu:14.04
#FROM イメージ名:タグ

○RUN
Dockerイメージをビルドするときに、コンテナの中で実行するコマンドをそのまま指定します。


RUN echo 'Hello World!'

○COPY
ローカルホストPCのリソースをコンテナにコピーします。

COPY main.go /tmp/work/
#COPY コピーするリソース/コピー先のパス

○CMD
コンテナの実行時に、コンテナ起動時の最初の1回だけ実行するプロセスを指定します。

○EXPOSE
コンテナを外部公開するときのポートを指定します。

外部公開するときには、Webサーバを使います。
よく使われるのがNginx(エンジンエックス)というものです。
高速かつ軽量に動きます。
localhost:8080
で起動できます。

###Dockerイメージのコマンドとオプション

Dockerイメージの操作は


docker image 操作 オプション

で基本的に行います。
ここでは、操作とそれぞれの操作で使うオプションを見ていきます。

○build
Dockerファイルからdockerイメージをビルドします。


docker image build -t helloworld:1.0 .

−t オプションはDockerイメージの名前とタグ名を指定するために必要です。
同じフォルダにDockerファイルがあるなら、パスの表記を「.」とできます。

*その他のオプション
・-f
Dockerファイルの名前を違う名前で使用できるようにします。

docker image build -f my Dockerfile -t helloworld:1.0 .

・--pull
DockerファイルのFROMに指定されているイメージを毎回Docker Hubから取得する場合に”true”を表示します。
一度取得したイメージはローカルpcに保存されているため、このオプションでtrueを確かめないと、過去に取得していなイメージを再利用してビルドされてしまいます。

docker image build --pull=true -t helloworld:1.0 .

○ls
ローカルPCに保存されているDockerイメージを一覧表示する
linuxコマンドでもよく使いますね!

docker image ls

○pull
Docker Hubで提供されているDockerイメージをダウンロードします。

docker image pull イメージ名:タグ名

○rm
ローカルPCに保存されているDockerイメージを削除します。
rm=removeですね!

docker image rm イメージ名

コンフリクトエラーが出た場合、「-f」オプションをつけてください。

○prune
不要なDockerイメージをまとめて削除します。

###Dockerコンテナのコマンドとオプション
コンテナの操作の基本は⇣です。

docker container run オプション名 イメージ名:タグ名

runコマンドで重要なオプションをいくつか紹介します。

・--name
コンテナ名を定義します。

・-iと-t
「Ctrl+C」に同じ。
セットで使う必要があるので、"-i -t"と書きます。

・-d
コンテナをバックグラウンドで動かします。
Webサーバなどでコンテナを動かすときに使います。

・-p
ポートフォワードするためのコマンドです。

docker container run -p 9999:8080

⇑なら、9999ポートのアクセスを8080ポートにフォワードする、という意味です。
*フォワード:転送のこと。

・--rm
コンテナの終了時にそのコンテナを削除します。
一度きりしか使わないコンテナで使用します。

○stop
コンテナを停止します。


docker container stop コンテナ名

○restart
コンテナを再実行します。
stopで停止したコンテナは破棄しない限り再実行できます。

#これまでのコマンドをまとめて実行してみる

Dockerファイルの内容

# ベースをubuntuにする
FROM ubuntu:18.10

# Nginxのインストール
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install nginx

# ポートの指定
EXPOSE 80

#rootフォルダへリソースのコピー
COPY index.html /var/www/html/

#Nginxの起動
CMD ["nginx","-g","daemon off;"]

index.html (Webに表示する内容)

<h1>この記事を読んでくださりありがとうございます!</h1>

表示する内容は何でも良いです。
2つのファイルは同じ場所に置いてください。

それでは、命令を出していきます。

まず、「cd」でファイルを保存した場所まで移動します。

移動したら、Dockerイメージをビルドします。

docker image build -t hello:1.0

次に、コンテナを動かします。

docker container run -i -t --rm -p 9999:80 hello:1.0

最後にブラウザで「http://localhost:9999/」にアクセスします。

そうすれば、

このように表示される。
ちなみに、本はamazonのkindleでめちゃくちゃ安いので、買ってみてもいいと思います。