Docker实战 - 将golang工程部署到docker

_叶左左 · · 4793 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

目标功能

使用go语言实现基本http服务 访问 localhost:8080 时能够返回 “hellodocker”

将工程部署到docker,并在后台启动

重点难点

  • dockerfile结构
  • docker网络结构

操作步骤

Go工程

1 在本机新建go工程,目录名为hellodocker

package main

import (
    "fmt"
    "net/http"
)

func indexHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "hello docker")

}

func main() {
    http.HandleFunc("/", indexHandler)
    http.ListenAndServe(":8080", nil)
}

2 编译和执行
3 打开浏览器输入 localhost:8080 当屏幕出现 “hellodocker”说明程序正常

制作docker镜像

1 在工程目录hellodocker下,新建dockerfile文件

FROM golang:latest

MAINTAINER Razil "raymond_2008@yahoo.com"

WORKDIR $GOPATH/src/hellodocker
ADD . $GOPATH/src/hellodocker
RUN go build .

EXPOSE 8080

ENTRYPOINT ["./hellodocker"]

FROM -> 母镜像
MAINTAINER -> 维护者信息
WORKDIR -> 工作目录
ADD -> 将文件复制到镜像中
RUN -> 执行操作(就跟在终端执行语句一样)
EXPOSE -> 暴露端口
ENTRYPOINT -> 程序入口

2 打开终端输入

docker build -t hellodocker .

语句的意思是
docker build ->构建镜像
hellodocker -> 名字为hellodocker
. (点号) -> dockerfile目录为当前目录

如果未使用镜像服务器,比如Daccloud,阿里云等,构建速度会需要较长时间

3 查看docker镜像

在终端中输入

docker images

里面显示了本机所有docker的镜像与其基本信息

4 开启docker(前台方式)

在终端输入

docker run -p 8080:8080 hellodocker

语句意思:

docker run -> 运行docker镜像
-p 8080:8080 -> 将宿主机(也就是本机)的8080端口映射到容器的8080端口,此 处需要先确认本机的8080端口并未被占用,否则将无法开启
hellodocker -> 镜像名(也支持id)

5 开启docker(后台方式)

当在前台开启时候,终端无法进行其他操作,docker支持让容器在后台执行。

在终端输入

docker run -p 8080:8080 -d hellodocker

6 停止docker

停止和退出docker有两种方法,一个是kill另一个是stop
两种的区别是
stop :系统先发送停止信号,有充分的时间(默认10s)完成清理后再发送kill信号让容器退出
kill : 系统直接发送退出信号,让容器强制退出

具体操作: 我们在上一步 docker ps 中看到后台容器的运行情况,里面每个容器都有其独立的container id。 复制需要关闭的容器id 当前hellodocker的id是

83f1e6dffbc2

在终端输入

docker stop 83f1e6dffbc2或docker kill 83f1e6dffbc2

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:_叶左左

查看原文:Docker实战 - 将golang工程部署到docker

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4793 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传