今回の記事は、以下を参考に作成しました。
で、自分なりに「あれ?」って詰まったところ?を捕捉しつつ記載します。
こちらの記事にお世話になりました。
メインのやった内容はこちらなので、
並行して読んでいただけるとありがたいです。
https://qiita.com/yonaimineakio/items/0990648bbce64de7edfa
作業ディレクトリ作成 & ファイル配置
今までHomeにいたので、任意の場所に移動して、ディレクトリを作ってみました。
$ mkdir go_doc
$ cd go_doc/
ここで移動した「go_doc」ディレクトリに、以下のファイルを作成します。
(元記事参照)
・main.go
・Dockerfile
つまり、階層はこんな感じ。
任意の階層
∟ go_doc
∟ Dockerfile
∟ main.go
Dockerfile って何書いてんの?
で、この状態から、以下のDockerfileが何を定義しているのか、個人的に絵にしてみる。
FROM golang:1.9
mkdir /echo
COPY main.go /echo
CMD ["go", "run", "/echo/main.go"]
FROM golang:1.9
https://hub.docker.com/_/golang
①公式の Golang Docker コンテナの、バージョン1.9をベースにするよ。
mkdir /echo
②DockerのHomeの下に、「echo」っていうディレクトリを作るよ。
COPY main.go /echo
③Localにある「main.go」ファイルを、
②で作った「echo」ディレクトリの下にコピーするよ。
CMD ["go", "run", "/echo/main.go"]
④Docker側でコマンド実行!
結果。
・ Dockerのベース定義
・ 実行ファイルの配置
・ 実行
っていう手順を書いてる、ってことなのかなー、と。
Dockerfile 自体には他にも定義できることがいっぱいあって、
これだけではないと思うんだけど、1ファイルの実行だけならこんな感じになるのかな。
イメージのビルド
さっき作ったDockerfileから実体を作成?
基本$ docker image build -t イメージ名[:タグ名] Dockerfile配置ディレクトリのパス
基本の構文はこれ。イメージ名とタグ名は任意でいいみたい。
イメージ名とか、タグ名って何に使われてるんだろ?と思って調べてたら
こんな記事を見つけました。
https://qiita.com/t-yotsu/items/559731aca6300eef78ec
で、パスは同じ階層にいるから「.」になるんですな。
$ docker image build -t example/docker:tag .
Sending build context to Docker daemon 10.24kB
Step 1/4 : FROM golang:1.9
---> ef89ef5c42a9
Step 2/4 : RUN mkdir /echo
---> Using cache
---> 46ca04568ee5
Step 3/4 : COPY main.go /echo
---> Using cache
---> 24719acca39b
Step 4/4 : CMD ["go", "run", "/echo/main.go"]
---> Using cache
---> 03df9c7950f8
Successfully built 03df9c7950f8
Successfully tagged example/docker:tag
実行したらこんな感じになりました。
で、元記事を参考にコンテナの起動まで行いました。
その後、いざ実行しようと思ったらポートフォワーディングというのが必要だそうで。
これについては次回の記事で書きます。
なんか消化不良ですが今回はここまでー。