最近、Dockerのコミュニティがとても発展しています。それは、どうしてでしょうか。皆一緒に理解していきましょう。
###Dockerとは何?食べることができますか?###
もちろん、食べることができませんね。大体皆知ってるように、開発の中では色々問題があります。一つの問題は開発環境です。それで、開発環境の件、DockerはContainer(独立Container)でアプリを管理します。
Dockerの特徴
何でもContainer化することができます。
私たちのシステムがContainerに孤立します?
- 環境開発をするように、DockerContainerをインストールします。
- アプリの具体設計(設計自由)
- 内部のネットワークやContainerとContainer
どうすれば? Dockerをインストールするには、以下のリンクを参考にします。
https://docs.docker.com/engine/installation/
####IMAGE####
具体的には、IMAGEがLinux OS を梱包します。Dockerの中に、Dockerfileがあります、このファイルの目的はなんでしょうか。そのファイルは新たにImageを立てる。Dockerfileの中に、いろいろなlayerがある、でも、最高layerはいつも OSである。
例えば
PHP-FPM 7.0のDockerfile見ると、Debian (debian:jessie)のOS Image を継承して、あと、PHP-FPM をインストールします。あと、ダウンロードをして、Imageになった。
https://github.com/docker-library/php/blob/0792ba42f0ea7435ceb26b42a066274e028b30e3/7.0/fpm/Dockerfile
IMAGEを設計して、何が面白いか。
- 他のImageから継承することができます。
- アップロードとシェアは簡単です。
- https://store.docker.com/ でほとんど何もありますね。
また、他のIMAGEを利用する際に、Docker Storeでpullをします。
docker pull <イメージの名前>
####Containerは何?####
ContainerはOSと関係のlibraryとアプリを包む。
どうすれば、新たなContainerをつくれますか。
ImageからContainerを作っています。
docker run <イメージの名前>
Containerを作りましたあと、docker exec
でこのContainerを対応しています。
例えば
docker exec -it <containerの名前> bash
その中で
i (interactive): OSのterminalにアクセスします。
t (#): stdoutに表示される
Containerとcontainerをインタラクティブする際に、network、volume等が必要です。
例えば
nginx: 80番ポートを開くと、 clientからアクセスすることができます。
php-fpm: 9000番ポートを開くと、 nginxとproxyをコネクトします。
mysql: 3306番ポートを開くと、DBをコネクトすることができます。
###結論###
- Microserviceに適当である。
- 資源がかかることの減る。
- 環境開発の方が早くて、安全である。
参考リンク
https://docs.docker.com/