IBM Bluemix体验:Containers
国际版的Bluemix目前有三个region,US South,United Kingdom和Sydney。其中US South是功能最全的,UK其次,Sydney功能最少。Containers服务在US和UK两个region中都可以使用。
为了减少不必要的麻烦,我使用了一个在国外的安装了Ubuntu 16.04操作系统的虚拟机作为客户端,如果你想体验一把国内pull/push docker镜像的酸爽,同时还想测试一下在Windows 10自带的Linux环境中运行docker的话,那么可以放心大胆的在运行Windows 10的计算机上体验Bluemix的Containers服务。
经过实际测试,在国内访问US South的速度比UK好很多,因此这里我使用US South region来进行实验。总体来说,Bluemix的文档质量还是很高的,基本上没有什么错误。当然,现在看起来还只有英文版。
Bluemix的Containers可以使用三个来源的docker images:IBM Public,Docker Hub和自己制作的镜像。IBM Public的镜像现在还很少,只有可怜的3个。
如果要使用Docker Hub的image和上传自己的image,需要在客户端安装Bluemix CLI,Cloud Foundry CLI和ibm-containers插件。当然docker也是必须要在客户端安装的。看上去有些复杂...
Docker的安装比较简单,按照官方文档操作就可以完成。注意不同的Ubuntu版本操作略有不同。安装完成后,验证一下docker安装是否正常。
docker run hello-world
从这里下载Bluemix CLI,根据页面上的说明解压并执行安装命令。
wget http://public.dhe.ibm.com/cloud/bluemix/cli/bluemix-cli/Bluemix_CLI_0.4.1_amd64.tar.gz tar -xvf Bluemix_CLI_0.4.1_amd64.tar.gz cd Bluemix_CLI/ sudo ./install_bluemix_cli
从Github下载Cloud Foundry的CLI。下载Debian 64位的Installers,不要下载Binaries。
wget https://s3.amazonaws.com/go-cli/releases/v6.21.1/cf-cli-installer_6.21.1_x86-64.deb sudo dpkg -i cf-cli-installer_6.21.1_x86-64.deb
安装完成后,执行“cf --help”应该正确显示cf的帮助说明。
安装ibm-containers插件,这是一个Cloud Foundry CLI的插件。
cf install-plugin https://static-ice.ng.bluemix.net/ibm-containers-linux_x64
安装完成后,执行“cf plugins”验证ibm-containers插件是否安装成功。
接下来我们在本地创建一个docker镜像,以下是Dockerfile示例(镜像中的内容仅供演示参考,实际操作时请用自己的镜像替代):
FROM ubuntu:goproxy-v1 EXPOSE 9443 CMD ["/root/goproxy","-config","/root/config.json"]
这个镜像比较简单,执行“/root/goproxy”并传递2个参数:"-config"和"/root/config.json"。确保相应的文件已经copy到base镜像(ubuntu:goproxy-v1)中。把host上的文件copy到镜像中可以使用:“sudo docker cp”命令(使用sudo执行)。
构建镜像(注意命令行最后是个“.”)
docker build -t ubuntu:goproxy-v2 .
镜像构建完成后,在本地测试镜像是否能正常运行
docker run -p 9443:9443 ubuntu:goproxy-v2
镜像构建成功后,我们将本地构建的镜像push到私有库中。Bluemix Containers为用户在每个region各提供一个私有的docker repository。
登录到Bluemix,注意“-a”参数,这个用来指定api的endpoint,每个region的endpoint都是不一样的。
cf login -a api.ng.bluemix.net
输入用户名和密码登录,然后根据提示选择一个space:
使用ibm-containers插件登录到Containers服务(这个命令需要使用sudo执行,否则执行命令后没有任何反应就退出了):
sudo cf ic login
登录成功后出现以下提示:
将上图中3条黄色标记的命令依次复制并执行一遍,用于设置使用本地的docker客户端操作Bluemix Containers服务。每次登陆都要这样执行一次,的确有点烦...
如果是首次登录Containers服务,需要在当前region为Containers服务设置一个namespace,注意这个namespace不是前文中登录Bluemix选择的space。
# “htcn-us-south-1”是namespace的名称。
# 记住namespace名称,后续步骤会用到。 sudo cf ic namespace set htcn-us-south-1
设置完成后,本地的docker客户端就可以操作Bluemix的Containers服务了。
给本地的docker镜像打标签:
docker tag ubuntu:goproxy-v2 registry.ng.bluemix.net/htcn_us_south_1/ubuntu:goproxy-v2
这个命令看起来有些复杂:
- “ubuntu:goproxy-v2”是本地镜像名称和标签
- “registry.ng.bluemix.net/htcn_us_south_1/ubuntu:goproxy-v2”是远程repository的名称和标签
- 远程repository的名称和标签格式为:[Bluemix region URL]/[Containers的namespace]/[镜像名称]:[镜像标签]
如果已经熟悉并使用过其他的docker服务(CaaS),这个理解起来并不复杂。
推送本地镜像到Containers服务的私有repository中:
sudo docker push registry.ng.bluemix.net/htcn_us_south_1/ubuntu:goproxy-v2
登录到Bluemix的web控制台,选择region后进入Containers服务,在新建container页面中可以看到刚才上传的image。
选择这个image,开始创建container。
按提示输入container的名称,选择container的大小,指定公网IP地址。然后点击“Create”按钮开始创建container。
运行中的container:
总体来说IBM Bluemix Containers服务的使用过程还是很流畅的,CLI和web控制台操作起来都比较容易上手。文档完整清晰,没有明显的差错。如果要说缺点的话,那就是在国内的访问速度的确不咋地(但这个也是并非IBM能力范围内可以快速解决的问题)。期待由世纪互联运营的IBM Bluemix中文公众版尽快上线吧!
最后提醒一个“小坑”,Containers服务目前只能对外开放:22,80,443,9080,9443几个端口,详细信息请参考这里。