Docker 方式安装常用软件(如MySQL,Redis等)

Why Docker?

我决定用docker容器完全替代直接安装在本机上的 mysql, redis 等软件, 理由如下:

  1. 轻量级: 只会安装必要组件, 节省内存和硬盘.

    例如 mysql, 我们一般只需要一个 mysql 服务器, 像 mysql 自带的命令行客户端, workbench 等组件其实都是多余的.

  2. 安装简单: 只要有docker环境, 只需要一个文件和一行命令即可安装。

  3. 隔离: 镜像内自带必要依赖. 再也不用担心缺少依赖或者依赖冲突了

  4. 统一: 启动/停止/重启都通过统一的 docker 命令来实现,会 docker 就可以,做到一通百通。降低学习成本。

  5. 易拆卸: 安装/卸载/修改版本对于容器来说是很简单的, 不会对主机环境有任何影响

  6. 跨平台:部分软件可能只有 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

 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

 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

 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

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 目录名)

文章作者: 白烛魁
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 白烛魁的小站
Docker
喜欢就支持一下吧