我们打包我们的京淘项目,将其打为jar包后使用,这里只导入前5个项目即可:
修改2,3,4,5项目的yml配置,添加相应配置,使用ip注册
eureka:
instance:
prefer-ip-address: true
按项目顺序执行:
创建四个空文件夹,将2,3,4,5四个项目的jar文件复制到四个文件夹中:
将 centos7-docker-image.gz
复制到服务器并导入
cat <<EOF > Dockerfile
FROM centos:7
ADD jdk-8u212-linux-x64.tar.gz /opt/
ENV JAVA_HOME=/opt/jdk1.8.0_212 \
PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
ENTRYPOINT bash
EOF
cd ~/
docker build -t centos7-jdk8:v1 jdk/
进入eureka目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)
cat <<EOF > Dockerfile
FROM centos7-jdk8:v1
COPY sp05-eureka-0.0.1-SNAPSHOT.jar /opt/
ENTRYPOINT ["java", "-jar", "/opt/sp05-eureka-0.0.1-SNAPSHOT.jar"]
CMD ["--spring.profiles.active=eureka1", "--server.port=2001"]
EOF
构建镜像
cd ~/
docker build -t sp-eureka:v1 eureka/
进入item目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)
cat <<EOF > Dockerfile
FROM centos7-jdk8:v1
COPY sp02-itemservice-0.0.1-SNAPSHOT.jar /opt/
ENTRYPOINT ["java", "-jar", "/opt/sp02-itemservice-0.0.1-SNAPSHOT.jar"]
EOF
构建镜像
cd ~/
docker build -t sp-item:v1 item/
进入user目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)
cat <<EOF > Dockerfile
FROM centos7-jdk8:v1
COPY sp03-userservice-0.0.1-SNAPSHOT.jar /opt/
ENTRYPOINT ["java", "-jar", "/opt/sp03-userservice-0.0.1-SNAPSHOT.jar"]
EOF
构建镜像
cd ~/
docker build -t sp-user:v1 user/
进入docker目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)
cat <<EOF > Dockerfile
FROM centos7-jdk8:v1
COPY sp04-orderservice-0.0.1-SNAPSHOT.jar /opt/
ENTRYPOINT ["java", "-jar", "/opt/sp04-orderservice-0.0.1-SNAPSHOT.jar"]
EOF
构建镜像
cd ~/
docker build -t sp-order:v1 user/
正常情况下,我们的镜像文件需要放到仓库上,当需要启动时,我们的服务器连接仓库进行镜像下载,然后进行启动;因为我们没有配置仓库,所以这里手动复制容器到服务器;
docker save \
centos7-jdk8:v1 \
sp-eureka:v1 \
sp-item:v1 \
sp-user:v1 \
sp-order:v1 \
| gzip > img.gz
# 将文件复制到 192 和 193
scp img.gz 192.168.64.192:/root/
scp img.gz 192.168.64.193:/root/
# 在 192 和 193 执行导入 docker load -i img.gz
ssh 192.168.64.192 'docker load -i /root/img.gz'
ssh 192.168.64.193 'docker load -i /root/img.gz'
# 查看 192 和 193 的镜像列表
ssh 192.168.64.192 'docker images'
ssh 192.168.64.193 'docker images'
用rs部署容器, 先创建rs部署描述文件,分别使用俩个控制器来分别创建俩个不同配置的Eureka;
cat <<EOF > eureka1-rs.yml
apiVersion: apps/v1 # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet # 资源类型
metadata:
name: eureka1 # RS 命名为 eureka1
spec:
replicas: 1 # pod 副本数量
selector:
matchLabels: # 使用 label 选择器
app: eureka1 # 选取标签是 "app=eureka1" 的pod
template:
metadata:
labels:
app: eureka1 # 为创建的pod添加标签 "app=eureka1"
spec:
containers:
- name: eureka1 # 容器名
image: sp-eureka:v1 # 镜像
ports:
- containerPort: 2001 # 容器暴露的端口
protocol: TCP
EOF
cat <<EOF > eureka2-rs.yml
apiVersion: apps/v1 # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet # 资源类型
metadata:
name: eureka2 # RS 命名为 eureka2
spec:
replicas: 1 # pod 副本数量
selector:
matchLabels: # 使用 label 选择器
app: eureka2 # 选取标签是 "app=eureka2" 的pod
template:
metadata:
labels:
app: eureka2 # 为创建的pod添加标签 "app=eureka2"
spec:
containers:
- name: eureka2 # 容器名
image: sp-eureka:v1 # 镜像
args: ["--spring.profiles.active=eureka2", "--server.port=2002"]
ports:
- containerPort: 2002 # 容器暴露的端口
protocol: TCP
EOF
k create -f eureka1-rs.yml
k create -f eureka2-rs.yml
这里我们只暴露一个eureka服务器进行测试
cat <<EOF > eureka1-svc.yml
apiVersion: v1
kind: Service
metadata:
name: eureka1
spec:
type: NodePort # 在每个节点上开放访问端口
ports:
- port: 2001 # 集群内部访问该服务的端口
targetPort: 2001 # 容器的端口
nodePort: 30123 # 外部访问端口
selector:
app: eureka1
EOF
cat <<EOF > eureka2-svc.yml
apiVersion: v1
kind: Service
metadata:
name: eureka2
spec:
type: NodePort # 在每个节点上开放访问端口
ports:
- port: 2002 # 集群内部访问该服务的端口
targetPort: 2002 # 容器的端口
nodePort: 30124 # 外部访问端口
selector:
app: eureka2
EOF
k create -f eureka1-svc.yml
k create -f eureka2-svc.yml
部署后访问测试:
cat <<EOF > item-rs.yml
apiVersion: apps/v1 # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet # 资源类型
metadata:
name: item # RS 命名为 item
spec:
replicas: 1 # pod 副本数量
selector:
matchLabels: # 使用 label 选择器
app: item # 选取标签是 "app=item" 的pod
template:
metadata:
labels:
app: item # 为创建的pod添加标签 "app=item"
spec:
containers:
- name: item # 容器名
image: sp-item:v1 # 镜像
EOF
k create -f item-rs.yml
cat <<EOF > user-rs.yml
apiVersion: apps/v1 # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet # 资源类型
metadata:
name: user # RS 命名为 user
spec:
replicas: 1 # pod 副本数量
selector:
matchLabels: # 使用 label 选择器
app: user # 选取标签是 "app=user" 的pod
template:
metadata:
labels:
app: user # 为创建的pod添加标签 "app=user"
spec:
containers:
- name: user # 容器名
image: sp-user:v1 # 镜像
EOF
k create -f user-rs.yml
cat <<EOF > order-rs.yml
apiVersion: apps/v1 # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet # 资源类型
metadata:
name: order # RS 命名为 order
spec:
replicas: 1 # pod 副本数量
selector:
matchLabels: # 使用 label 选择器
app: order # 选取标签是 "app=order" 的pod
template:
metadata:
labels:
app: order # 为创建的pod添加标签 "app=order"
spec:
containers:
- name: order # 容器名
image: sp-order:v1 # 镜像
EOF
k create -f order-rs.yml
cat <<EOF > order-svc.yml
apiVersion: v1
kind: Service
metadata:
name: order
spec:
type: NodePort # 在每个节点上开放访问端口
ports:
- port: 8201 # 集群内部访问该服务的端口
targetPort: 8201 # 容器的端口
nodePort: 30201 # 外部访问端口
selector:
app: order
EOF
k create -f order-svc.yml
对外暴露服务后,我们在集群内部直接调用订单服务,通过订单调用商品等服务;