乐趣区

关于docker:Docker-实战教程之从入门到提高-六

本教程的前五篇文章:

  • Docker 实战教程之从入门到进步 (一)
  • Docker 实战教程之从入门到进步 (二)
  • Docker 实战教程之从入门到进步 (三)
  • Docker 实战教程之从入门到进步 (四)
  • Docker 实战教程之从入门到进步 (五)

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

本文持续通过实战来深刻理解 Docker 技术。

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

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

DockerFile 如下:

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 服务器的具体步骤。

本系列的前五篇文章:

  • Docker 实战教程之从入门到进步 (一)
  • Docker 实战教程之从入门到进步 (二)
  • Docker 实战教程之从入门到进步 (三)
  • Docker 实战教程之从入门到进步 (四)
  • Docker 实战教程之从入门到进步 (五)
退出移动版