侧边栏壁纸
  • 累计撰写 32 篇文章
  • 累计创建 20 个标签
  • 累计收到 17 条评论

Docker容器的日常使用

heshaohua
2023-10-25 / 0 评论 / 0 点赞 / 319 阅读 / 4,820 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-10-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Docker是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖项打包在一个轻量级的、可移植的容器中。Docker容器可以运行在任何支持Docker的主机上,使得应用程序的部署和管理变得更加简单和高效。

Docker容器的核心技术是Linux内核的cgroups和namespaces,它们提供了对容器的资源限制和隔离能力。这使得Docker容器可以在同一台主机上运行多个应用程序,而不会影响彼此的运行。

Docker镜像

Docker镜像是一个只读的模板,包含了运行Docker容器所需的所有文件和配置。镜像可以通过Dockerfile进行创建,Dockerfile是一个包含构建镜像所需命令和步骤的文本文件。

Docker日志

Docker日志是Docker容器产生的输出信息,包括标准输出、标准错误和调试信息。Docker提供了多种方式来查看和管理容器的日志,例如使用docker logs命令查看实时日志,或使用第三方日志管理系统来收集和存储日志。

Docker命令

以下是一些常用的Docker命令及其详细说明:

  1. docker pull:从Docker Hub或其他镜像仓库下载镜像。
docker pull [选项] [Docker Registry地址[:端口号]/]仓库名[:标签]
  1. docker run:运行一个新的容器。
docker run [选项] 镜像名 [命令] [参数]
  1. docker images:列出本地镜像。
docker images [选项] [仓库名[:标签]]
  1. docker ps:列出正在运行的容器。
docker ps [选项]
  1. docker rm:删除一个或多个容器。
docker rm [选项] 容器名或ID [容器名或ID...]
  1. docker rmi:删除一个或多个镜像。
docker rmi [选项] 镜像名或ID [镜像名或ID...]
  1. docker build:构建一个新的镜像。
docker build [选项] Dockerfile目录
  1. docker commit:从一个容器创建一个新的镜像。
docker commit [选项] 容器名或ID [仓库名[:标签]]
  1. docker exec:在运行的容器中执行命令。
docker exec [选项] 容器名或ID [命令] [参数]
  1. docker stop:停止一个或多个正在运行的容器。
docker stop [选项] 容器名或ID [容器名或ID...]
  1. docker start:启动一个或多个已停止的容器。
docker start [选项] 容器名或ID [容器名或ID...]
  1. docker restart:重启一个或多个正在运行的容器。
docker restart [选项] 容器名或ID [容器名或ID...]
  1. docker attach:连接到正在运行的容器。
docker attach [选项] 容器名或ID
  1. docker logs:查看容器的日志。
docker logs [选项] 容器名或ID
  1. docker network:管理Docker网络。
docker network [命令] [选项]
  1. docker volume:管理Docker卷。
docker volume [命令] [选项]

Docker镜像制作流程

Docker镜像制作流程主要包括以下几个步骤:

  1. 编写Dockerfile:

Dockerfile是一个文本文件,包含了构建Docker镜像所需的所有指令。Dockerfile中定义了基础镜像、复制文件、安装依赖、设置环境变量等操作。编写Dockerfile时,请遵循Dockerfile最佳实践。

  1. 初始化Docker构建环境:

在开始构建Docker镜像之前,需要创建一个空的目录,并将编写好的Dockerfile放在该目录中。

  1. 构建Docker镜像:

在Dockerfile所在的目录下,使用以下命令构建Docker镜像:

docker build -t <镜像名称>:<标签> .

这里的-t选项指定了镜像的名称和标签。构建过程会自动下载基础镜像并


执行Dockerfile中的指令。


4. 查看构建日志:

构建过程中,可以通过查看输出日志了解镜像构建的进度和结果。例如:

docker build -t <镜像名称>:<标签> .


5.运行Docker镜像:

镜像构建完成后,可以使用以下命令运行该镜像:

docker run -it <镜像名称>:<标签>


这里的`-it`选项表示以交互模式运行容器。

6. 推送Docker镜像:

如果需要将镜像推送到Docker Hub或其他镜像仓库,可以使用以下命令:

docker push <镜像名称>:<标签>


这里的`<镜像名称>:<标签>`应该替换为实际镜像的名称和标签。

7. 清理Docker构建环境:

在镜像构建完成后,可以删除构建过程中产生的中间层文件,以节省存储空间。使用以下命令清理构建环境:

docker system prune -a


通过以上步骤,你可以创建一个属于自己的Docker镜像,并将其用于开发和部署应用程序。

### docker 查看日志

在Docker中,可以使用`docker logs`命令来查看容器的日志。以下是一些常用的`docker logs`命令选项:

1. 查看所有容器的日志:

docker logs --all


2. 查看特定容器的日志:

docker logs <container_id>


将替换为要查看日志的容器ID。

3. 按时间范围查看日志:

docker logs --since=“2023-02-01” --until=“2023-02-10” <container_id>


将替换为要查看日志的容器ID,并将"2023-02-01"和"2023-02-10"替换为要查看的日期范围。

4. 查看指定数量的日志行:

