📝

レベル0のDockerプレイヤーが可能な限りシンプルな状態から勉強したい時の話

2023/08/29に公開

https://qiita.com/items/5197100a1ae3e5a30f4c


お詫び

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だと思う(私は引っかかった)ので、面白かったものを参考より先に紹介させていただく。

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の勉強会などでもあまり見られなかったです。
例えば、ハマったところとかトラブルシューティングはいっぱいあるんだけど、「こういう時にこうする」っていうシチュエーションだと勉強を進めにくいのです…。
本などがあれば参考にさせていただきたいです。

GitHubで編集を提案

Discussion