1. 程式人生 > >Docker $ 專案部署 :Docker 部署微服務 + Mysql

Docker $ 專案部署 :Docker 部署微服務 + Mysql

一.準備工作

這裡以兩個專案為例:
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

在這裡插入圖片描述