Development Environment with Docker Compose
There are a lot of tools I need to work with. Installing some tools in my workstation and bloating the system is not an option with limited memory capacity, specially in MacBook Air M1 with 8GB of ram. So, I am using docker when using those tools. The day to day life depends on these DB tools –
- Redis
- MongoDB
- MySQL in Different Versions
- PostgreSQL
Running these in host system and managing the startup is tiresome. So, I generally use this compose file.
version: '3.8' networks: tools: services: redis: image: 'redis:latest' ports: - 6379:6379 networks: - tools environment: - TZ=Asia/Dhaka volumes: - ./data/redisdata:/data restart: on-failure redismodules: image: redislabs/redismod:latest ports: - 6380:6379 networks: - tools volumes: - ./data/redismoddata:/data environment: - TZ=Asia/Dhaka restart: on-failure redisinsights: image: redislabs/redisinsight:latest ports: - 8001:8001 networks: - tools environment: - TZ=Asia/Dhaka volumes: - ./data/redisinsightdata:/db mongodb: image: 'mongo:latest' ports: - 27017:27017 networks: - tools volumes: - ./data/mongodata:/data/db restart: on-failure environment: - TZ=Asia/Dhaka postgresql: image: postgres restart: always ports: - 5432:5432 networks: - tools volumes: - ./data/postgresdata:/var/lib/postgresql/data environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=postgres - TZ=Asia/Dhaka mysql: image: mysql platform: linux/x86_64 restart: always ports: - 3306:3306 networks: - tools volumes: - ./data/mysqldata:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=mysql - MYSQL_DATABASE=tools - MYSQL_USER=mysql - MYSQL_PASSWORD=mysql - TZ=Asia/Dhaka
You might see an extra parameter in mysql service- “platform: linux/x86_64”. It is because, as of mysql-8.0.26 docker image from docker hub, It doesn’t run in M1, so explicitly need to pass this platform parameter. I might be wrong about the root cause but that is what fixed the issue for me.
Also there is RedisInsight, which is one of the most useful redis UI tool you can think of. I am loving it.
I will be updating the script when I will move or start using another important tool.