Docker Labs 项目:Java 容器化实践指南 - 运行容器详解

Docker Labs 项目:Java 容器化实践指南 - 运行容器详解

容器化入门:理解 Docker 运行机制

在 Docker 生态系统中,容器是轻量级、可执行的软件包,包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。与虚拟机不同,容器共享主机系统内核,这使得它们更加高效和快速启动。

镜像管理基础

查看本地镜像

在运行容器之前,我们需要了解本地已存在的镜像。使用以下命令查看:

docker image ls

这个命令会列出所有本地存储的 Docker 镜像,包括:

  • 镜像仓库来源(REPOSITORY)
  • 标签(TAG)
  • 唯一的镜像ID
  • 创建时间
  • 镜像大小

深入镜像历史

要了解镜像的构建历史,可以使用:

docker image history jboss/wildfly

这个命令会显示镜像的每一层构建信息,包括:

  • 每层执行的命令
  • 创建时间
  • 每层的大小
  • 注释信息

理解镜像分层结构对于优化Dockerfile和调试镜像问题非常有帮助。

容器运行模式详解

交互式运行

对于需要与容器交互的场景(如调试或配置),可以使用交互模式:

docker container run -it jboss/wildfly

参数说明:

  • -i:保持STDIN打开,即使没有连接
  • -t:分配一个伪终端

这种模式下,你会直接看到容器的控制台输出,适合初次测试和调试。要退出,可以使用Ctrl+C。

后台运行模式

生产环境通常需要容器在后台运行:

docker container run -d jboss/wildfly

参数说明:

  • -d:分离模式,容器在后台运行

命令会返回一个容器ID,可以通过以下命令查看运行状态:

docker container ls

要查看所有容器(包括停止的):

docker container ls -a

网络端口映射实战

自动端口映射

Docker 可以自动将容器端口映射到主机端口:

docker container run -d -P --name wildfly jboss/wildfly

参数说明:

  • -P:自动映射所有暴露的端口到随机主机端口
  • --name:为容器指定一个易记的名称

使用 docker container ls 查看实际映射的端口号,然后在浏览器访问 http://localhost:<映射端口>

指定端口映射

对于需要固定端口的情况:

docker container run -d -p 8080:8080 --name wildfly jboss/wildfly

参数说明:

  • -p hostPort:containerPort:将主机的8080端口映射到容器的8080端口

这样就能通过 http://localhost:8080 直接访问应用。

应用部署实战:Java EE 示例

自定义镜像部署WAR文件

  1. 创建Dockerfile:
FROM jboss/wildfly:latest
RUN curl -L https://example.com/path/to/sample.war -o /opt/jboss/wildfly/standalone/deployments/sample.war
  1. 构建镜像:
docker image build -t javaee-sample .
  1. 运行容器:
docker container run -d -p 8080:8080 --name wildfly javaee-sample
  1. 测试应用:
curl http://localhost:8080/sample/resources/persons

容器生命周期管理

停止容器

停止单个容器:

docker container stop <容器ID或名称>

停止所有运行中的容器:

docker container stop $(docker container ps -q)

删除容器

删除单个容器:

docker container rm <容器ID或名称>

删除所有已停止的容器:

docker container rm $(docker container ps -aq)

强制删除运行中的容器(谨慎使用):

docker container rm -f <容器ID或名称>

高级技巧:端口映射查询

查询容器的端口映射:

docker container port <容器ID或名称>

使用inspect命令获取详细信息:

docker container inspect --format='{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' <容器ID>

最佳实践建议

  1. 始终为生产容器指定名称(--name),便于管理
  2. 开发环境可以使用交互模式,生产环境应使用分离模式
  3. 明确指定端口映射关系,避免使用随机端口
  4. 定期清理不再使用的容器和镜像
  5. 使用Dockerfile构建自定义镜像,而不是手动修改运行中的容器

通过掌握这些核心概念和命令,你已经具备了使用Docker运行和管理Java应用容器的基本能力。下一步可以探索更高级的主题,如容器网络、数据卷和多容器编排等。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翟江哲Frasier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值