iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0
自我挑戰組

自我學習Docker的30天奇幻旅程系列 第 20

Day20 MongoDB with Docker and Docker secrets

今天來學習如何在Docker內使用MongoDB,以及Docker secrets。

建立MongoDB

要使用Docker建立MongoDB首先要取得映像檔,直接去Docker hub查看映像檔的版本,因為只是要學習直接用latest版本

docker pull mongo

取得映像檔之後就可以開始建置,但是在此之前先建立一個儲存資料的地方,因此先建立一個資料夾。

mkdir mongodb

接下來就能建置mongoDB(mongodb預設的port為27017),如果不需要公開可以將-p 27017:27017移除

docker run -it -v mongodb:/data/db -p 27017:27017 --name mongodb -d mongo

建立好之後可以使用logs查看container的log,有新刪修也會顯示在上面

docker logs mongodb

建立好mongodb後我們可以使用exec連接到container以使用mongodb的指令

$ docker exec -it mongodb bash
root@<container ID>:/#

Docker secrets

既然學到了MongoDB就一起來學Docker secrets,當我們在Docker swarm建立MongoDB的時候需要配置username跟password,但是總不可能直接將其寫在配置檔中,其他機敏資料還包含SSH私鑰、證書等等,因此Docker有一套存放機敏資料的方法。這些機敏資料存在Docker Swarm處於靜止時會是加密狀態,只有被授權的服務且處於運行中才可以訪問。

加密的文件預設會儲存在/run/secrets/<secret_name>

接下來讓我們來學習如何使用Docker secrets
如官方的範例,我們先用secret指令建立my_secret_data

docker secret create my_secret_data -

再使用--secretflag指定要使用的secret檔案

docker service  create --name redis --secret my_secret_data redis:alpine

建置好redis也可以透過exec查看使用的secret,顯示就會是你剛剛設定的secret內容

docker container exec $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data

接下來讓我們實用secret至mongoDB

MongoDB with secret

首先建立mongodb_root_username,並使用vim編輯器輸入username

$ touch mongodb_root_username
$ vim mongodb_root_username
$ docker secret create mongodb_root_username ./mongodb_root_username

再建立mongodb_root_password,並使用vim編輯器輸入password

$ touch mongodb_root_password
$ vim mongodb_root_password
$ docker secret create mongodb_root_password ./mongodb_root_password

建立好之後可以使用ls查看所有的secret設置

$ docker secret ls
ID                          NAME                    DRIVER              CREATED              UPDATED
0r8bsldt0uh0tf5lczgh6k8ky   mongodb_root_password                       About a minute ago   About a minute ago
ufbpe94tzxpixpm6fhhdd9ctm   mongodb_root_username                       About a minute ago   About a minute ago

最後配置好swarm YAML檔,就可以使用拉。

version: "3.8"
services:
  mongodb:
    build: ./mongodb
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_PASSWORD_FILE: /run/secrets/mongodb_root_password
      MONGO_INITDB_ROOT_USERNAME_FILE: /run/secrets/mongodb_root_username
      MONGO_INITDB_DATABASE: database01
      MONGO_DATABASE: todolist
    secrets:
      - mongodb_root_password
      - mongodb_root_username
secrets:
  mongodb_root_password:
    external: true
  mongodb_root_username:
    external: true

參考文獻:
Manage sensitive data with Docker secrets
Docker hub MongoDB


上一篇
Day19 Docker Hub學習與實作
下一篇
Day21 建置自己的第一個Docker sftp
系列文
自我學習Docker的30天奇幻旅程24

尚未有邦友留言

立即登入留言