记录的是 本地编译好了再创建容器镜像的方法 ,这样子生成的镜像文件比较小,方便分发部署

win 平台需要设置golang交叉编译 生成linux可执行文件

CMD下:

Set GOOS="linux"
Set GOARCH="amd64"

PowerShell下:

$env:GOOS="linux"
$env:GOARCH="amd64"

这两个参数吃常用选项:
GOARCH 目标平台(编译后的目标平台)的处理器架构(386、amd64、arm)

GOOS 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows)

然后再编译 执行: go build .

此时会生成linux下的可执行文件

下一步,在项目根目录下编写 Dockerfile。

FROM alpine:latest

MAINTAINER yesicoo yesicoo@163.com

ADD GoQRS /usr/local/bin/

ENTRYPOINT ["/usr/local/bin/GoQRS"]

第一行:由于我已经编译好了linux上的可执行文件 所以我只需要pull个最小的linux镜像就可以直接运行了 这个镜像很小 只有6MB。

第二行:设置镜像的创作者和邮箱

第三行:将本地文件拷贝至即将创建好的docker容器镜像内 GoQRS为本次项目生成的Linux平台可执行文件 拷贝到 /usr/local/bin 目录下

第四行:配置容器镜像启动时的执行文件

这样,一份简单的文件就写完成,接下来开始创建这个容器镜像:
执行:docker build -t yesicoo/goqrs . (后面这个点不能丢)

yesicoo/goqrs 这个是生成的镜像名称(tag) 可以随便取 要小写

执行过程:

PS C:\Project\Qing\GoQR> docker build -t yesicoo/goqrs .
Sending build context to Docker daemon 17.66MB
Step 1/4 : FROM alpine:latest
latest: Pulling from library/alpine
050382585609: Pull complete
Digest: sha256:6a92cd1fcdc8d8cdec60f33dda4db2cb1fcdcacf3410a8e05b3741f44a9b5998
Status: Downloaded newer image for alpine:latest
---> b7b28af77ffe
---> Running in 0d7880f26332
Removing intermediate container 0d7880f26332
---> 2b333ea3cd0c
---> bb6bfec71739
---> Running in 7fa33b332550
Removing intermediate container 7fa33b332550
Successfully built b547d669b760
Successfully tagged yesicoo/goqrs:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
PS C:\Project\Qing\GoQR> docker images REPOSITORY TAG IMAGE ID CREATED SIZE
yesicoo/goqrs latest b547d669b760 22 seconds ago 23.2MB
alpine latest b7b28af77ffe 3 hours ago 5.58MB

因为是在win下面生成创建的 所以会有个平台目录权限的提示,这个视情况判断是否重要。

上面的执行过程中还有一个坑!!!

因为我是在win下进行操作的,安装的docker也是官方的win平台的 docker desktop。所以安装后默认生成后的Docker主机是win平台

默认情况下执行Build命令时会提示:

latest: Pulling from library/alpine
no matching manifest for unknown in the manifest list entries

此时需要切换到linux平台:右击小鲸鱼托盘图标 -> 选择 Switch to Linux containers -> 弹出切换框 确认选择 
等待重启执行成功后 再执行命令 就能成功pull alpine镜像 进行创建了 ,也就会有上面的平台目录权限的提示。

接下来 执行创建好的这个镜像

docker run -i -d --name=goqrs -p 8080:8080 yesicoo/goqrs

-- name 是给执行的容器起个名字

-p 是本地端口和容器内执行程序的端口映射

最后的参数是上面创建的时候 输入的tag。出现一串字符串ID 那就启动成功了 可以访问端口进行测试

docker ps -a  查看所有容器 
docker logs -f <name> 查看输出日志

相关知识点文章:

Dockerfile: https://www.cnblogs.com/lighten/p/6900556.html
Golang交叉编译:https://studygolang.com/articles/14376

