zoukankan      html  css  js  c++  java
  • GO Docker部署与打包实例

    转载:https://segmentfault.com/a/1190000014297111?utm_medium=referral&utm_source=tuicool

    事情是这样的

    一个人程序员,用golang写了个server,写完后...不会部署 : ) 
    是的,这个人就是我... 
    今天真的是要被自己笑死 
    终于有机会在公司项目中使用golang进行开发,整个开发过程相当亢奋!然而...当跟前端小哥哥联调完接口后,小哥哥问我什么时候能给线上地址 
    (一脸懵)忘记还有上线这回事了 
    往往自己业余写的golang项目就直接 go build 然后拖到服务器然后运行一下搞定 
    但是这是公司项目啊!!! 会给你ftp??? 你可以碰到服务器??? (仿佛听到了DBA小哥哥的心声) 
    于是... 我找到了DBA小哥哥,问该如何发布 
    “你直接打包一个rpm或者给个docker吧”

    哈? 
    rpm? 你确定不是npm? 
    docker??? (卧槽,我好像两年前就该看看了) 我还没看过...

    于是乎虚心请教DBA小哥哥,“能麻烦大致跟我讲下这个rpm是怎么个打法吗?” 
    “好啊,你就先……*¥%#¥然后再$%……%%” 
    “哦,好,我回去看看”

    然后

    然后我就回来学起了docker 23333333333 
    好在部门内有个老司机 
    直接就让我上了车

    开车

    首先我们要先down一个docker 
    mac版: https://www.docker.com/docker... 
    能打开mac已经证明会安装了,我们就不再复述了

    安装完成后到启动台里面点一下可爱的小鲸鱼

    clipboard.png

    然后在命令行输入

    $ docker info

    看到一堆乱七八糟的东西输出证明安装成功

    我们需要从镜像市场down一个linux镜像~ 
    https://store.docker.com 搜索 centos 会看到

    clipboard.png
    选择哪个版本完全混眼熟 哈哈哈哈 
    看到具体版本号 在命令行执行

    $ docker pull centos:7.2.1511

    clipboard.png
    Already exists 是因为在写这篇记录之前已经pull过了 哈哈哈

    装好镜像后通过docker images来查看已存在的镜像

    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              7.2.1511            0a2bad7da9b5        5 months ago        195MB  
    

    下面我们来让这个镜像跑起来

    $ docker run -p 8888:80 --name godocker -e ENV="dev" -it 0a2bad7da9b5 /bin/bash
    -p 本机端口号:映射到docker的端口号(当本机的8888请求被访问时会进入到docker的80端口) 
    --name docker实例的名称(想怎么起怎么起) 
    -e docker的环境变量 
    -v 类似于软链,将docker的某个路径映射到本机的实体路径(具体的可以针对性百度哦) 
    -it 后面跟docker image 的id

    敲下回车~ 哎呦进去了! 
    不急不急 我们先退出来

    exit

    赶快 赶快 build一个go server

    $ cd /xxx/xxx/xxx/xxx/xxx/gotest  
    $ touch main.go  
    $ vi main.go  
      package main  
      import "fmt"  
      func main() {
        fmt.Println("hello word")
      }
      :x
    $ go build for linux (当然是伪代码啦)  
    # 会生成一个跟目录同名的可执行文件 gotest
    # 将文件拷贝到docker镜像中
    $ docker cp /Users/wangboyan/development/golang/src/gotest/gotest godocker:/var/www
    # 然后进入docker中查看刚才的gotest是否存在  
    $ docker ps  
    
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
    b2802801c24c        0a2bad7da9b5        "/bin/bash"         14 minutes ago      Up 14 minutes       0.0.0.0:8888->80/tcp   godocker  
    
    docker exec -it b2802801c24c /bin/bash
    # 会发现我们成功进入了docker哦  
    $ cd /var/www
    $ ll
    $ gotest  

    惊不惊喜~意不意外~ 
    完全意料之中... 
    执行以下我们编译好的可执行文件看看

    clipboard.png
    此时 只想呵呵 呵呵 哈哈哈哈哈 
    现在我们来将刚刚的修改 生成新的镜像文件

    # 先退出docker
    exit
    $ docker ps -a
    
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
    b2802801c24c        0a2bad7da9b5        "/bin/bash"         14 minutes ago      Up 14 minutes       0.0.0.0:8888->80/tcp   godocker  

    我们通过commit命令将容器转化为镜像

    $ docker commit -m "myself docker image" -a "holdno" 0a2bad7da9b5 holdno/centos-go:1.0.0  
    # 敲下回车后会得到以下结果 证明成功!
    sha256:554e840711c57bd4d2ede4a29a5c1dff3a711050c421ebfc38090d0f5a358b83  
    # 重新查看镜像信息  
    $ docker images  
    
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    holdno/centos-go    1.0.0               554e840711c5        11 seconds ago      197MB
    centos              7.2.1511            0a2bad7da9b5        5 months ago        195MB

    有没有!生成了新的镜像

    打包(save)

    自己的docker镜像算是做好了(我做啥了?) 
    下面我们来打包这个镜像 
    毕竟DBA小哥哥要的只是个包 
    我们可以使用 save 和 load 方法,前者用来把镜像保存一个tar文件,后台从一个tar文件恢复成一个镜像

    $ docker save -o /Users/wangboyan/development/docker/centos-go.v1.0.0.tar 554e840711c5
    -o :输出到的文件(注意哦,这个路径一定是已经存在的路径!)

    恢复(load)

    # 删除刚刚打包过的镜像
    $ docker rmi 554e840711c5
    $ docker load < /Users/wangboyan/development/docker/centos-go.v1.0.0.tar  
    Loading layer [==================================================>]   2.03MB/2.03MB  
    $ docker images  
    
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              554e840711c5        11 seconds ago      197MB
    centos              7.2.1511            0a2bad7da9b5        5 months ago        195MB

    不知道为什么 REPOSITORY 和 TAG 变成了 none 
    现在我们来启动刚刚导入的镜像

    $ docker run -it 554e840711c5 /bin/bash
    $ cd /var/www  
    $ ll  
    gotest  
    # 有没有! 刚才cp进来的可执行文件还在!(这不是很正常吗)  
    $ ./gotest  
    hello world  
    $

    所以可以直接把 centos-go.v1.0.0.tar 丢给DBA小哥哥了?

  • 相关阅读:
    OO第三次阶段性总结
    OO第二次阶段性总结
    OO第一次阶段性总结
    【软工】提问回顾与个人总结
    【软工】结对编程作业
    【软工】第一次阅读作业
    【软工】第0次个人作业
    oo作业总结(四)
    OO作业总结(三)
    oo作业总结(二)
  • 原文地址:https://www.cnblogs.com/-wenli/p/13195593.html
Copyright © 2011-2022 走看看