Docker基礎

Docker Machine: Docker Engineがインストールされた仮想マシンを作成したり管理するためのツール
Docker Swarm: Dockerのインストールされたサーバでクラスタ構成を組んだり、コンテナ数をスケールさせるなどのオーケストレーション

### Dockerエディション
– Docker CE(Community Edition)
– Docker EE(Enterprise Edition)

### Dockerのバージョン
$ sudo docker -v
Docker version 20.10.12, build e91ed57
2020年10月リリース リビジョン12

### Explore
Docker Hubで登録されているイメージを検索することができる
レジストリはこれ以外にもQuay.io, ECR(AWS), Container Registry(GCP)などがある
オフィシャルのイメージはリポジトリ名だが、ユーザがアップロードしたものは ${Docker ID} / ${イメージ名}のリポジトリ名

### Dockerイメージとは
・コンテナ実行に必要なファイルやメタ情報をまとめたのがイメージ
・AUFSなど特殊なファイルシステムが使用されている
・イメージ上のファイルやメタ情報はレイヤと呼ばれる階層構造で構成され、読み取り専用(編集不可)となっている
・コンテナはデフォルトで外部(Docker Engineの動作しているサーバ外)と通信できないようになっているため、必要に応じてポートフォワーディングの設定を行い、外部からアクセスできるようにする必要がある

### コンテナのコマンド実行
$ sudo docker run docker/whalesay cowsay boo
_____
< boo >
—–
\
\
\
## .
## ## ## ==
## ## ## ## ===
/””””””””””””””””___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/

“docker/whalesay”が使用するイメージで、”cowsay boo”がコンテナ内で呼び出すコマンド

$ sudo docker run docker/whalesay cowsay “hello! I’m a whale”

Linuxの基本コマンドも実行できる
$ sudo docker run docker/whalesay ls -la
total 68
drwxr-xr-x 1 root root 4096 May 25 2015 .
drwxr-xr-x 1 root root 4096 Mar 13 05:38 ..
drwxr-xr-x 1 root root 4096 May 25 2015 .git
-rw-r–r– 1 root root 931 May 25 2015 ChangeLog
-rw-r–r– 1 root root 385 May 25 2015 INSTALL
-rw-r–r– 1 root root 1116 May 25 2015 LICENSE
-rw-r–r– 1 root root 445 May 25 2015 MANIFEST
-rw-r–r– 1 root root 1610 May 25 2015 README
-rw-r–r– 1 root root 879 May 25 2015 Wrap.pm.diff
drwxr-xr-x 1 root root 4096 May 25 2015 cows
-rwxr-xr-x 1 root root 4129 May 25 2015 cowsay
-rw-r–r– 1 root root 4690 May 25 2015 cowsay.1
-rw-r–r– 1 root root 54 May 25 2015 install.pl
-rwxr-xr-x 1 root root 2046 May 25 2015 install.sh
-rw-r–r– 1 root root 631 May 25 2015 pgp_public_key.txt

docker runコマンドの引数にコンテナ起動後に実行したいコマンドをつなげることで、指定したコマンドをコンテナで実行することができる
DockerfileにCMD命令を記述することで、作成したイメージからコンテナを起動した際にデフォルトで実行されるコマンドを設定できる

FROM docker/whalesay:latest

RUN apt-get -y update && apt-get install -y fortunes

CMD /usr/games/fortune | cowsay

$ sudo docker build -t fortune-whale .
$ sudo docker run fortune-whale
______________________
/ Hangover, n.: \
| |
\ The burden of proof. /
———————-
\
\
\
## .
## ## ## ==
## ## ## ## ===
/””””””””””””””””___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/

### nginx
$ docker run -p 8080:80 nginx:1.21.6
detachedモードを意味する-dフラグを付けなかった場合、プロセスの入出力にattachされた状態になるため、-dをつける
-tと-iオプションをつけた場合は、コンテナを起動したままでも接続を解除できる。よく-tiとして使用する。

$ docker cp ${containerId}:/etc/nginx nginx
$ ls

$ docker cp nginx/nginx.conf ${containerId}:/etc/nginx/nginx.conf
$ docker stop ${containerId}
$ docker start ${containerId}

なるほど、超重要な概念のところを理解した。