通过docker容器屏蔽底层细节,实现各类型“龙头”数据库的自动化安装
-
name: Install and configure databases using Docker
hosts: database
become: yes
vars:
ansible_ssh_common_args: “-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null”
docker_volumes_path: “/data/docker_volumes”
docker_data_dir: “/data/docker”
database_password: “9kls8@12”
install_all_databases: trueDatabase configurations
databases:
redis:
install: false
version: “:latest”
ports: [“6380:6379”]
container_name: “redis”
image: “redis”
volumes: [“{{ docker_volumes_path }}/redis:/data”]
command: “redis-server --requirepass {{ database_password }}”
env: {}
mysql:
install: false
version: “:latest”
ports: [“3307:3306”]
container_name: “mysql”
image: “mysql”
volumes: [“{{ docker_volumes_path }}/mysql:/var/lib/mysql”]
command: “”
env:
MYSQL_ROOT_PASSWORD: “{{ database_password }}”
MYSQL_ROOT_HOST: “%”
postgresql:
install: false
version: “:latest”
ports: [“5432:5432”]
container_name: “postgresql”
image: “postgres”
volumes: [“{{ docker_volumes_path }}/postgresql:/var/lib/postgresql”]
command: “”
env:
POSTGRES_PASSWORD: “{{ database_password }}”
mongo:
install: false
version: “:latest”
ports: [“27017:27017”]
container_name: “mongo”
image: “mongo”
volumes: [“{{ docker_volumes_path }}/mongo:/data/db”]
command: “”
env:
MONGO_INITDB_ROOT_USERNAME: “root”
MONGO_INITDB_ROOT_PASSWORD: “{{ database_password }}”
neo4j:
install: false
version: “:latest”
ports: [“7474:7474”, “7687:7687”]
container_name: “neo4j”
image: “neo4j”
volumes: [“{{ docker_volumes_path }}/neo4j:/data”]
command: “”
env:
NEO4J_AUTH: “neo4j/{{ database_password }}”
influxdb:
install: true
version: “:latest”
ports: [“8086:8086”]
container_name: “influxdb”
image: “influxdb”
volumes: [“{{ docker_volumes_path }}/influxdb:/var/lib/influxdb”]
command: “”
env:
INFLUXDB_ADMIN_USER: “root”
INFLUXDB_ADMIN_PASSWORD: “{{ database_password }}”tasks:
-
name: Configure Docker daemon.json
copy:
content: |
{
“registry-mirrors”: [
“https://docker.1ms.run”
],
“insecure-registries”: ,
“debug”: false,
“experimental”: false,
“data-root”: “{{ docker_data_dir }}”
}
dest: “/etc/docker/daemon.json”
mode: “0644”
register: docker_config_change -
name: Restart Docker service to apply mirror configuration
service:
name: docker
state: restarted
when: docker_config_change.changed -
name: Ensure Docker service is running
service:
name: docker
state: started
enabled: yes -
name: Create database directories
file:
path: “{{ docker_volumes_path }}/{{ item }}”
state: directory
mode: “0755”
loop: “{{ databases.keys() }}” -
name: Run database containers
docker_container:
name: “{{ item.value.container_name }}”
image: “{{ item.value.image }}{{ item.value.version }}”
state: started
restart_policy: always
ports: “{{ item.value.ports }}”
volumes: “{{ item.value.volumes }}”
command: “{{ item.value.command }}”
env: “{{ item.value.env }}”
timeout: 600
loop: “{{ databases | dict2items }}”
when: install_all_databases or item.value.install
-