docker logs --tail=10 <container_id>


将替换为要查看日志的容器ID,并将10替换为要查看的日志行数。

5. 查看日志并跟随更新:

docker logs -f <container_id>


将替换为要查看日志的容器ID。使用-f选项,`docker logs`命令将跟随日志的更新并实时显示。按Ctrl+C组合键停止跟随。

6. 查看日志的详细信息:

docker logs --details <container_id>


将显示日志的详细信息,包括时间戳、日志级别等。这些选项可以组合使用,以便更灵活地查看和管理Docker容器的日志。例如,可以使用`--since`和`--tail`选项来查看过去24小时内的10条日志:


docker logs --since=“24h” --tail=10 <container_id>


将替换为要查看日志的容器ID。

### 查看docker 存放日志路径

Docker默认将日志存储在/var/lib/docker目录中。在这个目录下,您可以找到名为containers的子目录,其中包含所有容器的日志文件。日志文件的命名方式为.log,其中是容器的唯一ID。

要查看特定容器的日志,可以使用以下命令:

ls /var/lib/docker/containers/<container_id>/


请将替换为相应的值。这个命令将显示容器的日志文件以及其他相关文件。要查看日志文件的内容,可以使用以下命令:

cat /var/lib/docker/containers/<container_id>/<log_file>


请将和替换为相应的值。这个命令将显示日志文件的内容。

如果您需要更改Docker的日志路径,可以在Docker配置文件(通常位于/etc/docker/daemon.json)中进行配置。以下是一个示例配置:

{
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “10m”,
“max-file”: “3”,
“filename”: “/path/to/custom/log/directory/<container_id>.log”
}
}


请将和/path/to/custom/log/directory/替换为相应的值。更改配置后,请重启Docker服务:

systemctl restart docker


之后,Docker将把日志文件存放在您指定的路径中。


### docker 日志太多导致--tail 在控制台无法打印数据

当Docker容器产生大量日志时,可能会导致--tail命令在控制台无法正常显示数据。为了解决这个问题,可以尝试以下方法:

1. 限制日志大小:

可以通过配置Docker日志驱动来限制日志文件的大小。例如,可以使用json-file日志驱动并将max-size选项设置为适当的值,以限制日志文件的大小。这样可以防止日志文件过大,从而影响控制台的显示。

2. 定期清理日志:

可以编写一个脚本,定期清理Docker容器的日志文件。例如,可以使用find和rm命令删除指定天数之前的日志文件。这样可以确保日志文件不会占用过多的磁盘空间,同时也不会影响控制台的显示。

3. 使用日志收集工具:

可以采用日志收集工具(如Elasticsearch、Logstash和Kibana,即ELK Stack)来收集和管理Docker容器的日志。这样可以更方便地查看和分析日志数据,同时也不会影响控制台的显示。

4. 优化应用程序日志:

如果可能,可以优化应用程序的日志输出,减少不必要的日志信息。这样可以减少日志文件的大小,从而减轻控制台显示的负担。

尝试以上方法后,如果问题仍然存在,可能需要进一步调查Docker或操作系统层面的问题。此时,建议查看Docker官方文档以获取更多帮助,或向Docker社区寻求支持。

docker 部署与物理机部署优劣分析

Docker和物理机部署是两种常见的应用程序部署方式,它们各自有其优势和劣势。以下是对这两种部署方式的详细比较:

1. 资源利用:Docker容器可以共享操作系统的内核,从而提高资源利用率。而物理机部署需要为每个应用程序分配单独的操作系统和资源,可能导致资源浪费。
2. 部署速度:Docker容器的部署速度通常比物理机部署更快。这是因为Docker容器已经包含了应用程序所需的所有依赖项和配置,可以直接运行。而物理机部署需要安装操作系统、配置环境和安装应用程序,过程较为繁琐。
3. 可扩展性:Docker容器可以通过横向扩展(增加容器实例数量)来提高应用程序的性能。而物理机部署需要购买更多的服务器硬件,成本较高。
4. 灵活性:Docker容器可以轻松地在云服务提供商之间迁移,提高了应用程序的灵活性。而物理机部署需要处理不同的硬件和操作系统,迁移过程较为复杂。
5. 安全性:Docker容器提供了一定程度的隔离,可以降低应用程序之间的相互影响。但是,如果容器逃逸或受到攻击,可能会影响其他容器或主机。而物理机部署可以提供更高的安全性,因为应用程序运行在独立的操作系统中。
6. 成本:Docker容器通常比物理机部署更具成本效益,尤其是在大规模部署时。然而,对于高性能应用程序或需要高度定制环境的情况,物理机部署可能是更好的选择。
7. 可维护性:Docker容器可以通过镜像进行版本控制和快速回滚,提高了应用程序的可维护性。而物理机部署需要进行手动备份和恢复,过程较为繁琐。

总的来说,Docker容器和物理机部署各有优劣。选择哪种部署方式取决于应用程序的需求和公司的预算、资源等实际情况。对于大多数应用程序来说,Docker容器是一种高效、灵活的部署方式,但对于高性能或定制环境需求较高的应用程序,物理机部署可能是更好的选择。
0

评论区