目录
将mysql.tar文件上传(可以直接从本机拖到虚拟机)到虚拟机,并加载
自定义构建镜像,基于java:8-alpine镜像,运行java项目
将cloud-demo微服务集群利用DockerCompose部署
将打包好的jar拷贝到提供的cloud-demo文件的每个文件夹里
使用DockerCompose部署DockerRegistry
安装Docker
安装yum工具
更新本地镜像源
安装docker
启动docker
关闭防火墙
关闭
禁止开机启动防火墙
查看防火墙状态:显示dead则说明关闭了
docker启动命令
启动docker
关闭docker
重启docker:
查看docker状态:running为运行中
配置镜像加速
阿里云的镜像加速文档
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
选择自己的系统,然后复制命令到虚拟机中
docker的使用
拉取nginx
查看本地镜像
镜像名字、版本(latest是最新版)、镜像id、官方的创建时间、大小
把镜像文件nginx导出成tar文件
其中:nginx.tar是要保存成的文件、nginx:latest是要被保存的镜像名称以及版本
查看是否导出成功
删除本地镜像nginx:latest
导入镜像文件nginx
拉取redis
把镜像文件redis导出成tar文件
其中:redis.tar是要保存成的文件、redis:latest是要被保存的镜像名称以及版本
删除本地镜像redis:latest
导入镜像文件nginx
创建并运行容器
nginx容器
创建并运行一个nginx容器
docker run:创建并运行一个容器
--name:给容器起一个名字,比如叫做mn
-p:宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
nginx:镜像名称,例如nginx
查看容器运行状态
访问容器
在本机访问虚拟机里的ip加容器端口
查看容器日志
持续更新日志:此时每次访问都会打印日志出现
进入容器修改内容
进入容器nginx
docker exec:进入容器内部,执行一个命令
-it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
mn:要进入的容器的名称
bash:进入容器后执行的命令,bash是一个linux终端交互命令
进入容器nginx内的html文件
修改index文件内容
sed -i 's#需要修改的内容#要修改成的内容#g' 文件名称.后缀名
刷新页面:发现成功修改
退出容器
停止容器mn
启动容器mn
删除容器mn
redis容器
创建并运行一个redis容器,并且支持数据持久化
docker run:创建并运行一个容器
--name:给容器起一个名字,比如叫做mr
-p:宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
redis:镜像名称,例如redis
--appendonly:持久化
进入容器修改内容
进入容器redis
docker exec:进入容器内部,执行一个命令
-it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
mr:要进入的容器的名称
bash:进入容器后执行的命令,bash是一个linux终端交互命令
连接rides
输入数据num
读取数据num
退出容器:需要退出两次
数据卷操作
创建一个数据卷
取名字为html
查看数据卷
查看数据卷的详细信息
html为要查看的数据卷名称
删除数据卷
删除未使用的数据卷
删除某个数据卷
这里删除html
数据卷挂载
创建一个nginx容器,修改里面的内容
创建一个nginx容器
docker run:创建并运行一个容器
--name:给容器起一个名字,比如叫做mr
-p:宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
nginx:镜像名称,例如nginx
-v:冒号前面是文件名称,冒号后面是文件目录
修改该文件的内容
在文件夹里找到该文件,并修改
在本机网页中输入虚拟机ip加端口80
创建mysql容器,将主机目录直接挂载到容器
将mysql.tar文件上传(可以直接从本机拖到虚拟机)到虚拟机,并加载
mysql.tar文件https://pan.baidu.com/s/19YPQmM9GRKE2LpEG3cNLIg?pwd=lvx0
创建目录/tmp/mval/data
创建目录/tmp/myql/lonf
进入 /tmp/myql/lonf ,并把文件拖进来
hmy.cnf文件https://pan.baidu.com/s/1TKN8xzLZ0HP3l2iLMAeoHw?pwd=z9nr
创建并运行MySQL容器
使用本地的数据库软件访问虚拟机的数据库
可以访问成功
自定义构建镜像,基于ubuntu,运行java项目
新建一个空文件夹docker-demo
把三个文件拖进/tmp/docker-demo
三个文件https://pan.baidu.com/s/1JtblpFkgVjUf6H_PA8i0eA?pwd=mqvy
Dockerfile文件内容为:
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
构建docker
-t后面是名称,:后面是版本号,后面空格后有个点:这是路径,因为在当前路径了,所以用点
运行容器
访问页面
自定义构建镜像,基于java:8-alpine镜像,运行java项目
与基于Ubuntu不同的是,dockerfile文件的内容不同,其他都相同
dockerfile文件内容为:
# 指定基础镜像
FROM java:8-alpine
# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
构建docker
-t后面是名称,:后面是版本号,后面空格后有个点:这是路径,因为在当前路径了,所以用点
访问页面
DockerCompose
初始化compose
上传compose文件
把compose文件拖到/usr/local/bin里
compose文件https://pan.baidu.com/s/1SL7aJ3AAzK-1NXjHZVkrTA?pwd=mbe6
修改权限
修改hosts文件
这里的ip不用改
补全命令
将cloud-demo微服务集群利用DockerCompose部署
下载提供的文件
该cloud-demo文件已经编写好了docker-compose的文件夹
cloud-demo文件https://pan.baidu.com/s/1f72g9cSKBSU3Gs3PYF5Azg?pwd=nq8t
把自己的cloud-demo文件的yml文件修改
user-service的bootstrap.yml文件
spring:
application:
name: userservice #服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: nacos:8848 #nacos地址
config:
file-extension: yaml #文件后缀名
user-service的application.yml文件
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://mysql:3306/cloud_user?useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.jdbc.Driver
# application:
# name: userservice #user的微服务名称
# cloud:
# nacos:
# server-addr: localhost:8848 #nacos服务地址
# discovery:
# cluster-name: SH #集群名称
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
#eureka:
# client:
# service-url: #eureka地址信息
# defaultZone: http://127.0.0.1:10086/eureka
pattern:
name: 本地环境local
order-service的application.yml文件
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://mysql:3306/cloud_order?useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice #order的微服务名称
cloud:
nacos:
server-addr: nacos:8848
# discovery:
# cluster-name: HZ #集群名称
## namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
# ephemeral: false #是否为临时实例
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
#eureka:
# client:
# service-url: #eureka地址信息1
# defaultZone: http://127.0.0.1:10086/eureka
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务
ribbon:
eager-load:
enabled: true #开启饥饿加载
clients: #指定饥饿加载的服务
- userservice
#feign:
# client:
# config:
# default: #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
# loggerLevel: FULL #日志级别
feign:
httpclient:
enable: true #支持httpClient的开关
max-connections: 200 #最大连接数
max-connections-per-route: 50 #单个路径的最大连接数
gateway的application.yml文件
server:
port: 10010 #网关端口
spring:
application:
name: gateway #服务名称
cloud :
nacos:
server-addr: nacos:8848 #nacos地址
gateway:
routes: #网关路由配置
- id: user-service #路由id,自定义,只要唯一即可
# uri: http://127.0.0.1:8081 #路由的目标地址 http就是固定地址
uri: lb://userservice #路由的目标地址lb就是负载均衡,后面跟服务名称
predicates: #路由断言,也就是判断请求是否符合路由规则的条件
- Path=/user/** #这个是按照路径匹配,只要以/user/开头就符合要求
# filters:
# - AddRequestHeader=Truth,Itcast is freaking awesome! #添加请求头
- id: order-service #路由id,自定义,只要唯一即可
uri: lb://orderservice #路由的目标地址lb就是负载均衡,后面跟服务名称
predicates: #路由断言,也就是判断请求是否符合路由规则的条件
- Path=/order/** #这个是按照路径匹配,只要以/user/开头就符合要求
# - After=2031-04-13T15:14:47.433+08:00[Asia/Shanghai] #要求访问时间在这个之后
- Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai] #要求访问时间在这个之后
default-filters: #默认过滤器,会对所有的路由请求都生效
- AddRequestHeader=Truth,Itcast is freakina awesome! #添加情求头
globalcors: # 全局的跨域处理
add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
corsConfigurations:
'[/**]':
allowedOrigins: # 允许哪些网站的跨域请求
- "http://localhost:8090"
- "http://www.leyou.com"
allowedMethods: # 允许的跨域ajax的请求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允许在请求中携带的头信息
allowCredentials: true # 是否允许携带cookie
maxAge: 360000 # 这次跨域检测的有效期
将每个为微服务都打包成app.jar
将打包好的jar拷贝到提供的cloud-demo文件的每个文件夹里
我提供的cloud-demo已经把jar包安好了,但是你还是需要重新把自己的jar包覆盖我的,不然可能报错
将加上jar包的cloud-demo文件上传到虚拟机
拖到/tmp中
构建镜像并启动
输入docker-compose logs -f,查看日志,会发现报错。这是因为nacos还未启动就启动了其他的微服务,所以这里重启启动这三个微服务
重新启动
访问网页,发现可以成功
Docker镜像仓库
配置docker信任地址
我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置。
这里的xxx要填虚拟机的ip地址
创建一个yml文件
使用DockerCompose部署DockerRegistry
打开刚刚创建的yml文件,把下面的配置粘贴进去
构建镜像并启动
访问网页,发现成功
在私有镜像仓库推送或拉取镜像
代码文件点击下载https://pan.baidu.com/s/1v78HH8Xm5tlThBIDVqgzMw?pwd=1vjo
上一篇:Gateway网关的配置和使用
下一篇:RabbitMQ的安装和使用