docker-machine配置导入/导出脚本

为了在多个主机同步docker-machine的配置,常常需要对docker-machine配置进行导入导出。这里附上两个脚本分别用于导出/导入docker-machine配置:docker-machine-export.sh和docker-machine-import.sh。

这两个脚本需要所有的主机系统有相同的$MACHINE_STORAGE_PATH/certs。用法如下:

导出(主机 A)

$ docker-machine ls
NAME       ACTIVE   DRIVER         STATE     URL                            SWARM   DOCKER    ERRORS
dev        -        digitalocean   Running   tcp://example.com:2376                 v1.10.1

$ ./docker-machine-export.sh dev
Exported machine to dev.zip

$ ls
docker-machine-import.sh
docker-machine-export.sh
dev.zip

使用docker-machine-export导出,给它一个导出的文件名,最后它会导出配置到zip压缩包。

导入 (主机 B)

$ docker-machine ls
NAME       ACTIVE   DRIVER         STATE     URL                            SWARM   DOCKER    ERRORS

$ ./docker-machine-import.sh dev.zip
Exported machine to dev.zip

$ docker-machine ls
NAME       ACTIVE   DRIVER         STATE     URL                            SWARM   DOCKER    ERRORS
dev        -        digitalocean   Running   tcp://example.com:2376                 v1.10.1

导入在主机A的docker-machine的配置压缩包docker-machine-import.zip

脚本如下

docker-machine-export.sh

#! /bin/bash

if [ -z "$1" ]; then
  echo "Usage: machine-export.sh MACHINE_NAME"
  echo ""
  echo "Exports the specified docker-machine to a MACHINE_NAME.zip file"
  echo "Note: This script requires you to have the same \$MACHINE_STORAGE_PATH/certs available on all host systems"
  exit 0
fi

machine_name=$1

docker-machine status $machine_name 2>&1 > /dev/null
if [ $? -ne 0 ]; then
  echo "No such machine found"
  exit 1
fi

set -e

MACHINE_STORAGE_PATH="${MACHINE_STORAGE_PATH:-"$HOME/.docker/machine"}"
machine_path="$MACHINE_STORAGE_PATH/machines/$machine_name"
tmp_path="/tmp/machine-export-$(date +%s%3)"

# copy to /tmp and strip out $MACHINE_STORAGE_PATH
mkdir -p $tmp_path
cp -r "$machine_path" "$tmp_path"
perl -pi -e "s|$MACHINE_STORAGE_PATH|__MACHINE__STORAGE_PATH__|g" $tmp_path/$machine_name/config.json

# create zip
rm -f "$machine_name.zip"
zip -rj "$machine_name.zip" "$tmp_path/$machine_name" > /dev/null

echo "Exported machine to $machine_name.zip"

# cleanup
rm -rf $tmp_path

docker-machine-import.sh

#! /bin/bash

set -e

if [ -z "$1" ]; then
  echo "Usage: docker-machine-import.sh MACHINE_NAME.zip"
  echo ""
  echo "Imports an exported machine from a MACHINE_NAME.zip file"
  echo "Note: This script requires you to have the same \$MACHINE_STORAGE_PATH/certs available on all host systems"
  exit 0
fi

machine_archive="$1"
machine_name="${machine_archive/.zip/}"
MACHINE_STORAGE_PATH="${MACHINE_STORAGE_PATH:-"$HOME/.docker/machine"}"
machine_path="$MACHINE_STORAGE_PATH/machines/$machine_name"

if [ -d "$machine_path" ]; then
  echo "$machine_name already exists"
  exit 1
fi

rm -rf "$machine_name"
unzip "$machine_archive" -d "$machine_name" > /dev/null
perl -pi -e "s|__MACHINE__STORAGE_PATH__|$MACHINE_STORAGE_PATH|g" $machine_name/config.json
mv "$machine_name" "$MACHINE_STORAGE_PATH/machines"

echo "Imported $machine_name to docker-machine ($machine_path)"

参考:https://gist.github.com/schickling/2c48da462a7def0a577e

版权声明:著作权归作者所有。

相关推荐

Ruby调用shell脚本总结

Ruby可以使用以下几种方法来执行shell脚本。1、使用反引号``调用shell脚本语法`cmd` 返回命令的结果示例`echo "hello"` 2、内置语法%x( cmd ) 其中%x后面为分隔符,上面使用了(作为分隔符,当遇到收括号即表示命令结束。这些分隔符可以为[,{等。示例%x( echo 'hello' 

Docker删除多个镜像image

Docker使用命令rmi删除镜像。docker删除单一镜像docker rmi image_name:version/image-id docker删除所有镜像docker rmi $(docker images -qf "dangling=true") docker删除除了特定的镜像外的所有镜像可以使用g

MySQL使用mysqldump导出数据

导出数据主要使用命令mysqldump导出整个数据库命令:mysqldump -u用户名 -p 数据库名 > 导出的文件名 示例mysqldump -udbuser -p mydb > mydb.sql 导出表命令:mysqldump -u用户名 -p 数据

CentOS 7安装Docker环境

在CentOS上有两种方式安装Docke:https://get.docker.com/联网脚本安装使用yum安装联网脚本安装1、更新yum源sudo yum update 2、联网下载脚本安装curl -sSL https://get.docker.com/ | sh 使用yum安装1、更新yum源sudo yum 

Linux Shell脚本里的单引号和双引号的区别

双引号在Shell脚本里,双引号里的字符,除$、\、’、和”这几个字符是特殊字符并保留其特殊功能外,其余字符作为普通字符对待。在双引号内支持内插变量,使用$符号表示。支持内插转义,使用反斜杠\做转,对于在双引号内的"需要使用反斜杠转义。单引号在Shell脚本里,单引号内的字符都为普通字符,不支持内插任何东西,即使是使用反斜杠对单引号做的转义也不行。示例:#!/bin/sh MYVAR=t

Nginx配置WebSocket

Nginx配置WebSocketserver {     listen       80;     server_name  example.com;     location&