您以前听说过Docker吗? 最有可能的。 如果没有,请放心,我会尽力为您总结一下。 Docker可能是当前最热门的技术之一。 它有可能改变我们构建,部署和分发应用程序的方式。 同时,它已经在开发过程中产生了巨大的影响。
在某些情况下,开发环境可能非常复杂,以至于很难保持不同团队成员之间的一致性。 我很确定我们大多数人已经遭受“在我的机器上工作”综合症,对吗? 解决该问题的一种方法是构建具有所有设置的虚拟机(VM),以便您可以在团队中分发它们。 但是VM速度很慢,很大,如果它们没有运行,则无法访问它们。
什么是Docker?
简短的答案:它就像一个轻量级的VM。 实际上,情况并非如此,因为Docker与常规VM不同。 Docker为您的应用程序创建了一个容器,并与所有必需的依赖项一起打包并可以运行。 这些容器在共享的Linux内核上运行,但是它们彼此隔离。 这意味着您不需要通常的VM操作系统,从而可以显着提高性能并缩小应用程序大小。
让我们再深入一点:
Docker镜像
Docker映像是用于创建Docker容器的只读模板。 每个图像都由一系列构成最终图像的层构成。 如果需要使用Ubuntu和Apache分发内容,请从基本的Ubuntu映像开始,然后在顶部添加Apache。 如果以后要升级到Tomcat实例,只需在映像中添加另一层。 您只需发布更新,而不是像使用VM那样分发整个映像。
Docker注册表
Docker注册表也称为Docker Hub,是一个Docker Image存储库。 这与用于Java库的Maven存储库的概念相同。 下载或上传图像,一切顺利。 Docker Hub已经包含了大量可供使用的映像,从简单的Unix发行版到功能完善的应用服务器。
Docker容器
Docker容器是Docker映像的运行时组件。 您可以在隔离的上下文中从同一Docker镜像中旋转多个容器。 可以运行,启动,停止,移动和删除Docker容器。
我该如何开始?
当然,您需要安装Docker 。 请参考Docker的安装指南 。 他们非常好,我安装软件没有问题。 确保遵循正确的系统指南。
我们的第一个Docker容器
安装Docker之后,您可以立即输入命令行:
docker run -it -p 8080:8080 tomcat
您应该看到以下消息:
无法在本地找到图像“ tomcat:latest”
并开始大量下载。 与Maven一样,在构建应用程序时,它会通过访问Docker Hub来下载运行Tomcat所需的库。 下载需要一段时间。 (太好了,还有另外一件事可以下载Internet。幸运的是,我们可以使用ZipRebel来快速下载它)。
下载所有内容后,您应该看到Tomcat实例正在启动,并且可以通过在Linux框中转到http://localhost:8080来访问它。 对于Windows和Mac用户,稍微复杂一些。 由于Docker仅在Linux环境中工作,因此要在Windows和Mac中使用它,您需要boot2docker (安装指南中应具有)。 实际上,这是一个完全通过内存在Linux上运行Docker的VM。 要访问Docker容器,您需要参考此VM IP。 您可以使用以下命令获取IP:
boot2docker IP
。 解释命令:
| 用于创建和启动新的Docker容器的命令。 |
| 要以交互方式运行,因此您可以在运行容器后看到。 |
| 这是将内部容器端口映射到外部主机(通常是您的计算机)。 端口映射信息只能在创建容器时设置。 如果未指定,则需要检查Docker分配的端口 |
| 要运行的图像的名称。 这链接到Docker tomcat存储库 。 上面有说明,因此Docker知道如何运行服务器。 |
请记住,如果停止并再次运行同一命令,则说明您正在创建并运行一个新的容器。
多个容器
您可以通过发出以下命令来运行多个Tomcat实例:
docker run -d -p 8080:8080 --name tomcat tomcat
docker run -d -p 9090:8080 --name web tomcat
tomcat和web的 Tomcat容器。 只要记住要更改端口映射和名称即可。 添加名称对于控制容器很有用。 如果没有, Docker将为您随机生成一个。
-d指示Docker在后台运行容器。 现在,您可以使用以下命令控制容器:
| 查看所有正在运行的Docker容器的列表。 添加 |
| web的容器。 |
| web的容器。 |
| web的容器。 |
| Web日志的容器。 |
连接到容器
如果执行命令docker exec -it tomcat bash ,您将能够连接到容器外壳并探索环境。 例如,您可以使用ps -ax验证正在运行的进程。
Tomcat Web Bash
radcortez:~ radcortez$ docker exec -it web bash
root@75cd742dc39e:/usr/local/tomcat# ps -ax
PID TTY STAT TIME COMMAND
1 ? Ssl+ 0:05 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=
47 ? S 0:00 bash
51 ? R+ 0:00 ps -ax
root@75cd742dc39e:/usr/local/tomcat#
与容器互动
让我们向容器添加一个文件:
echo "radcortez" > radcortez
退出容器,但保持其运行。 执行docker diff web 。 您将看到一堆与tomcat临时文件相关的文件,以及我们刚刚添加的文件。 此命令评估正在运行的容器和原始映像之间的文件系统差异。
结论
我们仅涉及Docker功能的表面。 Docker是否将成为必不可少的工具尚需时日 。 目前,它正在受到Google,Microsoft或Amazon等大型公司的广泛采用。 Docker最终可能最终会失败,但它确实打开了一个旧的讨论,尚无明确答案。
翻译自: https://www.javacodegeeks.com/2015/04/get-into-docker.html