レベル0のDockerプレイヤーが可能な限りシンプルな状態から勉強したい時の話
お詫び
Qiitaの元記事にて、区切り線を「---」で書いている場所があり、これがZennの記法に干渉して一部うまく表示できない記事がある事を認識しています。
全ての記事を精査しきれていないため、お手数ですがお見かけの際は教えていただけると大変喜びます。
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だと思う(私は引っかかった)ので、面白かったものを参考より先に紹介させていただく。
参考を読み進める際は、この絵を覚えておくと理解がしやすいかもしれない。
参考
イメージとコンテナの作成・削除
↑が出来たら、コンテナに入る
コンテナとホストのファイルを共有したい
↑の事もあって、sshでつなごうかと思ったけど、docker execやdocker cp、マウントが使えたので参考程度。リモート接続時は必要かも
そろそろ分かってきたので、Dockerfileについてちゃんと勉強する。
トラブルシューティング的に、Docker内の環境変数について
似たような問題。Dockerコンテナでcronを実行する時の話
初級者以上、プロフェッショナルの方
「自分はこうやって勉強したよ!」
っていう話がDockerの勉強会などでもあまり見られなかったです。
例えば、ハマったところとかトラブルシューティングはいっぱいあるんだけど、「こういう時にこうする」っていうシチュエーションだと勉強を進めにくいのです…。
本などがあれば参考にさせていただきたいです。
Discussion