web 容器 中执行 runtime.getruntime()_用Docker容器化Go应用程序

目标

  • 基本了解Docker, 以及如何应用于日常开发
  • 为我们的Go应用程序制作简单的Dockerfile

web服务器

$GOPATH/src目录下创建项目相关目录和文件

cd $GOPATH/src
mkdir -p test.local/web-server
touch test.local/web-server/main.go

main.go代码如下:

package main

import (
    "fmt"
    "html"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
    })
    http.HandleFunc("/hi", func(w http.ResponseWriter, r *http.Request){
        fmt.Fprintf(w, "Hi")
    })
    log.Fatal(http.ListenAndServe(":8081", nil))
}

Douckerfile

在项目下创建Dockerfile: test.local/web-server/Dockerfile

# 选择基础镜像
FROM golang:1.14.3-alpine

# 修改使用使用国内代理, 否则会很慢
RUN set -ex 
&& go env -w GO111MODULE=on 
&& go env -w GOPROXY=https://goproxy.cn,direct

# 在镜像中创建项目目录
RUN mkdir /app

# 将宿主项目目录(也是当前目录)下所有文件
# 复制到镜像中的项目目录
ADD . /app

# 工作路径
WORKDIR /app

# 创建项目的可执行文件web-server
RUN go build -o web-server *.go

# 执行web-server
CMD ["/app/web-server"]

通过Dockerfile创建镜像, 在Dockerfile所在目录下执行 docker build -t go-web-server .. 如果一切正常可以看到大致如下的输出结果.

❯ docker build -t go-web-server .
Sending build context to Docker daemon  3.584kB
Step 1/7 : FROM golang:1.14.3-alpine
1.14.3-alpine: Pulling from library/golang
cbdbe7a5bc2a: Pull complete
408f87550127: Pull complete
fe522b08c979: Pull complete
246889057fdc: Pull complete
526388c839c0: Pull complete
Digest: sha256:d3a08e6a81ef8f25c7b9f4b8f2990fe76790f057ef7f8053e8884511ddd81756
Status: Downloaded newer image for golang:1.14.3-alpine
 ---> 459ae5e869df
Step 2/7 : RUN set -ex && go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn,direct
 ---> Using cache
 ---> ff37f1baf76b
Step 3/7 : RUN mkdir /app
 ---> Using cache
 ---> 857bbe125c8f
Step 4/7 : ADD . /app
 ---> 6eedab86c847
Step 5/7 : WORKDIR /app
 ---> Running in 1082740cd774
Removing intermediate container 1082740cd774
 ---> 690ae7710d53
Step 6/7 : RUN go build -o web-server *.go
 ---> Running in bf7ef2c58745
Removing intermediate container bf7ef2c58745
 ---> 9abd6567b334
Step 7/7 : CMD ["/app/web-server"]
 ---> Running in 4d45109566ff
Removing intermediate container 4d45109566ff
 ---> 82ed8c959e06
Successfully built 82ed8c959e06
Successfully tagged go-web-server:latest

也可通过docker images查看和确认刚刚创建好的镜像

❯ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
go-web-server       latest              82ed8c959e06        21 minutes ago      377MB

最后创建新的容器并运行该web服务器

docker run -p 8080:8081 -it go-web-server
  • -p 8080:8081 - 宿主端口8080映射到容器端口8081
  • -it
    • -i, --interactive, Keep STDIN open even if not attached
    • -t, Allocate a pseudo-TTY
  • go-web-server - 镜像名称

我们也可以把-it换成-d让容器在后台运行

docker run -p 8080:8081 -d go-web-server

之后可以通过docker kill来删除

docker kill eb8ad129e22e

eb8ad129e22e是container id, 可以通过docker ps获取当前运行中的容器

❯ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
eb8ad129e22e        go-web-server       "/app/web-server"   4 seconds ago       Up 3 seconds        0.0.0.0:8080->8081/tcp   loving_merkle

docker ps -a查看所有容器, 包括已经不在运行的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值