概要
- OSの名前空間分けて FreeBSDのjailみたいの作れる仕組みと、それ用のルートファイルシステムイメージを自動でダウンロードして走らせたりする仕組み
- 名前空間は分けるけどそれぞれにinitが走るわけではない。その点に関してはchrootに近い(jailやOpenVZのようなものを下敷きにして捉えるとDockerの1コンテナ1プロセスというマナーを理解するのに時間がかかるかもしれない)
インストール方法
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo vi /etc/apt/sources.list.d/docker.list
# docker.listの内容
# deb https://apt.dockerproject.org/repo ubuntu-xenial main
- 以下のようにやるとaptでバージョンが選べるらしい。
sudo apt-cache madison docker-engine
sudo apt-get install -y docker-engine=1.12.1-0~xenial
sudo apt install docker-engine=17.05.0~ce-0~ubuntu-xenial
Docker
gcr のローカル実行
gcloud auth login
gcloud auth configure-docker
gcloud builds submit -t gcr.io/hamko-home/$name # カレントディレクトリをビルドして gcr にアップロード https://cloud.google.com/run/docs/quickstarts/jobs/build-create-shell
docker pull gcr.io/hamko-home/$name
docker run --rm gcr.io/hamko-home/$name # -rmオプションは、コンテナ終了時に自動的にコンテナを削除してくれます。
Dockerfile
-
dockerのRUNは毎回コンテナを立ち上げてそれを適用してコンテナを保存するということをしている。
-
この時の中間コンテナはキャッシュされているので、Dockerfileに何らかの変更を加える必要がある場合は、重い処理を早いところに入れておけばキャッシュが使われてインストールなどの処理をスキップできる。
-
RUNとCMDの違い
- RUN - イメージ作成時に実行される(build内部)
- CMD - コンテナ実行時に実行される(buildされたものをデプロイしている)
-
dockerの入門これよさそうなのでやる
- https://blog.codecamp.jp/programming-docker-image-container
- dockerfileはリモートレジストリイメージを入力して、それにコマンドを適用して新しいイメージを作るためのもの
トラブルシューティング
-
host error
- at the physical machine levelなのでどうしようもないやつ。コンテナのサイズ上げても無駄
-
80 番ポートを開くときに Permission Denied
- OS の仕様なのでグループに許可をする
$ USER=hamko
$ sudo usermod -aG docker $USER
$ su - $USER
$ sudo systemctl restart docker
# Logout