1.请确保已经安装docker-ce,可参考上一篇博客docker的安装和试用
2.日常部署多个服务的项目时,单体部署较为繁琐,引入docker-compose可以解决这一痛点
Linux下需要通过命令下载:
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
如果下载速度较慢,或者下载失败,可以使用我提供的docker-compose文件:
链接:https://pan.baidu.com/s/19x1zLRdCn4apJpiReNJY_g?pwd=f7rc
提取码:f7rc
把docker-compose
上传到/usr/local/bin/
# 修改权限
chmod +x /usr/local/bin/docker-compose
如果这里出现错误,需要修改自己的hosts文件:
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
查看是否安装完成
docker-compose --version
目录结构
每个微服务模块文件夹又分别有一个Dockerfile文件和一个jar包
主要的docker-compose.yml
的配置文件
version: "3.2"
services:
nacos:
image: nacos/nacos-server:1.4.1
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10010"
项目里可以直接用docker-compose
的服务名
作为连接位置
例如boostrap.yml
连接nacos
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
# server-addr: localhost:8848 # Nacos地址
# server-addr: localhost:80 # nginx来反向代理到nacos集群的节点
# server-addr: 120.56.22.33:80 # nacos配置文件来源
server-addr: nacos:8848 # docker-compose的服务名nacos直接来访问
config:
file-extension: yaml # 文件后缀名
例如userservice.yml
连接mysql
server:
port: 8081
#spring:
# application:
# name: userservice #服务名称
# cloud:
# nacos:
# server-addr: 112.74.85.162:18848 #nacos服务地址
# discovery:
## namespace: 0bf0b8e7-6e5f-472e-abd0-9a0b554d76d3 #命名空间dev环境
## cluster-name: HZ #集群的形成,这里的HZ代指杭州
# cluster-name: SH #集群的形成,这里的SH代指上海
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://120.56.22.33:3311/cloud-user?serverTimezone=GMT%2B8
url: jdbc:mysql://mysql:3306/cloud-user?serverTimezone=GMT%2B8 #直接试用docker-compose的服务名
username: root
password: 123456
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
并设置打包名称为app.jar
<dependencies>
dependencies>
<build>
<finalName>appfinalName>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>2.3.9.RELEASEversion>
plugin>
plugins>
build>
然后在父项目的pom管理打包就会每个模块分别打包
去到docker-compose.yml
所在的目录
#打包执行
docker-compose up -d
#查看日志
docker-compose logs -f
#有可能nacos还没启动其他的先运行,所以报错
#可以重启其他几个服务模块
docker-compose restart gateway userservice orserservice
比如docker部署了es,又使用docker-compose部署一个es集群,就会发生所有docker容器,外网都无法访问
猜测是加个docker网络导致的
#重启docker
service docker restart
#再重启docker-compose的服务
#去到docker-compose.yml所在目录
docker-compose restart
#接着在一个一个重启原来纯docker部署的即可解决
docker-compose stop :docker-compose stop
命令将停止运行的容器,但不会删除它们。
docker-compose down: docker-compose down
命令将停止运行的容器,并且会删除已停止的容器以及已创建的所有网络。 我们可以down进一步迈出第一步,并添加-v标记以删除所有卷。这对于通过运行在环境中进行完全重置非常有用docker-compose down -v。
docker-compose start : docker-compose start
启动所有服务
docker-compose restart : docker-compose erstart
重启启所有服务
搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。
官网地址:https://hub.docker.com/_/registry
Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
搭建方式比较简单,命令如下:
docker run -d \
--restart=always \
--name registry \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry
命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。
访问http://YourIp:5000/v2/_catalog
可以查看当前私有镜像服务中包含的镜像
使用DockerCompose
部署带有图象界面的DockerRegistry
,命令如下:
version: '3.0'
services:
registry:
image: registry
volumes:
- ./registry-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
# 如果不支持中文,
- REGISTRY_TITLE=我的私有仓库
- REGISTRY_URL=http://registry:5000
depends_on:
- registry
我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
原有内容前面一行要加逗号哦,
"insecure-registries":["http://192.168.150.101:6660"]
# 重新加载
systemctl daemon-reload
# 重启docker
systemctl restart docker
#创建一个目录来存放该项目吧
mkdir -p /docker/registry-ui
cd /docker/registry-ui
#创建yml文件
touch docker-compose.yml
#把yml内容复制粘贴
#运行
docker-compose up -d
此时输入:192.168.150.101:6660
查看镜像
docker images
推送镜像到私有镜像服务必须先tag,步骤如下:
1.重新tag
本地镜像,名称前缀为私有仓库的地址:192.168.150.101:6660/
#原tag ---->要推送的tag
docker tag nginx:latest 192.168.150.101:6660/nginx:1.0
2.推送镜像
docker push 192.168.150.101:6660/nginx:1.0
3.拉取镜像
docker pull 192.168.150.101:6660/nginx:1.0