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

解释:

docker下载nacos失败_linux

踩坑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系列)

好了,到此就结束啦!!!