Docker Secret加密


Docker Secret

在我們啟動docker或者service需要指定密碼,這種密碼我們有時不想被別人知道,所以可以采用docker secret方式管理。
創建secret可以有兩種方式,一種通過文件創建,一種通過命令行創建
我們在本地創建一個文件passwd

zack1024

接下我們可以通過如下命令創建secret

docker secret create my-pw  passwd

運行后可以看到屏幕輸出如下

qq463dkw4da9s05rwinntmo09

這是一段加密后的數字,接下來我們查看下所有secret

docker secret list

可以看到secret列表

ID                          NAME                DRIVER              CREATED              UPDATED
qq463dkw4da9s05rwinntmo09   my-pw                                   About a minute ago   About a minute ago

為了保護隱私,我們可以將passwd這個文件刪除。
當然也可以通過命令行方式傳入,從而創建secret

echo "zack1024" | docker secret create mysql-root-pw -

接下來我們利用secret創建一些service

docker service create --name se-busybox --secret my-pw busybox sh -c "while true; do sleep 3600; done"

接下來我們查看下跑起來的service 列表

docker service list

可以看到服務列表,docker service ps se-busy的box 查看具體服務,可以看到這個服務運行的節點書和狀態

ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
6xgkpk55tno7        se-busybox.1        busybox:latest      VM-0-9-ubuntu       Running             Running 19 seconds ago

接下來我們在VM-0-9-ubuntu這台機器上執行docker ps 找到se-busybox服務運行的容器

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                               NAMES
23d0dce1b7cf        busybox:latest       "sh -c 'while true; …"   9 minutes ago       Up 9 minutes                                            se-busybox.1.6xgkpk55tno7fi6uiim4am00n

我們進入這個容器,docker exec -it 23d0dce1b7cf sh
在容器里,接下來我們進入這個目錄 cd /run/secrets/

/run/secrets # ls
my-pw
/run/secrets # cat my-pw
zack1024

通過cat my-pw可以看到我們最初設定的密碼。
接下來我們利用secret構建mysql服務

docker service create --name se-db --secret my-pw -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/my-pw mysql

啟動mysql后進入容器內部也可以看到/run/secrets/目錄下有my-pw文件,其內部記錄的就是我們設置的密碼。
我們在容器內部執行

mysql -u root -p

錄入之前設置的密碼, 可以看到連接成功。

通過docker-compose使用secrete

可以通過secrets字段指定要使用的密鑰,這個密鑰必須提前通過docker secret create創建
也可以通過secrets字段單獨指定密鑰名稱,在其子域下指定file關鍵字,就是密碼保存的文件

version: '3.6'
services:

  web:
    image: wordpress
    ports:
      - 8080:80
    secrets:
      - my-pw
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD_FILE: /run/secrets/my-pw
    networks:
      - my-network
    depends_on:
      - mysql
    deploy:
      mode: replicated
      replicas: 3
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      update_config:
        parallelism: 1
        delay: 10s

  mysql:
    image: mysql
    secrets:
      - my-pw
    environment:
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my-pw
      MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-network
    deploy:
      mode: global
      placement:
        constraints:
          - node.role == manager

volumes:
  mysql-data:

networks:
  my-network:
    driver: overlay

secrets:
  my-pw:
    file: ./password

然后我們通過docker stack 啟動服務

docker stack deploy wordpress -c=docker-compose.yml

感謝關注我的公眾號

wxgzh.jpg

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM