Docker Secret
使用场景:数据库密码不想让人看到
先来查看一下docker secret
使用帮助:
[root@openstack-load1 ~]# docker secret --help
Usage: docker secret COMMAND
Manage Docker secrets
Options:
Commands:
create 从文件或标准输出的内容创建一个secret(密码)
inspect 显示一个或多个secret的详细信息
ls 列出所有的secret
rm 删除一个或多个secret
Run 'docker secret COMMAND --help' for more information on a command.
创建secret
# 用文件的内容创建一个名为my-pw的密码
docker secret create my-pw ./passwd.txt
或
# 用标准输出的内容创建一个名为my-pw-1的密码
echo "admin789" | docker secret create my-pw-1 -
使用secret
命令行用--secret <secret_name>
docker service create -d --secret my-pw --name test busybox sh -c "while true;do sleep 3600;done
**注意: **
--secret my-pw
会在容器内部生成一个以my-pw
为文件名的文件,文件存放路径:/run/secrets/my-pw
,而文件的内容就是创建secret时的明文字符串。
下面用一个创建mysql service的例子展示如何使用secret:
docker service create -d --name mysql --secret my-pw -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/my-pw mysql
通过环境变量
MYSQL_ROOT_PASSWORD_FILE
去指定容器内部存放密码的文件。
在docker-compose.yml中使用serect
version: '3.6'
services:
web:
image: wordpress
ports:
- 9000:80
networks:
- my-net
volumes:
- my-data
secrets:
- my-passwd
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD_FILE: /run/secrets/my-passwd
WORDPRESS_DB_NAME: wordpress
depends_on:
- mysql
deploy:
endpoint_mode: vip
mode: replicated
replicas: 3
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
update_config:
parallelism: 2
delay: 3s
mysql:
image: mysql
networks:
- my-net
secrets:
- my-passwd
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my-passwd
MYSQL_DATABASE: wordpress
volumes:
- my-data:/var/lib/mysql
deploy:
mode: global
placement:
constraints:
- node.role == manager
volumes:
my-data:
networks:
my-net:
driver: overlay
secrets:
my-passwd:
file: ./password.txt
Service更新
需求场景:确保线上业务在不中断的情况下对service进行更新。
更新service的镜像
先创建一个service
docker service create --name web -p 8080:5000 --network demo cgy/flask-demo:1.0
镜像为1.0版本。接下来将web service的镜像更新至2.0
需要先对service进行横向扩展,确保service在更新时,不宕机。
docker service scale web=2
再来更新web service的镜像
docker service update --image gy/flask-demo:2.0 web
更新service的端口
docker service update --publish-rm 8080:5000 --publish-add 8088:5000 web
更多可更新的选项可以通过docker service update --help
查看,
注意:利用docker-compose.yml文件通过docker stack deploy -c docker-compose.yml wordpress
部署的service,需要更新时,可以直接在docker-compose.yml文件中修改需要更新的值。然后再重新docker stack deploy -c docker-compose.yml wordpress
即可更新。
网友评论