前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 实战教程之从入门到提高 (六)

Docker 实战教程之从入门到提高 (六)

作者头像
Jerry Wang
发布2022-04-19 12:04:33
2960
发布2022-04-19 12:04:33
举报

本教程的前五篇文章:

以及通过这篇文章的介绍,我们深入学习了 Docker 技术的三大要点。

本文继续通过实战来深入了解 Docker 技术。

练习1:运行在 Docker 里的 SpringBoot 应用,如何查看记录在文件系统的日志

通过本教程前面的练习,我们已经学习了将一个 SpringBoot 应用打包成 Docker 镜像的步骤。那么这个 SpringBoot 应用运行在 Docker 容器镜像实例时,如何查看其生成的日志文件?

DockerFile如下:

代码语言:javascript
复制
FROM openjdk:8-jdk-alpine
VOLUME /tmp
VOLUME /log
ADD target/prolikeService.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -jar /app.jar

定义了一个 log 的持久化存储,这样 SpringBoot 应用在容器里运行时,我们可以用命令行进入容器内部,查看 log 文件夹下的日志文件。

在 SpringBoot 应用的 Application.properties 配置文件里,设置日志文件的输出目录为 log:

使用下列的命令行制作镜像:

docker build -t jerry/springbootexample:v1 .

使用下面的命令行在镜像里运行 SpringBoot 应用:

docker run -p 8000:9000 --name jerrydockerdemo -d jerry/springbootexample:v1 使用 docker ps 查看镜像 id:

使用下面的命令行进入镜像:

sudo docker exec -it 8302db78f838 /bin/sh 这样就在 Docker 镜像里查看 SpringBoot 应用运行时生成的日志文件:

练习2:Dockerfile 里的 VOLUMES 关键字

我有一个如下的 Dockerfile:

定义了一个名为 log 的 VOLUME, 这样该 SpringBoot 应用运行在 Docker 容器时,我可以用如下命令,进入 Docker 容器内部,到 log 文件夹下查看该 SpringBoot 应用运行时产生的日志:

docker exec -it <容器id> /bin/sh SpringBoot 应用的 Application.properties 文件:

Dockerfile 里的 VOLUMES 关键字,会在宿主机的目录 /var/lib/docker/volumes 下面生成一个文件夹:

该文件夹里的 _data 子文件夹,存放的就是我们用命令 docker exec -it 进入容器内部后看到的 log 文件夹下的数据。

练习3:另一种办法直接在宿主机上的文件夹内查看 Docker 镜像运行的日志文件

我们可以用 docker ps 首先找到某个 Docker 容器的 id,再使用关键字 docker logs <容器id> 打印出该容器产生的日志:

同样,在宿主机目录 /var/lib/docker/containers 下面,能发现一个文件夹,其前 12 位名称正好是我们在命令 docker ps 里查看到的容器 id:

进入该文件夹,即可查找到以 -json.log 结尾的日志文件:

练习4:在 Docker 里运行 Microsoft SQL 服务器

这个例子展示了如何创建名为 DemoDB 的 MSSQL 数据库,以及名为 Orders 的数据库表,以及两行测试数据。

app 文件夹下的 setup.sql 负责创建数据库,数据库表和测试数据。

init-db.sh 文件用于配置数据库用户名和密码。

docker 文件夹完整层级结构:

Dockerfile 用于创建 docker 镜像。最后一行命令,执行 app 文件夹下面的 entrypoint.sh 文件。

根据 Dockerfile 构建一个镜像:

  • 进入如下文件夹: C:\Code\referenceCode\SAP Kyma教程例子\database-mssql 执行命令行:

docker build -t i042416/mssql -f docker/Dockerfile .

注意,因为基于的镜像名称为 microsoft/mssql-server-linux, 故这个命令应该在 linux 操作系统里完成:

镜像成功制作完毕:

docker 镜像制作完毕后,上传到 docker hub:

docker push i042416/mssql 上传成功:

本地运行这个镜像:

sudo docker run -e ACCEPT_EULA=Y -e SA_PASSWORD=Yukon900 -p 1433:1433 --name sql1 -d i042416/mssql 进入镜像内部,打开 bash shell:

docker exec -it sql1 “bash”

Start the sqlcmd tool, which allows you to run queries against the database, by running this command: /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P Yukon900 输入如下 query 命令:

1> USE DemoDB 2> SELECT * FROM ORDERS 3> GO

结果:成功读取到两条订单数据:

在 Docker 内部的 /usr/src/app 文件夹下,确实发现了我制作 docker 镜像时的文件:

Microsoft SQL 服务器,安装在 /opt 目录下:

总结

本文首先介绍了给定一个运行在 Docker 容器中的 SpringBoot 应用,如何用两种不同的交互式方式进入容器实例内部查看其运行时生成的日志文件,回顾了之前学习过的 Dockerfile 里 VOLUMES 关键字的知识点,然后介绍了在 Docker 容器里运行 Microsoft SQL 服务器的详细步骤。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 练习1:运行在 Docker 里的 SpringBoot 应用,如何查看记录在文件系统的日志
  • 练习2:Dockerfile 里的 VOLUMES 关键字
  • 练习3:另一种办法直接在宿主机上的文件夹内查看 Docker 镜像运行的日志文件
  • 练习4:在 Docker 里运行 Microsoft SQL 服务器
  • 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档