Golang Web应用 创建docker镜像笔记(win 平台)的更多相关文章

  1. Docker笔记--镜像&基于GO项目创建Docker镜像

    Docker笔记--镜像&基于GO项目创建Docker镜像 核心概念 Doker镜像--包含一个基本的操作系统运行环境和应用程序,镜像是创建Docker容器的基础. Docker容器--如果把 ...

  2. 基于gin的golang web开发:docker

    Golang天生适合运行在docker容器中,这得益于:Golang的静态编译,当在编译的时候关闭cgo的时候,可以完全不依赖系统环境. 一些基础 测试容器时我们经常需要进入容器查看运行情况,以下命令 ...

  3. Spring Boot 创建 Docker 镜像

    随着越来越多的组织转向容器和虚拟服务器,Docker正成为软件开发工作流程中一个更重要的部分.为此,Spring Boot 2.3中最新的功能之中,提供了为Spring Boot应用程序创建 Dock ...

  4. 基于Dockerfile创建docker镜像

    0.先创建一个文件夹img mkdir img 1.Linux上新建3个文件 2.文件内容分别写入 (1)Dockerfile中 # 基于的基础镜像centos FROM centos # 维护该镜像 ...

  5. Mycat 镜像-创建 Docker 镜像

    将 Mycat-server 创建到镜像,使其能够进行容器化部署,我们需要创建 Dockerfile 并在文件中安装其依赖项,使用 centos 做为 base 镜像,并安装 jdk 依赖即可,因此创 ...

  6. golang应用打包成docker镜像

    golang编译的应用是不需要依赖其他运行环境的,那么为什么还需要打包成docker镜像呢?当需要附带配置和日志等文件时可以更方便的移植和运行,下面介绍从dockerfile编译成镜像. 在项目根目录 ...

  7. 03-docker入门-创建 docker 镜像

    方法1:从运行的容器创建方法2:编写 DockFile 文件创建 方法1: 打包镜像 docker commit -m "Test a change" 610 ubuntu:tes ...

  8. 创建docker镜像,初始化jdk8与tomcat环境

    一.创建Dockerfile文件: 创建Dockerfile文件,下载jdk与tomcat放在Dockerfile同目录下. Dockerfile文件内容: FROM Ubuntu:14.10 MAI ...

  9. .Net Core(完) 创建Docker镜像

    使用Docker可以在操作系统上分出多个独立的区域(容器/Container),各个容器之间基本隔离,且可以有自己单独的系统配置.软件等,各个容器之间的软件基本不会互相干扰.Docker上配置好的容器 ...

随机推荐

  1. Pandas | 11 字符串函数

    在本章中,我们将使用基本系列/索引来讨论字符串操作.在随后的章节中,将学习如何将这些字符串函数应用于数据帧(DataFrame). Pandas提供了一组字符串函数,可以方便地对字符串数据进行操作. ...

  2. Ubuntu安装笔记

    Ubuntu安装笔记 前言 先后在台式电脑&奇葩的SurfaceLaptop上装了Ubuntu18.04LTS 收获了去多经验,浪费了去多时间 为了让下次更加的方便, 写一篇博客记录一下 安装 ...

  3. 洛谷 P2996 [USACO10NOV]拜访奶牛Visiting Cows

    P2996 传送门 题意: 给你一棵树,每一条边上最多选一个点,问你选的点数. 我的思想: 一开始我是想用黑白点染色的思想来做,就是每一条边都选择一个点. 可以跑两边一遍在意的时候染成黑,第二遍染成白 ...

  4. iptables man手册翻译

    概要 iptables [-t table] -[AD] chain rule-specification [options]iptables [-t table] -I chain [rulenum ...

  5. Java判断文件类型

    通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 1. 通过后缀名,如exe,jpg,bmp,rar,zip等等. 2. 通过读取文件,获取文件的Content-type来 ...

  6. dnsperf

    github 地址:https://github.com/DNS-OARC/dnsperf mac安装:brew install dnsperf 参数详解 Dnsperf 支持下面的这些命令行参数: ...

  7. Alpha冲刺(10/10)——2019.5.2

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...

  8. URL中出现了%E2%80%8E(Zero-Width Space)

    下面两个url地址,看起来是一样的,但是粘贴到记事本里会发现一个多出了很长的空格 url: '/secure​/Dishes/GetList', url: '/secure/Dishes/GetLis ...

  9. Delphi支付宝支付【支持SHA1WithRSA(RSA)和SHA256WithRSA(RSA2)签名与验签】

    作者QQ:(648437169) 点击下载➨Delphi支付宝支付             支付宝支付api文档 [Delphi支付宝支付]支持条码支付.扫码支付.交易查询.交易退款.退款查询.交易撤 ...

  10. servlet是一组规范--Servlet是JavaEE规范的一种

    Java Servlet API是Servlet容器和Servlet之间的接U,它定义了Servlet的各种方法, 还定义了Servlet容器传送给Servlet的对象类,其中最重要的是请求对象Ser ...