将Golang的超级简单构建的web应用程序通过Docker启动至这一步骤
前提 – Paraphrased in Chinese: 先决条件
当我将Golang中的类进行分割后,出现了一些疑问。
要做的事情 zuò de
- 前回作成したwebappについて、Dockerfileを書いてDocker imageを作成、コンテナ起動する
文件结构
目录结构
golang_webapp_sample
├── Dockerfile
└── src
└── main
├── golang_webapp_sample.go
└── handler
└── http_handler.go
Dockerfile (Docker文件)
# 基本にするイメージはgolang:alpineなんよ
# golangだけでも動くけどalpineにすると最低限の構成になるので、サイズがとても軽くなるんよ
FROM golang:alpine
# コンテナ上のWorking Directoryはここなんよ
WORKDIR /go/src/golang_webapp_sample/
# ローカル上の./配下を/go/src/golang_webapp_sample/にコピーするんよ
COPY ./ /go/src/golang_webapp_sample/
# ポートを開けるんよ
EXPOSE 8080
# golang_webapp_sampleを go run する
CMD ["go", "run", "./src/main/golang_webapp_sample.go"]
打开
docker build . -t golang_webapp_sample
docker build .で今いるDir配下をターゲットにしてDocker imageを作る
-t golang_webapp_sample でimageに名前をつける
~/g/s/golang_webapp_sample ❯❯❯ docker build . -t golang_webapp_sample
Sending build context to Docker daemon 46.08kB
Step 1/5 : FROM golang:alpine
alpine: Pulling from library/golang
8e3ba11ec2a2: Pull complete
8e6b2bc60854: Pull complete
3d20cafe6dc8: Pull complete
a7b6bf1e1322: Pull complete
b95ef83a75ea: Pull complete
Digest: sha256:499b775c0954ce029c9db806c4543524b38eeb38bc5588c3ea81bb135f8c55db
Status: Downloaded newer image for golang:alpine
---> cace225819dc
Step 2/5 : WORKDIR /go/src/golang_webapp_sample/
---> Running in 1ef6b908dfc6
Removing intermediate container 1ef6b908dfc6
---> aefcc386d4c5
Step 3/5 : COPY ./ /go/src/golang_webapp_sample/
---> cd78360b7275
Step 4/5 : EXPOSE 8080
---> Running in ba1f97d334cf
Removing intermediate container ba1f97d334cf
---> 2bb6de51170a
Step 5/5 : CMD ["go", "run", "./src/main/golang_webapp_sample.go"]
---> Running in 9750576946e9
Removing intermediate container 9750576946e9
---> aacb0b6f6822
Successfully built aacb0b6f6822
~/g/s/golang_webapp_sample ❯❯❯ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
golang_webapp_sample latest aacb0b6f6822 About a minute ago 260MB
golang alpine cace225819dc 3 days ago 259MB
docker run -p 8080:8080 -td golang_webapp_sample
docker run golang_webapp_sample でgolang_webapp_sampleを起動
-p 8080:8080 でポート8080を指定開放
-td で擬似ターミナル割り当て+バックグラウンド起動
~/g/s/golang_webapp_sample ❯❯❯ docker run -p 8080:8080 -td golang_webapp_sample
97336c527d27f57e11f672736d75d34dbf024dcd48819fd6c382b9f1061d1878
~/g/s/golang_webapp_sample ❯❯❯ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97336c527d27 golang_webapp_sample "go run ./src/main/g…" 37 seconds ago Up 37 seconds 0.0.0.0:8080->8080/tcp nervous_hoover
确认

迷上了網絡。
理解如何通过Docker启动容器的流程。
-
- ものすごく大雑把なことを書くと、こういう感じ
Docker imageは超最低限の構成のlinuxをOSにして、その上に各アプリケーションをコンテナとして起動出来る状態で固めた状態のもの
DockerfileはDocker imageを作るための設計図
docker buildで出来上がったDocker imageをdocker runでコンテナとして起動する
Docker imageとDockerコンテナの違いはこちらがわかりやすいかと思います
Dockerイメージの理解とコンテナのライフサイクル
Dockerの概念をしっかり抑えるのなら、今月こういう記事が流行ってたので、理解して読むこと
いまさらDockerに入門したので分かりやすくまとめます
今回出て来ないけど、docker-composeはひとつのシステムに関連する各コンテナを一斉に起動して、コンテナ間を繋ぐためのもの。
确保Docker容器的配置正确。
WORKDIR /go/src/golang_webapp_sample/
COPY ./ /go/src/golang_webapp_sample/
CMD ["go", "run", "./src/main/golang_webapp_sample.go"]
WORKDIRは /go/src/golang_webapp_sample/ なんよと設定し、
ローカルの./の内容をWORKDIR配下コピーするんよと明言し、
WORKDIR配下にコピーされた./src/main/golang_webapp_sample.go を go runするんよという流れを把握しておくこと。
このあたりの設定をちゃんと理解しておかないとハマる。モロメチャにハマった。
最初てきとうに設定していたが、コンテナ内linuxに設定されている$GOPATHとの兼ね合いで起動出来ず、だいぶわけがわからないことになった。