基于docker镜像,手工部署go项目环境

方案分析:

   1.docker环境部署

   2.go环境部署

   3.go项目部署

   4.测试

1.docker环境配置
1.1 获取一个ubuntu的模板文件

       (1)进入模板镜像网站https://download.openvz.org/template/precreated/

       (2)找到ubuntu模板 ubuntu-16.04-x86_64.tar.gz(178M)

       (3)cat ubuntu-16.04-x86_64.tar.gz | docker import - ubuntu-min
wang@wang:~/Desktop$ cat ubuntu-16.04-x86_64.tar.gz | docker import - ubuntu16.04-min
sha256:b0a014fd4d3f52c7d25e42458a0f421858df6a93b004a1ce388089c5483321bb
wang@wang:~/Desktop$ 
wang@wang:~/Desktop$ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
ubuntu16.04-min                latest              b0a014fd4d3f        8 seconds ago       505MB

#docker import as ubuntu16.04-min
1.2 启动docker容器,容器名叫go-test,并将这个容器中的datashare目录挂载到宿主机的/home/wang/Desktop/myubu/ubuntu-min/目录下

wang@wang:~/Desktop/myubu$ docker run -itd --name go-test -v /home/wang/Desktop/myubu/ubuntu-min/:/datashare ubuntu16.04-min /bin/bash
13b46946a3219d84eca59db0983671dafa0268dbf04572430c2535080e65e803
wang@wang:~/Desktop/myubu$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
13b46946a321        ubuntu16.04-min     "/bin/bash"         About a minute ago   Up About a minute                       go-test

1.3 进入容器

wang@wang:~/Desktop/myubu$ docker exec -it go-test /bin/bash
root@13b46946a321:/# ls
bin  boot  datashare  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@13b46946a321:/# sed
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression=script
                 add the script to the commands to be executed
  -f script-file, --file=script-file
                 add the contents of script-file to the commands to be executed
。。。

2.go环境部署
2.1 基础环境配置,配置国内源

 sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
root@13b46946a321:/#  sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
root@13b46946a321:/# cat /etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/ubuntu xenial main restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu xenial-updates main restricted universe
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner

root@13b46946a321:/# 

#sources.list中全部 archive.ubuntu.com替换成mirrors.ustc.edu.cn
#关于sed的使用:https://www.cnblogs.com/zhangzongjian/p/10708222.html
2.2 更新软件源,安装基本软件
没有成功
apt-get update
apt-get install gcc libc6-dev git vim lrzsz -y

2.3 安装go语言软件,下载go1.10.linux-amd64.tar.gz拷贝到容器中解压
tar -C /usr/local -zxf go1.10.linux-amd64.tar.gz
PS:(或者直接通过共享目录把宿主机的go软件包传进容器中,上面有一个目录的挂载,把tar.gz文件放到了宿主ubuntu-min目录下,所以在容器的datashare目录下,后来也把beego相关文件下载到这里了,因为基本软件安不上。。。)

root@13b46946a321:/# cd datashare/
root@13b46946a321:/datashare# ls
go1.11.4.linux-amd64.tar.gz
root@13b46946a321:/datashare# tar -C /usr/local/ -zxf go1.11.4.linux-amd64.tar.gz

2.4 配置go环境变量

            export GOROOT=/usr/local/go
            export PATH=$PATH:$GOROOT/bin

            export GOPATH=/root/go
            export PATH=$PATH:$GOPATH/bin
root@13b46946a321:~# vim .bashrc  
root@13b46946a321:~# go version
go version go1.11.4 linux/amd64
root@13b46946a321:~# 

3.go项目部署
beego是通过在宿主机上go get到的两个文件夹,然后放到挂载目录下,在容器内copy到相应位置。

root@0144ef14dc76:/datashare# ls
astaxie  beego  go1.11.4.linux-amd64.tar.gz  shiena
root@0144ef14dc76:/datashare# cp -r astaxie/ /root/go/src/github.com
root@0144ef14dc76:/datashare# cp -r shiena/ /root/go/src/github.com
root@0144ef14dc76:/datashare# ls
astaxie  beego  go1.11.4.linux-amd64.tar.gz  shiena
root@0144ef14dc76:/datashare# cd 
root@0144ef14dc76:~# cd go/src/           
root@0144ef14dc76:~/go/src# mkdir myTest
root@0144ef14dc76:~/go/src# cd myTest/
root@0144ef14dc76:~/go/src/myTest# vim test.go
root@0144ef14dc76:~/go/src/myTest# go run test.go 
2019/10/25 04:23:38.813 [I]  http server Running on http://:8080

test.go:

       package main
 
       import "github.com/astaxie/beego"
 
       type MainController struct {
          beego.Controller
       }
 
       func(this *MainController) Get()  {
          this.Ctx.WriteString("hello world\n")
       }
 
       func main()  {
         beego.Router("/",&MainController{})
         beego.Run()
       }
 4.测试

     4.1 新开启一个终端,输入docker inspect go-test 查看这个容器的ip地址:
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "bb7f4ea4da3f202e4b83f47400fbac6fa551f7e77952cd1316a28adb764de1d2",
                    "EndpointID": "2003a19ce7d457a04bcaf18557b16dd6b0518f4208764d982881fe94210fddfb",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null

4.2 如上图可以看到go-test这个容器的ip地址为172.17.0.2,我们打开浏览器输入172.17.0.2:8080
在这里插入图片描述
1.apt-get update之后安装软件仍然报:E: Unable to locate package git

猜你喜欢

转载自blog.csdn.net/u010931295/article/details/102742885