版权声明:自由转载-非商用-保持署名,听说看完点赞的人都挺帅。QQ交流群:865061230 https://blog.csdn.net/Sirius_hly/article/details/83794826
一.准备工作
这里以两个项目为例:
micro-servive-client
micro-servive-server
这里配置方面需要注意,服务提供者的host名称为server的镜像名,否则服务无法向注册中心注册。
eureka:
client:
serviceUrl:
# server服务端镜像名
defaultZone: http://server:8761/eureka/
把项目打包为jar包,然后上传到linux服务器。
二.编译镜像
1.编写server的Dockerfile
FROM java:8
VOLUME /tmp
ADD server.jar /app.jar
EXPOSE 8761
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
# docker build -t server .
2.编写client的Dockerfile
FROM java:8
VOLUME /tmp
ADD client.jar /app.jar
EXPOSE 8762
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
构建镜像
# docker build -t client .
三.运行服务
3.1.依次以docker命令方式运行
为了使所有容器在同一个网络内能够相互访问,首先创建一个网桥
# docker network create -d bridge micro
运行mysql
# docker volume create mysql_vol
# docker run -it --rm --name mysql -v mysql_vol:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=roof -p 3306:3306 -d --network micro mysql
运行server
# docker run --name server -d -p 8761:8761 --network micro server
运行client
# docker run --name client -p 8762:8762 -d --network micro client
3.2.通过docker-compose.yml方式运行
当服务非常多的时候,一个一个地启动会非常麻烦,我们可以通过编写docker-compose.yml文件,直接命令启动所有的容器。
1.编写docker-compose.yml文件
version: '2'
services:
mysql:
image: mysql
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: roof
ports:
- "3306:3306"
volumes:
- mysql_vol:/var/lib/mysql
networks:
- micro
server:
image: server
container_name: server
ports:
- "8761:8761"
networks:
- micro
client:
image: client
container_name: client
ports:
- "8762:8762"
depends_on:
- mysql
- server
networks:
- micro
networks:
micro:
driver: bridge
volumes:
mysql_vol:
2.启动docker-compose运行项目
# docker-compose up -d
四.通过docker-compose.yml直接编排和运行项目
docker-compose.yml也可以直接构建镜像,然后运行,跳过第二步,根据上传的jar直接使用docker-compose.yml构建镜像。
1.修改docker-compose.yml文件,其他不变
version: '2'
services:
mysql:
image: mysql
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: roof
ports:
- "3306:3306"
volumes:
- mysql_vol:/var/lib/mysql
networks:
- micro
server:
image: server
build:
context: ./server
dockerfile: ./Dockerfile
container_name: server
ports:
- "8761:8761"
networks:
- micro
client:
image: client
build:
context: ./client
dockerfile: ./Dockerfile
container_name: client
ports:
- "8762:8762"
depends_on:
- mysql
- server
networks:
- micro
networks:
micro:
driver: bridge
volumes:
mysql_vol:
改动的关键代码如下
build:
context: ./client
dockerfile: ./Dockerfile
1.build是构建镜像的命令
2.context是构建的路径
3.dockerfile是dockerfile的路径,相对于构建路径。
比如
2.在docker-compose.yml文件目录下执行命令构建和编排镜像
# docker-compose up -d