使用docker创建多种数据库容器的方法:mysql, redis, mongodb, neo4j


前言

在软件开发的世界里,数据库是不可或缺的一环,而如何高效、快速地部署和管理数据库则是每个开发者和运维人员必须面对的问题。Docker,作为一种轻量级的容器化解决方案,为这一问题提供了简单而强大的答案。本文将通过实用的命令和代码示例,向您展示如何使用 Docker 轻松部署和管理 MySQL、Redis、MongoDB 和 Neo4J 等流行数据库。

无需繁琐的配置和安装,只需几条简单的命令,您就能拥有一个运行稳定、易于维护的数据库环境。无论您是 Docker 的新手,还是有一定经验的用户,这篇文章都将为您提供实用的、可立即执行的步骤。

mysql

拉取镜像

docker pull mysql:latest

运行容器

docker run --name mysql-container \
	-e MYSQL_ROOT_PASSWORD=my-secret-pw \
	-v $HOME/mysql-data:/var/lib/mysql \
	-p 3306:3306 \
	-d \
	mysql

在这个命令中:

  • –name mysql-container:将容器命名为mysql-container。
  • -v /my/own/datadir:/var/lib/mysql:将主机上的/my/own/datadir映射到容器中的/var/lib/mysql。
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw:将MySQL的root密码设置为my-secret-pw。
  • -p 3306:3306:将容器中的端口3306映射到主机上的端口3306。
  • -d mysql:latest:指定容器应使用最新的MySQL镜像。

redis

拉取镜像

docker pull redis:latest

运行容器

docker run --name redis-container \
	-p 6379:6379 \
	-v $HOME/redis-data:/data \
	-d \
	redis

在这个命令中:

  • –name my-redis-container:给容器命名为my-redis-container。
  • -p 6379:6379:将容器中的端口6379映射到主机上。
  • -v $HOME/redis-data:/data:将主机上的$HOME/redis-data目录挂载到容器中的/data目录。
  • redis redis-server --appendonly yes:以追加模式运行Redis服务器,以实现持久化。

mongodb

拉取镜像

docker pull mongo:latest

运行容器

docker run \
	--name mongo-container \
	-v $HOME/mongo-data:/data/db \
	-p 27017:27017 \
	-d \
	mongo

在这个命令中:

  • –name mongo-container: 将容器命名为mongo-container。
  • -v /my/own/mongodir:/data/db: 将主机上的/my/own/mongodir映射到容器中的/data/db。
  • -p 27017:27017: 将容器中的端口27017映射到主机上的端口27017。
  • -d mongo:latest: 指定容器应使用最新的MongoDB镜像。

neo4j

拉取镜像

docker pull neo4j:latest

运行容器

docker run \
    --name my-neo4j-container \
    -p7474:7474 -p7687:7687 \
    -v $HOME/neo4j/data:/data \
    -v $HOME/neo4j/logs:/logs \
    -d \
    -e NEO4J_AUTH=neo4j/password \
    neo4j

在这个命令中:

  • –name my-neo4j-container:给容器命名为my-neo4j-container。
  • -p 7474:7474 -p 7687:7687:将容器中的7474端口(HTTP)和7687端口(Bolt)映射到主机上。
  • -v $HOME/neo4j/data:/data:将主机中的$HOME/neo4j/data目录挂载到容器中的/data目录。
  • -v $HOME/neo4j/logs:/logs:将主机中的$HOME/neo4j/logs目录挂载到容器中的/logs目录。
  • -e NEO4J_AUTH=neo4j/password:将Neo4j的用户名设置为neo4j,密码设置为password。

docker-compose

一般配置

使用Docker Compose可以更轻松、更可管理地运行多个服务,如MySQL、Redis、MongoDB和Neo4j。下面是一个示例docker-compose.yml文件,定义了这四个服务,并将它们连接到自定义网络,使服务之间使用自定义网络进行通信。
以下一个示例docker-compose.yml文件:

version: '3'
services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
    ports:
      - "3306:3306"
    volumes:
      - ./mysql-data:/var/lib/mysql
    networks:
      - my_network

  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - ./redis-data:/data
    command: redis-server --appendonly yes
    networks:
      - my_network

  mongo:
    image: mongo:latest
    ports:
      - "27017:27017"
    volumes:
      - ./mongo-data:/data/db
    networks:
      - my_network

  neo4j:
    image: neo4j:latest
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      NEO4J_AUTH: neo4j/password
    volumes:
      - ./neo4j-data:/data
      - ./neo4j-logs:/logs
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

