MiniMall:Linux環境下的部署(基於Docker Compose)

在這之前,我們學習瞭如何將mini-mall項目基於Docker部署到Linux服務器,我們一個個啓動了項目運行環境所需的容器,比如nginxmysql等等。然後還通過將微服務打包成jar包,使用java -jar命令啓動運行程序。

  • 項目所需的環境

在這裏插入圖片描述

  • 微服務工程

在這裏插入圖片描述

不過話說回來,這麼多的容器和微服務工程,如果一個個手動啓動的話,我感覺要瘋。所以學習使用Docker Compose來部署我們的項目就顯得很有必要了。

1. Docker Compose

Docker Compose是一個編排多容器分佈式部署的工具,提供命令集管理容器化應用的完整開發週期,包括服務構建,啓動和停止。通常來說,使用Docker Compose的步驟:

  1. 利用Dockerfile定義運行環境鏡像。
  2. 使用docker-compose.yml定義組成應用的各服務。
  3. 運行docker-compose up啓動應用。

1.1 安裝Docker Compose

# Compose目前已經完全支持Linux、Mac OS和Windows,在我們安裝Compose之前,需要先安裝Docker。下面我 們以編譯好的二進制包方式安裝在Linux系統中。 
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 設置文件可執行權限 
sudo chmod +x /usr/local/bin/docker-compose
# 查看版本信息 
docker-compose -version

1.2 卸載Docker Compose

# 二進制包方式安裝的,刪除二進制文件即可
rm /usr/local/bin/docker-compose

2. 環境部署

我們項目的環境組件包括:MySQL、Nginx、Redis、MongoDB、RabbitMQ、Seata、Zipkin、Elastic Stack以及各個業務微服務。使用docker-compose來部署環境組件和直接使用docker啓動鏡像容器類似,這裏就不一一敘述,直接看docker-compose.yml是如何配置的即可:

以下./表示的路徑是docker-compose.yml所在的路徑。

微服務工程的jar和Dockerfile可關注公衆號,並回復:mini-mall基於docker-compose部署獲取。

version: '3'

services:
  mysql:
    container_name: dc-mysql
    image: mysql:5.6
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: Anbang713
    volumes:
      - "./env/mysql/conf:/etc/mysql/conf.d"
      - "./env/mysql/data:/var/lib/mysql"
      - "./env/mysql/logs:/logs"
      - "./env/mysql/init:/docker-entrypoint-initdb.d/"
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  nginx:
    container_name: dc-nginx
    image: nginx
    ports:
      - "80:80"
    volumes:
      - "./env/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
      - "./env/nginx/logs:/var/log/nginx"
      - "./env/nginx/html:/usr/share/nginx/html"
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  redis:
    container_name: dc-redis
    image: redis:5.0
    ports:
      - "6379:6379"
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  mongodb:
    container_name: dc-mongodb
    image: mongo
    ports:
      - "27017:27017"
    volumes:
      - "./env/mongodb/db:/data/db"
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  rabbitmq:
    container_name: dc-rabbitmq
    image: rabbitmq:management
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: root
      RABBITMQ_DEFAULT_PASS: Anbang713
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  zipkin:
    container_name: dc-zipkin
    image: openzipkin/zipkin
    ports:
      - "9411:9411"
    environment:
      STORAGE_TYPE: mysql
      MYSQL_DB: mall_zipkin
      MYSQL_USER: root
      MYSQL_PASS: Anbang713
      MYSQL_HOST: server.mall.com
      MYSQL_TCP_PORT: 3306
      RABBIT_ADDRESSES: server.mall.com:5672
      RABBIT_USER: root
      RABBIT_PASSWORD: Anbang713
      RABBIT_QUEUE: zipkin
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  elasticsearch:
    container_name: dc-elasticsearch
    image: elasticsearch:7.6.0
    ports: 
      - "9200:9200"
      - "9300:9300"
    environment:
      discovery.type: single-node
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  kibana:
    container_name: dc-kibana
    image: kibana:7.6.0
    ports:
      - "5601:5601"
    volumes:
      - "./env/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml"
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  filebeat:
    container_name: dc-filebeat
    image: store/elastic/filebeat:7.6.0
    ports:
      - "5044:5044"
    volumes:
      - "./env/elk/filebeat/mini-mall.yml:/usr/share/filebeat/filebeat.yml:ro"
      - "/var/lib/docker/containers:/var/lib/docker/containers:ro"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  registry-server:
    container_name: dc-mall-registry-server
    build: ./servers/registry-server
    ports:
      - "9010:9010"
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  seata:
    container_name: dc-seata-server
    image: seataio/seata-server
    ports:
      - "8091:8091"
    depends_on:
      - registry-server
    environment:
      SEATA_CONFIG_NAME: file:/root/seata-config/registry
    volumes:
      - "./env/seata/conf:/root/seata-config"
      - "./env/seata/logs:/root/logs"
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  config-server:
    container_name: dc-mall-config-server
    build: ./servers/config-server
    ports:
      - "9045:9045"
    depends_on:
      - registry-server
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  gateway-server:
    container_name: dc-mall-gateway-server
    build: ./servers/gateway-server
    ports:
      - "9015:9015"
    depends_on:
      - registry-server
      - config-server
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  basis-provider:
    container_name: dc-mall-basis-provider
    build: ./servers/basis
    ports:
      - "9020:9020"
    depends_on:
      - registry-server
      - config-server
      - seata
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  invest-provider:
    container_name: dc-mall-invest-provider
    build: ./servers/invest
    ports:
      - "9025:9025"
    depends_on:
      - registry-server
      - config-server
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  sales-provider:
    container_name: dc-mall-sales-provider
    build: ./servers/sales
    ports:
      - "9030:9030"
    depends_on:
      - registry-server
      - config-server
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  account-provider:
    container_name: dc-mall-account-provider
    build: ./servers/account
    ports:
      - "9035:9035"
    depends_on:
      - registry-server
      - config-server
      - seata
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"
  product-provider:
    container_name: dc-mall-product-provider
    build: ./servers/product
    ports:
      - "9040:9040"
    depends_on:
      - registry-server
      - config-server
      - seata
    extra_hosts:
      - "manage.mall.com:192.168.1.17"
      - "api.mall.com:192.168.1.17"
      - "server.mall.com:192.168.1.17"

3. Docker圖形化

Docker圖形頁面管理工具常用的有三種:DockerUI 、Portainer 、Shipyard 。DockerUI 是 Portainer 的前身,這三個工具通過docker api來獲取管理的資源信息。平時我們常常對着shell對着這些命令行客戶端,審美會很疲勞,如果有漂亮的圖形化界面可以直觀查看docker資源信息,也是非常方便的。其中這三種圖形化管理工具以Portainer最爲受歡迎,今天我們要使用的也是Portainer。

3.1 拉取鏡像

docker pull portainer/portainer

3.2 創建並啓動容器

docker run -d --name portainerUI -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

3.3 測試

容器啓動成功之後,通過瀏覽器訪問http://ip:9000即可。首次訪問會讓你創建一個初始化的管理員用戶,用戶名默認爲admin,密碼至少8位。我們搭建的是單機版,直接選擇Local,點擊連接即可。

在這裏插入圖片描述

連接成功之後,展示首頁:

在這裏插入圖片描述

容器頁面:

在這裏插入圖片描述

——End——
更多精彩分享,可掃碼關注微信公衆號哦。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章