mac安装dockerdocker一键部署教程mac docker安装部署




mac安装dockerdocker一键部署教程mac docker安装部署

2022-07-21 2:11:28 网络知识 官方管理员

背景

你是否有过这样的困惑?

常常需要本地电脑安装例如Mysql,Redis,RocketMQ,ES,Zookeeper,Nginx,Nacos等等软件,耗时又费力。

  1. 每当更换电脑,或者重装系统的时候。
  2. 每当工作中,需要做些调优或者测试的时候,而这些软件服务一般都是运维或者DBA搭建的,自己甚至没有权限登录到服务器机器上查看,苦恼。
  3. 每当想学习,却被搭建基础环境折腾,无情的浪费时间。

所以,为了节约时间,我总结了用本地常用软件docker化,实现一键启动。是不是很香?

特别说明:本文重点说明如何将软件docker化实战,本地宿主机和Docker服务通信问题,对于docker安装,docker,docker-compose命令及用法基础知识不会讲解。

目标

  1. 各软件docker服务通过固定IP访问,不能每次重启docker服务IP都变化。
  2. 本机通过IP直接通信docker容器,而不是通过127.0.0.1端口映射的方式。
  3. 支持多个服务一键部署,也支持单个服务一键部署。

实现步骤

  1. 创建网桥取名app-networkdockernetworkcreate--driverbridge--subnet=172.30.1.0/24--gateway=172.30.1.1--opt"com.docker.network.bridge.name"="app-network"app-network配置docker服务,都桥接到同一网桥app-network上
  2. 以mysql为例(其它服务类似)version:'3.5'services:db:image:hub.c.163.com/library/mysql:5.7restart:alwayscontainer_name:"mysql_5_7"restart:alwaysports:-3306:3306environment:TZ:Asia/ShanghaiMYSQL_ROOT_PASSWORD:root#command:volumes:-./conf.d:/etc/mysql/mysql.conf.d-./data:/var/lib/mysqlnetworks:default:ipv4_address:172.30.1.2networks:default:external:name:app-network其中:MYSQL_ROOT_PASSWORD为root用户登录密码,指定IP:172.30.1.2
  3. 编写docker-compose.yml文件
  • 编写启动脚本start.sh#!/usr/bin/envbash#创建目录mkdir-p./conf.dmkdir-p./data#设置目录权限chmod-R777./conf.dchmod-R777./data#下载并启动容器,且为后台自动启动docker-composeup-d#显示mysql容器dockerps|grepmysql_5_7
  • 启动mysqltanyawendeMacBook-Pro:mysqlbytearch$sh./start.shmysql_5_7isup-to-date1be6fba30c7chub.c.163.com/library/mysql:5.7"docker-entrypoint.s…"7hoursagoUp7hours0.0.0.0:3306->3306/tcp,:::3306->3306/tcpmysql_5_7
  • 至此,mysql服务启动成功,一切很顺利,但是,宿主机(MAC电脑)ping不通容器tanyawendeMacBook-Pro:mysqlbytearch$ping172.30.1.2PING172.30.1.2(172.30.1.2):56databytesRequesttimeoutforicmp_seq0Requesttimeoutforicmp_seq1Requesttimeoutforicmp_seq2Requesttimeoutforicmp_seq3Requesttimeoutforicmp_seq4Requesttimeoutforicmp_seq5Requesttimeoutforicmp_seq6Requesttimeoutforicmp_seq7Requesttimeoutforicmp_seq8Requesttimeoutforicmp_seq9
  • 尝试试了下阿里云CentOS系统,是可以ping通的。
  • [root@VM_0_14_centos~]#ping172.30.1.2PING172.30.1.2(172.30.1.2)56(84)bytesofdata.64bytesfrom172.30.1.2:icmp_seq=1ttl=64time=0.028ms64bytesfrom172.30.1.2:icmp_seq=2ttl=64time=0.021ms64bytesfrom172.30.1.2:icmp_seq=3ttl=64time=0.017ms64bytesfrom172.30.1.2:icmp_seq=4ttl=64time=0.027ms64bytesfrom172.30.1.2:icmp_seq=5ttl=64time=0.023ms64bytesfrom172.30.1.2:icmp_seq=6ttl=64time=0.023ms64bytesfrom172.30.1.2:icmp_seq=7ttl=64time=0.020ms

