Docker 方式安装常用软件(如MySQL,Redis等)
Why Docker?
我决定用docker容器完全替代直接安装在本机上的 mysql, redis 等软件, 理由如下:
轻量级: 只会安装必要组件, 节省内存和硬盘.
例如 mysql, 我们一般只需要一个 mysql 服务器, 像 mysql 自带的命令行客户端, workbench 等组件其实都是多余的.
安装简单: 只要有docker环境, 只需要一个文件和一行命令即可安装。
隔离: 镜像内自带必要依赖. 再也不用担心缺少依赖或者依赖冲突了
统一: 启动/停止/重启都通过统一的 docker 命令来实现,会 docker 就可以,做到一通百通。降低学习成本。
易拆卸: 安装/卸载/修改版本对于容器来说是很简单的, 不会对主机环境有任何影响
跨平台:部分软件可能只有 linux 版本, 或者适用于你系统的版本安装起来很麻烦, 使用 docker 就可以避免这个问题, 因为容器都是运行在 linux 基础上的.
准备工作
为了能够访问到容器,并实现容器间互联。我这里使用端口映射 + docker 网络的做法。
host 网络模式虽然简单,但其实并不优雅,这相当于失去了容器的网络隔离。可能会造成端口冲突(例如 nginx proxy manager 会偷偷占用 3000端口,这会导致 grafana 无法启动)
macos 系统的 docker 的 host 模式就是无效的
需要执行docker network create public创建一个名为 public 的自定义网络(名称可以用别的, 这里用 public 举例)
我一般会在~/docker/app 目录下为每一个软件新建一个目录, 存放 docker-compose.yml 文件和数据卷 volume
MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| version: "3.3" services: mysql: image: mysql # 除非手动停止, 否则只要 docker 启动, 容器就会启动 restart: unless-stopped container_name: mysql environment: # root 账户密码 MYSQL_ROOT_PASSWORD: 123456 # 时区设为中国 TZ: Asia/Shanghai # 以下关于 binlog 的配置不是必要的, 这里是为了用 canal # 开启 binlog MYSQL_LOG_BIN: 1 # binlog 使用 row 模式 MYSQL_BINLOG_FORMAT: row volumes: # 将数据挂载至宿主机 - ./volume/data/:/var/lib/mysql/ networks: - public ports: - 3306:3306 networks: public: external: true
|
进入到 docker-compose.yml 文件所在目录, 使用docker-compose up -d即可安装并启动.
Redis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| version: "3.3" services: redis: image: redis restart: unless-stopped container_name: redis # --requirepass 用于指定密码 # command: redis-server --requirepass 123456 command: redis-server volumes: # 挂载持久化文件 - ./volume/data:/data ports: - 6379:6379 networks: - public networks: public: external: true
|
MongoDB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| version: "3.3" services: mongodb: image: mongo container_name: mongodb environment: # 初始账户密码 MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: 123456 ports: - 27017:27017 restart: unless-stopped networks: - public networks: public: external: true
|
ElasticSearch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| version: "3.3" services: es: image: elasticsearch restart: unless-stopped container_name: es environment: - discovery.type=single-node - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - xpack.security.enabled=false volumes: - ./volume/data/:/usr/share/elasticsearch/data - ./volume/plugins/:/usr/share/elasticsearch/plugins ports: - 9200:9200 networks: - public networks: public: external: true
|
如果 es 启动失败, 可以尝试在宿主机对挂载的两个数据卷赋予 777 的权限(chmod 777 目录名)