前言:至于Docker的安装和使用教程很多,这里直接引用,本文主要记录使用期间遇到的坑。
一、Mac OS安装Docker
1.Docker 在 Mac 中的两种实现方式
方式一:基于 HyperKit (Docker Desktop for Mac); (笔者采用的方式,就是一个dmg文件,官网下载安装即可)
方式二:基于Virtual Box(Docker Toolbox);
两者的区别:官方解答。
2. 安装及使用教程
官方教程 ,看不懂英文就Google浏览器右键翻译成中文
二、踩坑实录
1.问题: 通过Docker Desktop for Mac 安装 Kubernetes, 一直处于Kubernetes is starting 状态
原因:说白了就是Kubernetes 的镜像无法 从 k8s.gcr.io 仓库 拉取下来 ,因为伟大的墙,你懂的。
解决: 从官方的镜像库中拉取下来,然后重新打个镜像标签,重启就行了。
// 1.首先拉取镜像
docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.14.8
docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.14.8
docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.14.8
docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.14.8
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd-amd64:3.2.18
docker pull coredns/coredns:1.1.3
//2.修改镜像的tag
docker tag docker.io/mirrorgooglecontainers/kube-proxy-amd64:v1.14.8 k8s.gcr.io/kube-proxy-amd64:v1.14.8
docker tag docker.io/mirrorgooglecontainers/kube-scheduler-amd64:v1.14.8 k8s.gcr.io/kube-scheduler-amd64:v1.14.8
docker tag docker.io/mirrorgooglecontainers/kube-apiserver-amd64:v1.14.8 k8s.gcr.io/kube-apiserver-amd64:v1.14.8
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager-amd64:v1.14.8 k8s.gcr.io/kube-controller-manager-amd64:v1.14.8
docker tag docker.io/mirrorgooglecontainers/etcd-amd64:3.2.18 k8s.gcr.io/etcd-amd64:3.2.18
docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag docker.io/coredns/coredns:1.1.3 k8s.gcr.io/coredns:1.1.3
//3.删除无用的镜像
⚠️注意:拉取镜像的版本一定要和docker桌面上的Kubernetes版本保持一致,否则,不行。比如我的是V1.14.8。
2.问题:Mac OS 宿主机 无法直接 访问 Docker 容器。
原因:和Docker的网络模式有关。Docker 是安装在Linux上的,宿主机和容器可以通过docker0虚拟网卡连接,而mac的 Docker,没有 docker0。
a.这个问题官方有给出: 官方答复。
b.了解下Linux/Mac OS 的网络模式: 网络模式配置。
解决:把nginx容器端口发布为80 ,-p xxxx:80,通过 localhost:xxxx,即可访问到 nginx 服务器首页。
如果把tomcat 发布为 -p 8080:8080 也能访问到tomcat 首页。(这里有个404 的坑,请看问题3)
3.访问 Docker 的 Tomcat 容器首页 ,报404 错误. (我在这个问题上栽了好几天,哭!)
原因:没有找到首页的文件。进入tomcat 容器内,进入 webapps目录下你会发现是空的,而tomcat首页会放在webapps下面。旁边有个webapps.dist 文件,下面包含webapps下面应该有的文件。
解决:
把webapps.dist 下的文件挪到webapps下面。
或者,删了那个空文件,把 webapps.dist 改为 webapps。
rm -fr webapps
mv webapps.dist/ webapps