方案分析:
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