Golang Web应用 创建docker镜像笔记(win 平台)
记录的是 本地编译好了再创建容器镜像的方法 ,这样子生成的镜像文件比较小,方便分发部署
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:latestMAINTAINER yesicoo yesicoo@163.comADD 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 SIZEyesicoo/goqrs latest b547d669b760 22 seconds ago 23.2MBalpine 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
转载于:https://www.cnblogs.com/yesicoo/p/11174373.html
Golang Web应用 创建docker镜像笔记(win 平台)相关推荐
- golang云原生之docker镜像
随着云计算和容器化技术的发展,越来越多的应用程序开始采用云原生架构.在这种架构中,容器成为了最常见的应用程序部署方式,而Docker则是最流行的容器技术之一.Golang作为一种快速.高效和可靠的编程 ...
- 使用IDEA创建Docker镜像,Docker容器,并发布项目
文章目录 回顾 Docker相关文件及目录 目录结构 与Docker相关的部分源码 编辑IDEA项目配置文件 拉取镜像 配置Docker镜像与容器 启动并访问项目 启动项目 访问项目 注意问题 文件类 ...
- docker 仓库镜像 替换_自己动手创建 Docker 镜像并分享到镜像仓库,容器引擎的用途越来越广泛!...
↑ 点击上面 "时代Java"关注我们,关注新技术,学习新知识! 前面在公众号里讲过Docker安装和基本用法和概念,新来的小伙伴可以先去学习一下: docker yum快速安装和 ...
- 动手创建docker镜像
动手制作docker镜像 一.docker镜像的分层 二.docker镜像的创建 (一).docker镜像 (二).docker镜像的创建方法 三.基于已有镜像创建 四.基于本地模板创建 五.基于Do ...
- 通过Dockerfile创建docker镜像
创建镜像三种方法 Docker镜像创建方法有三种,分别为基于已有镜像创建.基于本地模板创建以及基于Dockerfile创建. 通过Dockerfile创建镜像 这里主要记录下基于Dockerfile创 ...
- Liunx下创建Docker镜像
docker安装 见 https://blog.csdn.net/chijiansong/article/details/122324750?spm=1001.2014.3001.5501 其他doc ...
- Docker镜像的多平台架构支持
2019独角兽企业重金招聘Python工程师标准>>> Docker 官方镜像现在支持多平台架构 Docker Engine在2017年取得了很大的进展,社区版和企业版进行分开,支持 ...
- 创建docker镜像的两种方式
文章目录 前言 第一种方式: 通过docker commit 创建镜像 通过Dockerfile构建 前言 通过docker run -it centos:7 运行的容器之中是没有vim的 这里我们创 ...
- .Net Core创建Docker镜像
1..Net Core项目[Lails.Server.Demo]发布到目录下Lails.Server.Demo\bin\Release\netcoreapp2.1\publish 2.上面目录下新建文 ...
- Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较
1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这 ...
最新文章
- 走向.NET架构设计—第三章—分层设计,初涉架构
- Chrome用户请尽快更新:谷歌发现两个严重的零日漏洞
- 使用Amoeba实现MySQL读写分离详细步骤(推荐的方式)
- python中split_python中split()和split(' ')的区别
- Visual Studio 2015上安装Entity Framework Power Tools
- python3 tkinter
- [Nodejs原理] 核心库Libuv入门(Hello World篇)
- Lab1--关于安装JUnit的简要描述
- 码农の带娃绝技:TensorFlow+传感器,200美元自制猜拳手套
- 06 SQL执行计划
- 数据结构算法题整理2
- 软件开发版本号命名规则
- 基于Java Web的图书管理系统
- 快狐未能连接服务器,航海王强者之路好友福袋开启详细介绍_快狐快狐视频app...
- Pcb课程设计2(GD32E230核心板)
- 中医是如何辩证出脾胃湿热的?
- 清理桌面状态下鼠标右键“打开好桌道壁纸”选项
- win11安装后黑屏怎么解决
- java异常类关键字_Java中的异常处理关键字是什么?
- 数据嗨客 | 第1期
热门文章
- C#等同于正则表达式的写法
- JavaScript-遍历数组
- 【离散数学2】代数系统趣题
- HTML中的select只读
- 通过HTTP协议发送远程消息
- hibernateTemplate.find或hibernateTemplate.save()执行操作没有反应,但是有sql语句
- 【笔记】Yale博弈论第一课
- C++(多态实现原理)函数重写,重载,重定义
- $.ajax的回调function中的this与 element-ui的this.$alert冲突问题解决
- python支持向量机回归_Python机器学习之支持向量机——非线性SVC