肖远昊 译 分布式实验室
第1节:关于Docker
复杂的应用程序正在向容器化技术(如Docker)转移,以方便部署,简化管理,提高可靠性,平台可移植性和微服务支持,因此如果你的应用程序尚未部署在容器中,相信你很快就会。Docker容器将软件包装在完整的文件系统中,包含运行所需的所有内容:代码,运行时,系统工具,系统库 – 这些安装在服务器上的东西。
第2节:安装Docker
Software | Link |
The Docker Toolbox | https://www.docker.com/products/docker-toolbox |
注意:对于Mac或Windows,都要双击安装程序。下载并运行的所有步骤以及验证/测试方法可以参考:(Mac,https://docs.docker.com/mac/step_one/;Windows,https://docs.docker.com/windows/step_one/)。请确保在安装指南的步骤4中“鲸鱼”图标可见,并且“hello-world”容器已成功运行。
第3节:安装MyEclipse
Software | Link |
Latest MyEclipse installer. (It has a free 30-day trial) | https://www.genuitec.com/products/myeclipse/download/ |
第4节:构建Web示例程序
启动MyEclipse
-
选择MyEclipse > Examples On-Demand。“示例”选项卡就会在MyEclipse仪表板上打开。
-
选择Spring,然后点击”Cart Example”那个示例的Install按钮。
-
一旦安装完成,”SpringShoppingCartExample”工程就会被添加到你的workspace中。
第5节:创建一个Tomcat 7 Docker容器
1. 为工程创建一个Dockerfile
在”SpringShoppingCartExample”工程上点击右键,选择New > Folder。将文件夹命令为”DockerResources”。
在”DockerResources”文件夹上点击右键,选择New > File。将文件命令为”Dockerfile”(保证名称和大小写一致)。
-
在Dockerfile中加入:
# We'll be using the curated Tomcat 7 container from DockerHub
FROM tomcat:7
-
你的工作空间(workspace)将如下图所示:
2. 设置Docker命令的终端
使用Docker容器涉及在shell中直接运行大量命令行,可以从MyEclipse中轻松地使用Terminal视图来完成,如下所述:
-
打开应用程序首选项(preferences),选择Terminal > Local Terminal,然后在Arguments中写入”-l”(这是一个dask-el)。这样确保你在“终端”视图中启动的shell与登录shell类似,并且能够获得正确的执行路径,因此你可以找到所有Docker工具箱命令。
打开一个终端,工作目录就是之前建立的”DockerResources”。右击”DockerResources”,然后选择Show In > Terminal。
3.eval命令将设置环境变量,让Docker命令能够正常工作,docker version命令将简单地显示目前的环境配置。
$ eval $(docker-machine env default) $ docker version Client: Version: 1.11.1 API version: 1.23 Go version: go1.5.4 Git commit: 5604cbe Built: Tue Apr 26 23:44:17 2016 OS/Arch: darwin/amd64
Server: Version: 1.11.1 API version: 1.23 Go version: go1.5.4 Git commit: 5604cbe Built: Wed Apr 27 00:34:20 2016 OS/Arch: linux/amd64
第6节:测试Tomcat 7 Docker容器
构建一个Tomcat 7 Docker容器的镜像 – 根据Dockerfile文档中的说明使用下面提到的命令。
注意:镜像是容器的详细定义,类似于类是实例化对象的详细定义。
下面的命令行将会:
构建一个容器镜像
将镜像存放到本地仓库MyEclipse中
将镜像命名为examples
创建一个带有”run”标签的版本
$ docker build -t myeclipse/examples:run Sending build context to Docker daemon 2.048 kB Step 1 : FROM tomcat:7 ---> 705d4a88eedc Successfully built 705d4a88eedc
1. 在终端上运行如下命令来启动一个容器。这条命令告诉Docker服务端使用后台进程启动一个容器(使用-d参数),并且将容器内的端口8080(Tomcat默认端口)映射到宿主机上的8080端口,宿主机指的是一个运行所有Docker容器的虚拟机。Docker服务端将返回正在运行的容器的内部ID。
$ docker run -d -p 8080:8080 myeclipse/examples:run 12b15728e8adab5e49e484524a319f7349275f3165294161c3118220801ea7
提示:运行ps命令可获取运行容器的更详细状态。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12b15728e8ad myeclipse/examples:run "catalina.sh run"
下面的命令告诉Docker宿主机的IP:
$ docker-machine env export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/todd/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default"
2. 关闭Tomcat 7 Docker容器
$ docker stop cranky_mcnulty
1. 配置SpringShoppingCartExample的部署
1. 新建一个部署,在工程上点击右键,选择MyEclipse > Add and Remove Project Deployments…
2. 在”Manage Deployments”对话框中,点击Add…按钮,为部署选择一个新的服务类型。
3. 在”Deploy Modules”对话框中:
选择”manually define a new server”
在”Basic”栏目中,选择”Externally Launched Server”
最后,在”Server name”中填上”Docker Tomcat 7 Container”,然后点击”Next”按钮。
4. Docker安装设置一些虚拟机配置,能够更容易共享主目录下的任何位置,在”Deploy Location”中填入”
5. 发布
6. 状态将会变成”Synchronized”。将鼠标悬停在部署行上,在弹出的窗口上确认应用程序现在是否已部署到指定的位置。MyEclipse让所设定的位置与在工作区中对代码所做的任何更改保持同步,这使得在Docker容器中测试更改变得非常简单。
2. 使用我们的部署来启动Docker容器
1. 我们需要启动Docker容器,以便将本地部署映射到容器文件系统中的正确位置。这可以使用-v选项作为docker run命令的一部分,通过指定的数据卷映射来实现。下面的命令与之前用于启动Docker容器的命令完全相同,只是现在我们将SpingShoppingCartExample的部署目录映射到Docker容器中文件系统的正确位置,以便Tomcat知道应用程序已部署。完整命令如下所示:
docker run -v "/Users/todd/Applications/DockerDeployments/SpringShoppingCartExample":/usr/local/tomcat/webapps/SpringShoppingCartExample -p 8080:8080 -d myeclipse/examples:run
2. 使用MyEclipse内部的Web浏览器,打开网址http://192.168.99.100:8080/SpringShoppingCartExample/%22,然后就会看到Tomcat 7 Docker容器中运行这”SpringShoppingCartExample”。成功运行的屏幕截图如下所示:
最后的提示
既然你熟悉一些关键的Docker命令,那么快捷方式是什么?MyEclipse 2016 CI 4加入了将经常使用的Docker命令从Snippets视图拖放到终端的功能 – 一个真正节省时间的方式!
总结
希望文章中对Docker容器的介绍对你有用,并且现在你可以在Docker容器中运行SpringShoppingCartExample。我敢打赌,你会认为能够轻松地调试这个应用程序是一件很赞的事情,我将在下一篇博客中介绍关于调试的细节。
本文为翻译文章,点击阅读原文链接即可查看原文。