kindle本「Dockerのことが全くわからず現場で肩身の狭い思いをしているプログラマー向けの本」のまとめ。
点数
86点
感想
かなりざっくりとした内容だが、わかりやすかった。
主な内容
従来の仮想化ソフトウェアとの違い
VMwareやVirtualBox
仮想技術といえば、長いことVMwareやVirtualBoxが主流だったが「導入や運用が難しい」「動作が重い」といった課題があった。ホストとなるOSの中で更に独立したOSやミドルウェアを動かすため、ハードウェアのリソースもそれ相応でないとまともに動作せず、本番運用に使うことなどできなかった。
Docker
Dockerはコンテナという単位でOSを動かしており、カーネルはホストのOSと共有する。それ故にコンテナ自体は非常に軽量で快適に動作する。また、他のマシンにDockerさえ入っていればコンテナをコピーするだけでまったく同じ動作をする。 本番運用もできる。
軽い!早い!運用しやすい!
プログラミングを行うならOSはMacにするべき
今はOSS全盛期。
コマンドラインを駆使して環境構築し、開発を進める時代である。昔とは違い、プログラミングを行うにはMacの方が圧倒的に便利である。
Office系アプリはWindowsに軍配が上がるが、それ以外は全てMacが勝ると言っても過言ではない。
iTerm2
Mac標準のターミナルでも困ることはないが、イケてるエンジニアはiTerm2というCUIツールを使っている。
テキストエディタ
Macで使うべきエディタはVisual Studio Code、Sublime Text、atomの3つ。
人気はVisual Studio Codeが1番。
MacにはApacheがインストールされている
しかも、デフォルトで実行されている。
Dockerfile、Dockerイメージ、コンテナ
Dockerfileに必要な記述をして、それをビルドするとDockerイメージが出来上がる。
そして、Dockerイメージを実行するとコンテナが生成される。
Dockerfile
Dockerイメージを作るための元ネタ。
DockerfileをビルドするとDockerイメージが出来上がる。
Dockerイメージ
コンテナを作るためのひな形がDockerイメージ。
どんなOSにどんなアプリを搭載して、どんな動作をするか。そんな情報がDockerイメージには含まれている。
Dockerfile自体はただのテキストファイルで、専用の命令文を使ってDockerイメージに対して「どんなOSを使うのか」「どんなアプリを含めるのか」などを記述する。
コンテナ
Dockerイメージを実行するとコンテナが作成される。
コンテナには実行中・停止・破棄の3つの状態がある。
使用例(既存イメージを使用)
- イメージを入手
docker image pull nginx
- コンテナを起動
docker container run --name websv --rm -d -p 8888:80 nginx
※http://localhost:8888でアクセスできる
Dockerfileの命令文
RUN
イメージをビルドする際に「コンテナの中で実行するコマンド」を指定する。
例)RUN echo 'Hello!'
FROM
ベースイメージの指定。
COPY
ローカルPCのリソースをコンテナにコピーする。
「COPY コピーするリソース コピー先のパス
」
例)COPY main.go /tmp/work/
CMD
コンテナ起動時の最初の1回だけ実行するプロセスを指定すす。
実行するコマンドを空白で区切って、それぞれを1つの引数として角括弧の中に順に記述する。(CMDの場合は1つだけしか記述できない)
例)CMD ["go", "run", "/hello/main.go"]
go run /hello/main.go
としてコンテナ内で実行される。
※apacheなどデフォルトでバックグラウンド起動されるものは、明示的にフォアグラウンド起動する必要がある。Dockerはプロセスがフォアグラウンドで実行されていないとコンテナがExitされる。
例)CMD ["apachectl", "-D", "FOREGROUND"]
EXPOSE
公開するポート。
(docker container run -pオプションでポートを外部公開する場合は必要ない)
例)EXPOSE 80
Dockerイメージのコマンド
Dockerイメージの操作は「docker image 操作 オプション
」の書式で行う。
build
DockerファイルからDockerイメージをビルドするためのコマンド。
「docker image build -t イメージ名:タグ名 Dockerfileのパス
」
-tオプションはimage名:タグ名を指定するもので「事実上の必須」である。
(指定しないと勝手に名前がつけられるので管理が煩雑になる)
例)docker image build -t helloworld:1.0 .
ls
保存されているDockerimageを一覧表示する。
例)docker image ls
-aオプションを付けると「無効状態」のゴミと化しているイメージも表示される。
pull
Docker Hubで提供されているDockerイメージをダウンロードする
「docker image pull イメージ名:タグ名
」
rm
保存されているDockerイメージを削除する。
「docker image rm イメージ名
」
例)docker image rm xxxx
結構な割合でconflictエラーが発生する。
-fオプションを付けると関連のあるものも含めて、全て削除される。
prune
不要なDockerイメージをまとめて削除する。
「色々やり過ぎてよくわからないから一度全部消したい!」みたいな場合に使うとよい。
-aオプションを付けると、コンテナから参照されてないイメージが全て削除される。(つけないとエラーになったゴミファイルだけ)
Dockerコンテナのコマンド
コンテナの操作は「docker container 操作 オプション」の書式で行う。
run
イメージからコンテナを生成するためのコマンド。
「docker container run オプション イメージ名:タグ名
」
オプション
- –name
コンテナ名の指定。極力付けるべき。 - -iとt
Ctrl+Cのような操作をコンテナが受け付けるようになる。
セットで使う必要があり、-itと書くこともできる。 - -d
バックグラウンドで動かすためのオプション。
用途がWebサーバなどのコンテナに付ける。(通常のコンテナ起動はこれを使う) - -p
ポートフォワードをするためのオプション。
例)-p 9999:8080
--rm
コンテナ終了時に自身を削除するようになる。一度しか使わないコンテナの場合は付けるべき。
ls
保存されているコンテナ一覧を表示する。
-aを付けると無効状態のコンテナも表示される。
stop
コンテナの停止。
「docker container stop コンテナ名
」
restart
コンテナの再実行。
「docker container restart コンテナ名
」
停止したコンテナは破棄しない限り再実行される。
rm
保存されているコンテナを削除する。
「docker container rm コンテナ名
」
prune
停止中のコンテナをまとめて削除する。
イメージのpruneコマンドと同じ用途になる。
使用例(イメージ生成から)
Dockefile
FROM ubuntu:17.10
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install nginx
COPY index.html /var/www/html/
CMD ["nginx", "-g", "deamon off;"]
ビルドしてイメージを生成
docker image buld -t hello:1.0 .
コンテナ起動
docker container run -it -rm -p 9999:80 hello:1.0
※http://localhost:9999/でアクセス可能
docker container run と docker run
docker container run
と docker run
は同じ。
Docker 1.13で、docker container xxxコマンドが追加されたため、docker run
と docker container run
が同じ処理を行うようになった。