• 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: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:ProjectQingGoQR> 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:ProjectQingGoQR> 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

  • 相关阅读:
    ListView -————不能不说的秘密
    良好的开端是成功的第一步———构建程序
    你所不知道的windows窗体
    数据库查询终结版2———分组——连接
    数据库的终结版查询————你想知道吗?
    《官神》浏览闲看笔记
    坚信梦想,奋勇前进!____OS小题狂刷2333
    众里寻他千百度,蓦然回首,却见写者优先算法,她在书本寂静处!
    生产消费问题扩展——三个并发进程R,M,P和一个共享的循环缓冲区B的并发控制
    多生产者-多消费者-环形缓冲区问题
  • 原文地址:https://www.cnblogs.com/yesicoo/p/11174373.html
Copyright © 2020-2023  润新知