项目容器化
准备工作
将调用配置文件的路径从绝对路径变成相对路径
将配置文件分发到各个项目当中
编译
如果用go build
生成可执行文件,那么将会产生依赖,不方便偏移,可以使用ldd 文件名
查看依赖
无依赖的编译
sudo CGO_ENABLED=0 GOOS=linux /usr/local/go/bin/go build -a -installsuffix cgo -ldflags '-w' -i -o homeweb-web main.go
- 编译需要在root账户下进行
- 指明cgo工具是否可用的标识在这里表示禁,
CGO_ENABLED=0
- 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows),
GOOS=linux
- 如果没有在root下安装go我们需要使用go的绝对路径进行使用,
/usr/local/go/bin/go build
- 强制重新编译所有涉及的go语言代码包,
-a
- 为了使当前的输出目录与默认的编译输出目录分离,可以使用这个标记。此标记的值会作为结果文件的父目录名称的后缀,
-installsuffix
- 给 cgo指定命令
-ldflags
- 关闭所有警告信息,
'-w'
- 标志安装目标的依赖包,
-i
- 生成程序的命名,
-o
- 编译的main.go地址,.
/main.go
编译srv
如果go的环境就在当前用户下,按下面命令编译即可
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-w' -i -o GetArea-srv main.go
dockerfile的编写
- srv
#依赖镜像
FROM alpine:3.2
#拷贝文件进入镜像
ADD GetArea-srv /GetArea-srv
ADD conf /conf
#启动命令
ENTRYPOINT [ "/GetArea-srv" ]
- web
#依赖镜像
FROM alpine:3.2
#文件拷贝进取
ADD html /html
ADD conf /conf
ADD Ihomeweb-web /IhomeWeb-web
#到根目录
WORKDIR /
#执行命令
ENTRYPOINT [ "/IhomeWeb-web" ]
#端口 22333
EXPOSE 22333
- 编译
docker build -t 镜像名:版本号 dockerfile文件的所在目录
docker-compose的编写
后缀名为.yml,此文件放在与Ihomeweb、GetArea同一路径下,这样找dockerfile路径比较方便。
consul:
#覆盖启动后的执行命令
command: agent -server -bootstrap-expect=1 -advertise-wan=192.168.168.16 -node=node1 -client 0.0.0.0 -ui -bind=0.0.0.0 -join 192.168.168.16
#command: agent -server -bootstrap -rejoin -ui
#-advertise-wan=192.168.110.155 表示公网 或者是大部分网络可以到达的地址
#镜像:镜像名称:版本号
image: consul:latest
#主机名
hostname: "registry"
#暴露端口
ports:
- "8300:8300"
- "8301:8301"
- "8400:8400"
- "8500:8500"
- "8600:53/udp"
n1:
image: nginx
ports:
- "12580:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
#将配置文件映射到nginx的配置文件位置
container_name: nginx1
#web主页
web:
#覆盖启动后的执行命令
command: --registry_address=192.168.168.16:8500 --register_interval=5 --register_ttl=10 web
#镜像构建的dockerfile文件地址
build: ./IhomeWeb
links:
- consul
ports:
- "12306:22333"
#获取地区
getarea:
#覆盖启动后的执行命令
command: --registry_address=192.168.168.16:8500 --register_interval=5 --register_ttl=10 srv
#镜像构建的dockerfile文件地址
build: ./GetArea
links:
- consul
nginx.conf文件:
upstream microwebs {
#upstream模块
server 192.168.168.16:12306;
#server 192.168.168.16:12307;
}
server {
listen 80;
#提供服务的端口
server_name _;
#服务名称
location / {
proxy_pass http://microwebs;
#反选代理 upstream模块 microwebs
index index.html index.htm;
#默认首页
}
}
注意这里的nginx只是代理web,访问fdfs的是宿主机上的nginx
编写完docker-compose文件后要进行编译
docker-compose build
启动docker-compose
docker-compose up
通过访问12580端口访问nginx所在的80端口,nginx反向代理了12306端口,12306端口映射了web的22333端口,通过在docker-compose中添加web并在nginx.conf中添加内容可以做到负载均衡。
还需要注意的一点是如果使用Redis,需要修改Redis的配置文件,地址改为bind 192.168.168.16
,这样从外部才能访问到,执行sudo service redis stop
,用加载配置文件的方式启动Redis
服务横向扩展
我们可以使用
docker-compose scale 服务名=数量
这样可以设置服务的数量,做到服务可伸缩