/ 代码

Tips for Docker on Mac

在macOS上使用Docker很长时间了,本文总结一些我不想忘记的tips,方便自己反复使用的同时,也顺便总结分享一下,留下本文作为长期更新的备忘录。

搭建私有镜像库

运行一个本地镜像库

$ docker run -d  -p 5000:5000 --restart=always --name registry registry:2

这条命令会从docker hub 下载 registry:2 镜像,在本机运行一个镜像库服务。

下载一个测试用的镜像。

$ docker pull ubuntu:16.04

给这个镜像打上私有镜像库的标签

$ docker tag ubuntu:16.04 localhost:5000/ubuntu:16.04

push这个测试镜像到本地的镜像库

$ docker push localhost:5000/ubuntu:16.04

这时候你会发现我的本地这样岂不是有了两份相同的镜像了,有这个必要么?是不是多余了?下面几个场景中会用到:

  1. 当你用docker-machine在本机启动1个vm的时候,你运行任何docker run或者docker-compose up的时候你可能需要一个之前在本地就有的image,这是一种分享本机image给docker-machine vm的一种方式。
  2. 当你用docker-machine在本机启动多个个vm的时候,你可能会把它们作出docker Swarm群集,当你在这个群集上启动一个服务的时候,docker compose文件中的镜像地址可以引用这个本地地址,引用地址类似这样 image: 192.168.99.1:5000/influxdb
  3. 当你用 minikube start启动了一个minikube的vm的时候,你可能也需要本机的docker镜像,尤其是在你做demo的时候,这是最快的下载途径。

需要注意的是,以上三种情况都需要指定一下--engine-insecure-registry 192.168.99.1:5000 这个参数。

自动化创建Docker Swarm群集

在我的文件目录中存放着这个脚本

cat create-swarm.sh
docker-machine create manager  --engine-insecure-registry 192.168.99.1:5000
docker-machine create agent1  --engine-insecure-registry 192.168.99.1:5000
docker-machine create agent2  --engine-insecure-registry 192.168.99.1:5000
docker-machine create agent3  --engine-insecure-registry 192.168.99.1:5000
eval `docker-machine env manager`
docker swarm init --advertise-addr `docker-machine ip manager`
docker-machine ssh agent1 docker swarm join --token `docker swarm join-token -q worker` `docker-machine ip manager`:2377
docker-machine ssh agent2 docker swarm join --token `docker swarm join-token -q worker` `docker-machine ip manager`:2377
docker-machine ssh agent3 docker swarm join --token `docker swarm join-token -q worker` `docker-machine ip manager`:2377
docker node ls

解释一下上面的代码:创建四个docker-machine vm,初始化swarm群集,把三个worker节点加入群集。这样四节点的群集就up and running了。

清除以上群集虚拟机的命令如下:

docker-machine rm -y manager agent1 agent2 agent3