作为一个开发人员,作为生产力工具Mac总避免不了安装一些中间件,这时Docker就起到很大作用啦,不同的版本、不同的中间件,一条命令就可以了,实在太方便啦
Docker是一种容器化技术,可以在Mac上创建、部署和运行应用程序。它可以帮助开发人员在Mac上快速创建开发环境,同时也可以在生产环境中使用Docker容器来部署应用程序。Docker可以将应用程序打包成一个独立的容器,容器中包含了应用程序的所有依赖项和配置信息,这使得应用程序在不同的环境中运行时保持一致性,避免了因环境差异导致的问题。此外,Docker还可以帮助开发人员快速构建、测试和部署应用程序,提高了开发效率和应用程序的可移植性。
Docker配置
配置磁盘
配置镜像加速
通过配置文件设置
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
systemctl daemon-reload && systemctl restart docker
通过UI配置
- 在任务栏点击 Docker for mac 应用图标 -> Perferences… -> Daemon -> Registry mirrors
Docker常用命令
-
相关网站:hub.docker.com/
-
使用宿主机IP:
host.docker.internal
# 查看镜像
docker images
# 查看容器
docker ps
docker ps -a
# 查看容器ID
docker ps -aq
# 进入容器
docker exec -it 容器id /bin/bash
# 查看docker详情,比如查看IP
docker inspect bfa5d203afe3
# 删除容器
docker rm 容器id
Docker安装中间件
部署zookeeper
docker pull zookeeper:3.8.0
docker run -d \
--log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=2 \
--name zookeeper \
-p 2181:2181 \
-v /etc/localtime:/etc/localtime \
zookeeper:3.8.0
--restart=always是否启动docker时自动重启容器
部署kafka
docker run -d \
--log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=2 \
--name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=host.docker.internal:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-v /etc/localtime:/etc/localtime \
wurstmeister/kafka:2.13-2.8.1
部署consul
# 运行实例
docker run -d -p 8500:8500 \
--restart=always \
--name=consul \
consul:1.6.1 \
-node=1 \
-client='0.0.0.0' \
agent -server -bootstrap -ui
说明
-node/-clieng/agent/-server/-bootstrap/-ui要放在 镜像名称 之后- agent: 表示启动 Agent 进程。
- server:表示启动 Consul Server 模式
- client:表示启动 Consul Cilent 模式。
- bootstrap:表示这个节点是 Server-Leader ,每个数据中心只能运行一台服务器。技术角度上讲 Leader 是通过 Raft 算法选举的,但是集群第一次启动时需要一个引导 Leader,在引导群集后,建议不要使用此标志。
- ui:表示启动 Web UI 管理器,默认开放端口 8500,所以上面使用 Docker 命令把 8500 端口对外开放。
- node:节点的名称,集群中必须是唯一的,默认是该节点的主机名。
- client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
- join:表示加入到某一个集群中去。 如:-json=192.168.0.11
部署redis
docker pull redis:7.0.4
docker run -itd \
--name redis \
-p 6379:6379 \
redis:7.0.4
部署nginx
# 1 在宿主机创建相关文件夹
mkdir -p /opt/docker/nginx/conf
mkdir -p /opt/docker/nginx/conf.d
mkdir -p /opt/docker/nginx/html
mkdir -p /opt/docker/nginx/logs
# 2 添加nginx配置文件
docker run --name nginx -p 9080:80 -d nginx:1.23.1
docker cp nginx:/etc/nginx/conf.d/default.conf /opt/docker/nginx/conf.d
docker cp nginx:/etc/nginx/nginx.conf /opt/docker/nginx/conf
docker stop nginx
docker rm nginx
# 3 mac还要将/opt/docker添加到share
# 4 运行容器
docker run -itd --name nginx \
-p 9080:80 -p 9003:9003 -p 9103:9103 -p 9100:9100 \
-p 9081:9081 \
-v /opt/docker/nginx/logs:/var/log/nginx \
-v /opt/docker/nginx/conf.d:/etc/nginx/conf.d \
-v /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/docker/nginx/html:/usr/share/nginx/html \
-e TZ="Asia/Shanghai" \
nginx:1.23.1
--privileged 是添加启动的权限
--net=host -itd 启用docker网络模式为host,就是使用宿主机的网络 使用docker run时使用–net=host指定docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip就是宿主机ip
-v 冒号前面是宿主机的配置文件目录 冒号后面是容器内部的目录
docker exec nginx nginx -t
docker exec nginx nginx -s reload
说明:
- --name nginx-test:容器名称。
- -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
- -d nginx: 设置容器在在后台一直运行。
部署elasticsearch
# 下载镜像
docker pull elasticsearch:7.8.1
# 创建目录
mkdir -p /opt/docker/elasticsearch/7.8.1/plugins
mkdir -p /opt/docker/elasticsearch/7.8.1/config
mkdir -p /opt/docker/elasticsearch/7.8.1/data
docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
elasticsearch:7.8.1
说明:如果您在本地运行 Elasticsearch(单个节点)或仅在云上使用单个节点,则只需在启动时加上"discovery.type=single-node" 即可,以避免生产检查,命令如下
# 启动7.8.1版本
docker run -d -p 9200:9200 -p 9300:9300 --name es \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-e "discovery.type=single-node" \
-e "transport.host: 0.0.0.0" \
-v /opt/docker/elasticsearch/7.8.1/plugins:/usr/share/elasticsearch/plugins \
-v /opt/docker/elasticsearch/7.8.1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/docker/elasticsearch/7.8.1/data:/usr/share/elasticsearch/data \
-v /opt/docker/elasticsearch/7.8.1/logs:/usr/share/elasticsearch/logs \
elasticsearch:7.8.1
# 启动7.16.1版本
docker run -d -p 9200:9200 -p 9300:9300 --name es \
-e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
-e "discovery.type=single-node" \
-e "transport.host: 0.0.0.0" \
-v /opt/docker/elasticsearch/7.16.1/plugins:/usr/share/elasticsearch/plugins \
-v /opt/docker/elasticsearch/7.16.1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/docker/elasticsearch/7.16.1/data:/usr/share/elasticsearch/data \
-v /opt/docker/elasticsearch/7.16.1/logs:/usr/share/elasticsearch/logs \
elasticsearch:7.16.1
安装ik分词器
# 1、进入容器
docker exec -it es /bin/bash
# 2、进入目录
cd /usr/share/elasticsearch/bin
# 3、下载分词器
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.1/elasticsearch-analysis-ik-7.16.1.zip
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/archive/refs/tags/v7.8.1.zip
# 4、重启
docker restart elasticsearch
部署xxl-job
docker pull xuxueli/xxl-job-admin:2.1.2
docker pull xuxueli/xxl-job-admin:2.2.0
docker run -d -p 8772:8080 -p 9999:9999 \
-e PARAMS="--spring.datasource.url=jdbc:mysql://host.docker.internal:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 \
--spring.datasource.username=xxl \
--spring.datasource.password=xxl \
--xxl.job.accessToken=1889c4be21b04f6f20c273abcfgdbf8f" \
-v /opt/docker/xxl-job-data/applogs:/data/applogs \
--name xxl-job-admin \
xuxueli/xxl-job-admin:2.2.0
-
密码 admin/123456
部署nacos
docker run -d \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=数据库host \
-e MYSQL_SERVICE_PORT=数据库端口 \
-e MYSQL_SERVICE_USER=数据库用户名 \
-e MYSQL_SERVICE_PASSWORD=数据库密码 \
-e MYSQL_SERVICE_DB_NAME=数据库 \
-e MYSQL_SERVICE_DB_PARAM="autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai" \
-p 8848:8848 \
--restart=always \
--name nacos1.4.0 \
-v ~/work/nacos/standalone-logs/:/home/nacos/logs \
-v ~/work/nacos/init.d/:/home/nacos/init.d \
-v ~/work/nacos/conf/:/home/nacos/conf \
nacos/nacos-server:1.4.0
Mac下Docker容器中Nacos无法连接宿主机MySQL数据库
答:数据库host应该使用host.docker.internal;参考链接:
部署rabbitmq
docker pull rabbitmq:3.9.24
docker pull rabbitmq:3.9.24-management
docker run -d --name rabbitmq3.7.7 \
-p 5672:5672 -p 15672:15672 \
-v /opt/docker/rabbitmq/data:/var/lib/rabbitmq \
--hostname rabbitmq \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
rabbitmq:3.9.24-management
可以用命令
-v `pwd`/data:/var/lib/rabbitmq \
- -d 后台运行容器;
- --name 指定容器名;
- -p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
- -v 映射目录或文件;
- --hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
- -e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)
部署MySQL
docker run -d \
-p 33061:3306 \
-v /etc/localtime:/etc/localtime \
-v /opt/docker/mysql/conf:/etc/mysql/mysql.conf.d \
-v /opt/docker/mysql/log:/var/log/mysql \
-v /opt/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql mysql:8.0.32
docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -Ddbname' < /opt/docker/nacos/conf/mysql-schema.sql
总结
Docker对Mac的作用是提供了一种便捷、高效的容器化解决方案,使得开发人员可以更加轻松地管理和部署应用程序。