在使用docker-compse启动docker容器时,docker-comose.yaml文件可以清楚的查看到详细配置项,这样可以允许你轻松管理配置项,但是有时候对于敏感的配置,例如:数据库密码、认证密码 不能直接显示在配置文件中。此时我们就需要在使用docker-compose隐藏敏感配置项。
演示操作以MySQL8的配置启动为例
version: '3'
services:
mysql:
image: mysql:8.0
container_name: mysql8.0-dev
restart: always
privileged: true
user: root
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
environment:
MYSQL_ROOT_PASSWORD: root#Cn2025
ports:
- 3306:3306
volumes:
- ./mysql:/var/lib/mysql:rw
#- ./conf/my.cnf:/etc/my.cnf:rw
- ./log:/var/log/mysql:rw
- ./mysql-files:/var/lib/mysql-files:rw
- /etc/localtime:/etc/localtime:ro
方式一 使用.env文件设置环境变量
1、在项目的根目录下创建.env文件并定义使用的环境变量
# .env
MYSQL_ROOT_PASSWORD=root#Cn2025
2、修改docker-compose.yaml文件声明环境变量
version: '3'
services:
mysql:
image: mysql:8.0
container_name: mysql8.0-dev
restart: always
privileged: true
user: root
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
ports:
- 3306:3306
volumes:
- ./mysql:/var/lib/mysql:rw
#- ./conf/my.cnf:/etc/my.cnf:rw
- ./log:/var/log/mysql:rw
- ./mysql-files:/var/lib/mysql-files:rw
- /etc/localtime:/etc/localtime:ro
重点修改项为:MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
3、运行docker-compose命令
运行 docker-compose up 命令时,Docker Compose 会自动加载 .env 文件中的环境变量,并将它们应用到启动服务配置中。
docker-compose up -d
注意事项:
□.env 文件不应该被提交到版本控制系统中,因为包含敏感信息。 .env 文件添加到 .gitignore 文件中,以确保它不会被意外提交。
□如果在命令行中定义了与 .env 文件中相同名称的环境变量,命令行中的值将覆盖 .env 文件中的值。
□Docker Compose 会自动加载项目根目录下的 .env 文件。如果要加载指定位置的 .env 文件,可以使用 --env-file 选项:
docker-compose --env-file /path/to/my-env-file up -d
方式二 docker-compose命令传递启动参数
1、在docker-compose.yml声明环境变量
version: '3'
services:
mysql:
image: mysql:8.0
container_name: mysql8.0-dev
restart: always
privileged: true
user: root
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
ports:
- 3306:3306
volumes:
- ./mysql:/var/lib/mysql:rw
#- ./conf/my.cnf:/etc/my.cnf:rw
- ./log:/var/log/mysql:rw
- ./mysql-files:/var/lib/mysql-files:rw
- /etc/localtime:/etc/localtime:ro
重点修改项为:MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
2、在docker-compse命令执行时声明环境变量
MYSQL_ROOT_PASSWORD=root#Cn2025 docker-compose up -d
3、为了防止使用history命令查看到执行命令,需要清除history记录
在CentOS中,清空当前用户的命令历史可以通过清空历史文件来实现。历史文件通常位于用户的家目录下,名为.bash_history。
history -c && history -w
注:
history -c 清空内存中的历史命令。
history -w 将当前内存中的历史命令写入到历史文件中,如果执行了history -c,这个命令会立即生效,所以需要紧接着执行history -w来同步清空历史。
如果想要删除所有用户的历史记录,可以删除或者清空/root/.bash_history和所有用户的~/.bash_history文件。