Docker $ 專案部署 :Docker 部署微服務 + Mysql
阿新 • • 發佈:2018-11-29
一.準備工作
這裡以兩個專案為例:
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