1、服务docker化
部署user-service
- 编写Dockfile文件
#源镜像
FROM golang:1.13
#设置工作目录
WORKDIR $GOPATH/src
RUN mkdir user-service
COPY user-service $GOPATH/src/user-service
#切换工作目录
WORKDIR $GOPATH/src/user-service
RUN mkdir log
#暴露端口
EXPOSE 9090
#最终运行docker的命令
ENTRYPOINT ["nohup","./user-service",">log/log.log", "&"]
- 编写build.sh脚本
#!/bin/bash
rm -rf user-service
go build .
docker build -t mic-user-service -f Dockerfile .
执行build.sh构建镜像
- 编写start.sh脚本
#!/bin/bash
docker stop mic_user_service
docker rm mic_user_service
docker run -p 9090:9090 --name mic_user_service -v /usr/local/docker/micservice/user-service/log:/go/src/user-service/log -d mic-user-service
启动容器 ./start.sh
user-server服务依赖mysql服务,请访问 docker搭建mysql
部署user-edge-service
- 编写Dockfile文件
#源镜像
FROM golang:1.13
#设置工作目录
WORKDIR $GOPATH/src
RUN mkdir user-edge-service
COPY user-edge-service $GOPATH/src/user-edge-service
COPY config.ini $GOPATH/src/user-edge-service
#切换工作目录
WORKDIR $GOPATH/src/user-edge-service
RUN mkdir log
#暴露端口
EXPOSE 9091
#最终运行docker的命令
ENTRYPOINT ["nohup","./user-edge-service",">/dev/null", "&"]
- 编写build.sh脚本
#!/bin/bash
rm -rf user-edge-service
go build .
docker build -t mic-user-edge-service:latest
执行build.sh构建镜像
- 编写start.sh脚本
#!/bin/bash
docker stop mic_user_edge_service
docker rm mic_user_edge_service
docker run -p 9091:9091 --name mic_user_edge_service -v /usr/local/docker/micservice/user-edge-service/log:/go/src/user-edge-service/log -d mic-user-edge-service
启动容器 ./start.sh
- 访问user-edge-service服务测试
使用docker-compose编排容器
上面的方式需要一个一个单独启动容器服务,我们可以是用docker-compose来管理容器
-
安装docker-compose
yum install docker-conpose
-
编写docker-compose.yml
version: '3'
networks:
default:
external:
name: micservice-network
services:
mysql:
image: mysql:5.7
ports:
- 3306:3306
volumes:
- /usr/local/docker/mysql/conf:/etc/mysql
- /usr/local/docker/mysql/logs:/var/log/mysql
- /usr/local/docker/mysql/data:/var/lib/mysql
environment:
- TZ="Asia/Shanghai"
redis:
image: redis:5.0.4
ports:
- 6379:6379
volumes:
- /usr/local/docker/redis/logs:/usr/local/redis/logs
- /usr/local/docker/redis/redis.conf:/etc/redis_default.conf
- /usr/local/docker/redis/data:/data
environment:
- TZ="Asia/Shanghai"
mongo:
image: mongo:latest
ports:
- 27017:27017
volumes:
- /usr/local/docker/mongo/data:/data/db
- /usr/local/docker/mongo/conf/mongodb.cnf:/etc/mongo.conf
environment:
- TZ="Asia/Shanghai"
user-service:
image: mic-user-service:latest
ports:
- 9090:9090
volumes:
- /usr/local/docker/micservice/user-service/log:/go/src/user-service/log
environment:
- TZ="Asia/Shanghai"
user-edge-service:
image: mic-user-edge-service:latest
ports:
- 9091:9091
links:
- user-service
volumes:
- /usr/local/docker/micservice/user-edge-service/log:/go/src/user-edge-service/log
environment:
- TZ="Asia/Shanghai"
- 相关命令
#启动所有服务
docker-compose up -d
#启动某个
docker-compose up user-service -d
# 停止所有容器服务
docker-compose stop
- 访问user-edge-service服务测试
2、服务docker镜像仓库
公有仓库
这里使用阿里云镜像仓库
-
先登录仓库
docker login --username=weylau@xxxx registry.cn-shenzhen.aliyuncs.com
-
标记本地镜像
docker tag mic-user-service:1.0 registry.cn-shenzhen.aliyuncs.com/weylau/mic-user-service:1.0
-
将镜像推向远程仓库
docker push registry.cn-shenzhen.aliyuncs.com/weylau/mic-user-service:1.0
-
修改build.sh构建完镜像直接推送到远程仓库
#!/bin/bash
rm -rf user-service
go build .
docker build -t registry.cn-shenzhen.aliyuncs.com/weylau/mic-user-service:latest -f Dockerfile .
docker push registry.cn-shenzhen.aliyuncs.com/weylau/mic-user-service:latest
私有仓库
通过registry创建
Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了
docker pull registry:2
运行
docker run -d -v /usr/local/docker/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2
标记本地镜像
docker tag mic-user-edge-service:latest localhost:5000/mic-user-edge-service:1.0
push到私有仓库
docker push localhost:5000/mic-user-edge-service:1.0
harbor搭建(适合生产部署)
docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。