「Dockerのことが全くわからず現場で肩身の狭い思いをしているプログラマー向けの本」の感想・忘備録

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つの状態がある。

使用例(既存イメージを使用)

  1. イメージを入手
    docker image pull nginx
  2. コンテナを起動
    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 が同じ処理を行うようになった。


【新しい記事】

【古い記事】

コメントを残す

メールアドレスが公開されることはありません。