命令:redis-server --appendonly yes行在docker-compose.yml文件的Redis服务定义中指定了Redis容器启动时要运行的命令。

  • redis-server:这是启动Redis服务器的命令。
  • –appendonly yes:此标志在Redis中启用“仅追加文件”(AOF)持久性模式。

使用.env文件进行环境变量配置

docker-compose.yml 文件和 .env 文件在 Docker Compose 中通常一起使用,以更灵活和可配置的方式定义和运行容器。下面是它们之间关系的一些关键点:

  • .env 文件
    1. env 文件通常位于与 docker-compose.yml 文件相同的目录中。
    2. 它包含键值对,用于定义环境变量,如 MYSQL_ROOT_PASSWORD=root_password。
    3. 这些环境变量可以在 docker-compose.yml 文件中使用。
  • docker-compose.yml 文件
    1. docker-compose.yml 文件定义了应用的服务、网络和卷。
    2. 在这个文件中,您可以使用 ${VARIABLE_NAME} 语法来引用在 .env 文件中定义的环境变量。
  • 两种文件之间的关系
    1. 当运行 docker-compose up 或其他 Docker Compose 命令时,Docker Compose 会自动查找同一目录下的 .env 文件。
    2. Docker Compose 会读取 .env 文件,并用其中定义的值替换 docker-compose.yml 文件中的相应变量。
    3. 这使能够在不修改 docker-compose.yml 文件的情况下,通过简单地更改 .env 文件来调整设置。

.env文件案例

# MySQL
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=mydatabase
MYSQL_USER=myuser
MYSQL_PASSWORD=mypassword

# Redis
REDIS_PASSWORD=redis_password

# MongoDB
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=root_password

# Neo4J
NEO4J_AUTH=neo4j/neo4j_password

docker-compose.yml文件案例

version: '3'
services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - my_custom_network

  redis:
    image: redis:latest
    environment:
      REDIS_PASSWORD: ${REDIS_PASSWORD}
    ports:
      - "6379:6379"
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    networks:
      - my_custom_network

  mongo:
    image: mongo:latest
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
    ports:
      - "27017:27017"
    volumes:
      - mongo_data:/data/db
    networks:
      - my_custom_network

  neo4j:
    image: neo4j:latest
    environment:
      NEO4J_AUTH: ${NEO4J_AUTH}
    ports:
      - "7474:7474"
      - "7687:7687"
    volumes:
      - neo4j_data:/data
      - neo4j_logs:/logs
    networks:
      - my_custom_network

networks:
  my_custom_network:
    driver: bridge

volumes:
  mysql_data:
  redis_data:
  mongo_data:
  neo4j_data:
  neo4j_logs:

命令: redis-server --requirepass ${REDIS_PASSWORD}

  • redis-server:这是启动 Redis 服务器的命令。
  • –requirepass:这是一个选项,用于指定访问 Redis 服务器所需的密码。
  • ${REDIS_PASSWORD}:这是一个环境变量,它的值应该在 .env 文件或 Docker Compose 命令行中设置。这个环境变量的值将作为 --requirepass 选项的参数,即 Redis 服务器所需的密码。

Bug说明

在创建mysql容器的时候,如果出现连接不上的情况,最好建议使用匿名数据卷的方式。在docker-compose模型下为例,进行两次up -d和down,第二次在匿名数据卷下加上external:true。同时,用连接到同一网卡下的docker容器进行连接,相当于初始化一下这个匿名数据卷。这个方法可以解决大多数连接不成功的问题,但具体原因不详。

总结

通过本文,您已经学习了如何使用 Docker 快速部署和管理多种数据库。这些命令和代码示例不仅易于执行,而且具有很高的可复用性。Docker 的灵活性和便捷性意味着您可以将这些知识应用到各种不同的项目和环境中,大大提高您的工作效率。

希望这篇文章能帮助您更好地理解 Docker 在数据库管理方面的实用性,并鼓励您在未来的工作中尝试和应用这些方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值