mac中通过docker使用mysql和nacos踩过的那些坑
- docker常用命令
- docker网络
- mysql数据库
- nacos
我想要做的事:在docker中使用mysq和nacos并且将容器的目录挂载到本地,好处是便于数据的备份,删除容器之后数据不会丢失,同时使用mysql数据库存储nacos的配置数据,使用docker网络实现容器之间的通信。
docker的安装这里就不再赘述,百度有很多,这里只记录最终成功的命令。
docker常用命令
之所以写在这里也是因为我经常记不住,需要百度🙈🙈🙈
#info|version
docker info #显示docker的系统信息,包括镜像和容器的数量
docker version #显示docker的版本信息。
#帮助命令
docker 命令 --help #帮助命令
#镜像命令
docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
docker search #搜索镜像
docker pull #下载镜像 docker image pull
docker rmi #删除镜像 docker image rm
#容器命令
docker run 镜像id #新建容器并启动
docker ps 列出所有运行的容器 docker container list
docker rm 容器id #删除指定容器
#删除所有容器
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
#启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
#退出容器
exit #容器直接退出
ctrl +P +Q #容器不停止退出 ---注意:这个很有用的操作
#其他常用命令
docker run -d 镜像名 #后台启动命令
docker logs #查看日志
docker top 容器id #查看容器中进程信息ps
docker inspect 容器id #查看镜像的元数据
docker exec #进入当前容器后开启一个新的终端,可以在里面操作。(常用)
docker attach # 进入容器正在执行的终端
docker cp 容器id:容器内路径 主机目的路径 #从容器内拷贝到主机上
docker网络
创建网络
docker network create --driver bridge --subnet 192.168.1.0/16 --gateway 192.168.1.0 docker-net
验证网络
docker network inspect docker-net
删除网络
docker network rm 网络ID
查看所有网络
docker network inspect options
查看容器的ip地址
docker inspect mysql | grep IPAddress
mysql数据库
最终的启动命令
docker run -p 3306:3306 --name mysql \
-v /Users/feiyu/fy/dataBase/mysql8/conf:/etc/mysql/conf.d \
-v /Users/feiyu/fy/dataBase/mysql8/logs:/logs \
-v /Users/feiyu/fy/dataBase/mysql8/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--network docker-net \
--ip 192.168.1.2 \
--restart=always \
-d mysql:8.0
解读一下:
docker run -p 3306:3306 --name mysql #run启动 -p指定端口,左边是本地环境,右边是docker容器环境
#--name设置容器别名
-v #-v是设置挂载目录 左边是本地环境,右边是docker容器环境
-e MYSQL_ROOT_PASSWORD=123456 \ #mysql中root对应的密码
--network docker-net \ #使用网络,docker-net是网络名称
--ip 192.168.1.2 \ #指定ip地址
--restart=always \ #设置启动docker就启动并运行容器
-d mysql:8.0 # -d后台运行
踩坑1:下载mysql镜像的时候,网速真的很慢,慢到我怀疑人生,没找到什么原因,镜像源配置了好几个,哈哈哈!!!简直不要太聪明,可是还是慢,这里提醒使用mac的友友,可以试试直连网线,真的很爽,我就是使用了网线之后速度起飞了。
踩坑2:启动镜像时,如果不是最新版本的镜像,需要加上镜像版本号,不然每次运行镜像,本地找不到最新的都会重新下载新的,
踩坑3:不要想着一步到位,除非你很熟悉docker,不然建议一步一步实现,这样出现问题很容易定位
简单说一下过程吧
1.先下载镜像,并使用最简单的命令启动
docker run -p 3306:3306 --name mysql \
-d mysql:8.0
2.进入容器内部查看文件对应的位置
docker exec -it mysql /bin/bash
mysql将配置文件夹,日志文件夹,存储数据文件夹挂载到本地
在本地创建好相应的文件夹,使用下面命令复制
注意::地址看自己的实际地址,不要照抄哦
docker cp mysql:/Users/feiyu/fy/dataBase/mysql8/conf /etc/mysql/conf.d
docker cp mysql:/Users/feiyu/fy/dataBase/mysql8/logs /logs
docker cp mysql:/Users/feiyu/fy/dataBase/mysql8/data /var/lib/mysql
然后停止容器并删除
docker stop mysql
docker rm mysql
最后使用我给的命令启动mysql就可以啦
初始化nacos配置
其他博客找的脚本GitHub脚本地址
nacos
下载并临时启动nacos
docker run -e JVM_XMS=256m -e JVM_XMX=256m --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server:1.3.1
复制配置文件
docker cp nacos:/home/nacos/conf/ /Users/feiyu/fy/nacos/
docker cp nacos:/home/nacos/logs/ /Users/feiyu/fy/nacos/
先停止在删除naocs
docker stop nacos
docker rm nacos
最终启动
docker run -d \
-e MODE=standalone \
--ip 192.168.1.3 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.1.2 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=db_nacos \
--network docker-net \
-p 8848:8848 \
--name nacos \
--restart=always \
--platform linux/amd64 \
nacos/nacos-server:1.3.1
解释:
踩坑1:启动之后访问不了 ,先看日志有没有报错,在看访问地址对不,我因为地址不对折腾了很长时间🤣🤣🤣
踩坑2 启动提示::WARNING: The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
解决办法
docker build 后面加:–platform arm64 (arm64 兼容 mac m系列)
好了,到此就结束啦!!!