iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
1
DevOps

就是「懶」才更需要重視DevOps系列 第 7

Day7 容器世界該如何彼此溝通

從「虛擬機」轉戰到容器環境時,最容易產生的疑問是容器之間該如何溝通,其實就跟「虛擬機」的環境一樣,透過 IP 或者 URL 的 DNS 解析,指到對應的「虛擬機」即可溝通。

Docker Container 也是一樣,每次產生一個容器或者重新生成容器都會對應到一個浮動 IP,當Container 移除後 IP 會立即釋放,因此不建議透過 IP 溝通,而是應該採用容器名稱(可以想像成 URL 的 DNS 解析),來達到彼此溝通,以下會示範該如何讓容器之間彼此互相溝通。

  • Redis + RedisAdmin
version: '3.1'

services:
  redis6379:
    image: redis:alpine
    container_name: Test_6379
    restart: always
    ports: 
      - 6379:6379

  redis-admin:
    image: erikdubbelboer/phpredisadmin
    container_name: redisAdminer
    restart: always
    ports:
        - 8080:80
    volumes: 
      - ./config.inc.php:/src/app/includes/config.inc.php

執行完 docker-compose up -d 後在開啟 RedisAdmin 就可以看見 RedisAdmin 已經與 Test_6379 完成連線。

version: '3.1'

services:
  db:
    image: mysql:5.6
    container_name: db
    # DB型別為utf8mb4 ...
    command: ['--character-set-server=utf8', '--collation-server=utf8_unicode_ci', --default-authentication-plugin=mysql_native_password]
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: qwe1234
      MYSQL_DATABASE: GoAdmin

  adminer:
    image: adminer
    container_name: adminer
    restart: always
    ports:
      - 8888:8080
  • 伺服器(容器名稱):db-service
  • 帳號: root
  • 密碼: qwe1234
  • 資料庫: Test


補充解釋一下,由於兩個 Container 服務本身是撰寫在同一支 docker-compose.yml ,所以當容器被建立起來時,網段服務是相同的,如同下方圖片:

但是總是會碰到 container 撰寫於不相同的 docker-compose.yml,這時候就必須透過指定網路的方式,達到網段一致,才可以讓容器間可以溝通,明天的內容將會示範不同yml檔,也可以讓容器彼此都能溝通範例。


上一篇
Day6 Docker-Composr 與 Docker Command 差異
下一篇
Day8 不同yml檔,也可以讓容器彼此都能溝通
系列文
就是「懶」才更需要重視DevOps30

尚未有邦友留言

立即登入留言