热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Golang与Docker结合搭建开发与产品运行环境

前话首先,我们得知道,为什么我们需要使用Docker作为开发与产品运行环境:快速部署(使用Docker启动可以无需任何环境变量的配置,无需其他任何依赖)开发环

前话

首先,我们得知道,为什么我们需要使用 Docker 作为开发与产品运行环境:

  • 快速部署(使用 Docker 启动可以无需任何环境变量的配置,无需其他任何依赖)

  • 开发环境与产品环境一致

我们将在该博文中学到什么:

  • 学会编写 Dockerfile 文件来构建能够重新加载改动的代码(无需重新构建容器)的开发容器与构建直接运行服务的产品环境

  • 这次运行环境搭建会用到共享的空间、pilu/fresh 和构建参数

下面我们开始搭建步骤吧~

开始

  1. 启用命令控制台,输入以下内容:
$ mkdir app
$ cd app
$ touch main.go
  1. 然后编辑main.go文件,代码如下:
package main

import (
    "net/http"

    "github.com/labstack/echo"
)

func main() {

    e := echo.New()

    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello World!")
    })

    e.Start("0.0.0.0:3000")

}
  1. 接着在主要项目目录中添加一个 Dockerfile 文件:
$ touch Dockerfile
FROM golang

ARG app_env
ENV APP_ENV $app_env

COPY . /go/src/github.com/pwcong/app
WORKDIR /go/src/github.com/pwcong/app

RUN go get ./
RUN go build

CMD if [ ${APP_ENV} = production ]; \
    then \
    app; \
    else \
    go get github.com/pilu/fresh && \
    fresh; \
    fi

EXPOSE 3000

解释说明:
* FROM golang 表示基于golang镜像构建,改镜像预装了golang运行环境与设置了环境变量GOPATH
* ARG app_env 表示允许通过传入app_env参数动态构建容器(默认为空字符串)
* ENV APP_ENV $app_env 讲构建时传入的app_env值传递给环境变量APP_ENV,该变量通常用于构建容器
* COPY . /go/src/github.com/pwcong/app 将当前本地路径下的所有文件和文件夹拷贝至容器的GOPATH路径下
* WORKDIR /go/src/github.com/pwcong/app 设置工作路径,后面的命令都将在该工作路径中执行
* RUN ... 执行安装依赖等操作
* CMD ... 通过判断arg_env值执行开发或产品运行操作
* EXPOSE 3000 开放3000端口

构建运行

现在我们构建一个开发环境下的容器,执行以下命令:

$ docker build ./

然后执行以下命令运行容器:

docker run -it -p 3000:3000 -v [project path]:/go/src/github.com/pwcong/app [image id]

image id 可通过执行命令 docker images 获得

如果我们要构建产品运行环境的容器,执行以下命令:

$ docker build ./ --build-arg app_env=production

接着执行一下命运启动:

$ docker run -i -t -p 3000:3000 [image id]

后话

全文参考了Medium上大佬的一篇博文。

鉴于是墙外的英文的文章,我就按照自己的理解搬过来了(。・∀・)ノ,有错轻喷ε=ε=ε=┏(゜ロ゜;)┛


推荐阅读
  • 千万不要错过的后端[纯干货]面试知识点整理 I I
    千万不要错过的后端【纯干货】面试知识点整理IIc++内存管理上次分享整理的面试知识点I,今天我们来继续分享面试知识点整理IIlinuxkernel内核空间、内存管理、进程管理设备、 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 按照之前我对map的理解,map中的数据应该是有序二叉树的存储顺序,正常的遍历也应该是有序的遍历和输出,但实际试了一下,却发现并非如此,网上查了下,发现从Go1开始,遍历的起始节点就是随机了,当然随机 ... [详细]
  • golang 解析磁力链为 torrent 相关的信息
    其实通过http请求已经获得了种子的信息了,但是传播存储种子好像是违法的,所以就存储些描述信息吧。之前python跑的太慢了。这个go并发不知道写的有没有问题?!packag ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
author-avatar
手机用户2602936475
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有