将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

确认

result.png

迷上了網絡。

理解如何通过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との兼ね合いで起動出来ず、だいぶわけがわからないことになった。

广告
将在 10 秒后关闭
bannerAds