Dockerの性質上、いろんなものがくっついた状態で渡される事が多い。
(そういう使い方を期待してるし、想定しているから当然ではある)
これがDockerへの参入障壁を逆に高くしてしまっているところがあるかも知れない、という事で備忘録ついでに、なんでDockerに対して参入障壁が高いのか、自分なりに考えてみた。
シンプルな環境を作って勉強したいときに使えるもの
FROM ubuntu:latest
FROM centos:latest
FROM <image>:latest
Ubuntuの上にCentOSを作りたい!という場合はcentos.Dockerfileの内容を持っていって使う。
Ubuntuの上にUbuntuのコンテナを作ることもできる。
説明のためにファイル名を意図的に設定しているが、使うときはDockerfileにリネームを推奨。
ざっくりと解説
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
imageはOS名、
tagはバージョン
digestは使ったことないので、私が説明できません。
解説している場所を参考情報にまとめさせていただく。
構築の練習をしたいだけなら、imageだけ必須。
使い方
以下、コマンド
上記をDockerfileとして配置し、
docker build .(コロン。Dockerfileを置いてる場所)
でdockerのイメージが作成できる。
docker build . -t test_image
test_imageっていう名前のイメージを作る。
ここで作ったイメージを元に、コンテナを作る。
これは大事な事なんで、頭の片隅に置いてほしい。
コンテナを作る
docker run test_image
先ほど作ったtest_imageを使ってコンテナを作る。
docker run test_image --name test_container
先ほど作ったtest_imageを使ってtest_containerという名前をつけてコンテナを作る。
その後、
docker start test_container
で立ち上げて(立ち上がってるかも?)
docker exec -it test_container /bin/bash
でコンテナに入れる。
execの -itと最後の/bin/bashはかなり大事な意味があるんだけど、とりあえずおまじないだと思ってもらって大丈夫。
ただ、後述のDockerfileを編集する段階になったらちゃんと勉強しておいたほうが絶対にいい。
Dockerfileを編集する
解説不要なぐらいわかりやすいので、参考の紹介に留める。
多分読み進めると引っかかるところが、RUNとCMDとEND POINTだと思う(私は引っかかった)ので、面白かったものを参考より先に紹介させていただく。
https://qiita.com/YusukeHigaki/items/044164837daa5e845d50
参考を読み進める際は、この絵を覚えておくと理解がしやすいかもしれない。
参考
イメージとコンテナの作成・削除
https://qiita.com/kooohei/items/0e788a2ce8c30f9dba53
https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae
↑が出来たら、コンテナに入る
https://qiita.com/noralife/items/18301143c20cc5172c56
コンテナとホストのファイルを共有したい
https://qiita.com/Yarimizu14/items/52f4859027165a805630
https://qiita.com/jagaximo/items/c810ebce796d9e5e496e
↑の事もあって、sshでつなごうかと思ったけど、docker execやdocker cp、マウントが使えたので参考程度。リモート接続時は必要かも
そろそろ分かってきたので、Dockerfileについてちゃんと勉強する。
https://qiita.com/soushiy/items/0945bcbc7ecce4822985
https://qiita.com/tanan/items/e79a5dc1b54ca830ac21
http://docs.docker.jp/engine/userguide/eng-image/dockerfile_best-practice.html
トラブルシューティング的に、Docker内の環境変数について
https://qiita.com/lilacs/items/4d4e3f169a04560dee76
似たような問題。Dockerコンテナでcronを実行する時の話
http://higelog.brassworks.jp/1775
https://nsmr.tk/yumcron.html
初級者以上、プロフェッショナルの方
「自分はこうやって勉強したよ!」
っていう話がDockerの勉強会などでもあまり見られなかったです。
例えば、ハマったところとかトラブルシューティングはいっぱいあるんだけど、「こういう時にこうする」っていうシチュエーションだと勉強を進めにくいのです…。
本などがあれば参考にさせていただきたいです。