通过查阅资料,究其原因如下:

  1. Docker在Mac系统架构

mac安装docker(docker一键部署教程)(1)

docker在OSX的实现方式,是首先创建一个linux的虚拟机,再将docker放入到虚拟机中实现,而对于linux虚拟机,与OSX之间的通信,目前版本采用/var/run/docker.sock这种socket文件来通信,在OSX手机中自然ping不通docker容器。

  1. Docker在Linux系统架构

docker是在linux内核容器基础上实现的,linux安装docker后,会创建一个为docker0的虚拟网卡,linux宿主机与docker容器之间的通信,通过docker0虚拟网卡进行。

所以对于Linux系统,到这就完成了!!!

那Mac怎么办?对于一个追求完美的程序员来说,这不能忍,必须血战到底。

Mac电脑与docker容器通信解决方案

经过多次尝试找到一种解决方案(若有同学有其它更换办法,欢迎告知!)

  1. Mac通过brew安装docker-connectorbrewinstallwenjunxiao/brew/docker-connector
  2. 执行以下命令把docker的所有bridge网络都添加到路由中dockernetworkls--filterdriver=bridge--format"{{.ID}}"|xargsdockernetworkinspect--format"route{{range.IPAM.Config}}{{.Subnet}}{{end}}">>/usr/local/etc/docker-connector.conf或者修改/usr/local/etc/docker-connector.conf添加路由route172.30.1.0/24
  3. 配置完成,重启服务sudobrewservicesstartdocker-connector
  4. 使用以下命令在docker端运行wenjunxiao/mac-docker-connector,需要使用host网络,并且允许NET_ADMIN,pullconnector容器的作用是作为桥接dockerrun-it-d--restartalways--nethost--cap-addNET_ADMIN--nameconnectorwenjunxiao/mac-docker-connector
  5. 大功告成tanyawendeMacBook-Pro:docker-appbytearch$ping172.30.1.2PING172.30.1.2(172.30.1.2):56databytes64bytesfrom172.30.1.2:icmp_seq=0ttl=63time=3.019ms64bytesfrom172.30.1.2:icmp_seq=1ttl=63time=3.751ms64bytesfrom172.30.1.2:icmp_seq=2ttl=63time=1.850ms64bytesfrom172.30.1.2:icmp_seq=3ttl=63time=3.992ms64bytesfrom172.30.1.2:icmp_seq=4ttl=63time=3.695ms

其它

以上源码已经开源,感兴趣同学可以移步查看。

Gitee:https://gitee.com/bytearch_admin/docker-app.git

Github:https://github.com/bytearch/docker-app.git

目录结构如下:

.├──README.md├──install_network.sh├──mac_connect_docker.md├──mysql│├──conf.d//数据库配置文件│├──data//数据库data目录挂载,重启数据不丢失│├──docker-compose.yml│├──start.sh//启动脚本│└──stop.sh//关闭脚本├──redis│├──conf│├──data│├──docker-compose.yml│├──start.sh│└──stop.sh├──rocketmq│├──docker-compose.yml│├──readme.md│├──rmq│├──rmqs│├──start.sh│└──stop.sh├──startAll.sh//启动所有服务├──stopAll.sh//关闭所有服务└──zookeeper├──docker-compose.yml├──start.sh├──stop.sh├──zoo1├──zoo2└──zoo3
执行./startAll看看效果:

mac安装docker(docker一键部署教程)(2)

原文链接:

https://www.tuicool.com/articles/Nn26ra3

发表评论:

最近发表
网站分类
标签列表