【云原生 | 06】Docker作为守护进程高效运行技巧展示

简介: Docker守护进程是用户与Docker交互的枢纽,因而它是理解所有相关部分的最佳切入点。它控制着用户机器上的Docker访问权限,管理着容器与镜像的状态,同时代理着与外界的交互。

🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

目录

1.Docker守护进程详解

2. 开放Docker守护进程

3. 以守护进程方式运行容器

4. 将Docker移动到不同分区

5. Docker客户端

6.  使用端口连接容器

👑👑👑结束语👑👑👑


1.Docker守护进程详解

如下图,Docker守护进程是用户与Docker交互的枢纽,因而它是理解所有相关部分的最佳切入点。它控制着用户机器上的Docker访问权限,管理着容器与镜像的状态,同时代理着与外界的交互。

守护进程与服务器,守护进程是运行在后台的一个进程,不在用户的直接控制之下。服务器是负责接受客户端请求,并执行用于满足该请求所需的操作的一个进程。守护进程通常也是服务器,接收来自客户端的请求,为其执行操作。docker命令是一个客户端,而Docker守护进程则作为服务器对Docker容器和镜像进行操作。

我们来看几个技巧,这些技巧用于展示Docker作为守护进程高效运行,同时使用docker命令与其进行的交互被限制为执行操作的简单请求,就像与Web服务器进行交互一样。第一个技巧允许其他人连接你的Docker守护进程,并执行与你在宿主机上所能执行的相同操作,第二个技巧说明的是Docker容器是由守护进程管理的,而不是你的shell会话。

2. 开放Docker守护进程

虽然默认情况下Docker的守护进程只能在宿主机上访问,但是有些情况下还是需要允许其他人访问它。读者可能遇到了一个问题,需要其他人来远程调试,或者可能想让DevOps工作流中的某一部分在宿主机上启动一个进程。

在开放Docker守护进程之前,必须先停止正在运行的实例。操作的方式因操作系统而异。如果不清楚怎么做,可以首先试试这个命令:

[root@localhost ~]# sudo service docker stop

image.gif

如果得到一个类似下面这样的消息,说明这是一个基于systemctl的启动系统:

The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try 
to use systemctl.

image.gif

可以试试这个命令:

[root@localhost ~]# systemctl stop docker

image.gif

如果这个方法有效,以下命令将看不到任何输出:

ps -ef | grep -E 'docker (-d|daemon)\b' | grep -v grep

image.gif

一旦Docker守护进程停止,就可以使用以下命令手工重启并向外界用户开放它:

docker daemon -H tcp://0.0.0.0:2375

image.gif

这个命令以守护进程方式启动Docker(docker daemon),使用-H标志定义宿主机服务器,使用TCP协议,绑定到所有IP地址上(使用0.0.0.0),并以标准的Docker服务器端口(2375)开放。如果Docker提示daemon不是一个有效的子命令,请尝试使用旧版的-d参数。

可以从外部使用如下命令进行连接:

[root@localhost ~]# docker -H tcp://<宿主机IP>:2375

image.gif

需要注意的是,在本地机器内部也需要这么做,因为Docker已经不再在其默认位置进行监听了。

3. 以守护进程方式运行容器

在熟悉了Docker之后,开始思考Docker的其他使用场景,首先想到的使用场景之一是以运行服务的方式来运行Docker容器。

Docker容器与多数进程一样,默认在前台运行。在后台运行Docker容器最常见的方式是使用标准的&控制操作。虽然这行得通,但如果用户注销终端会话就可能出现问题,用户被迫使用nohup标志,而这将在本地目录中创建一个不得不管理的输出文件……是的,使用Docker守护进程的功能完成这一点将简洁得多。

要做到这一点,可使用-d选项:

[root@localhost ~]# docker run -d -i -p 1234:1234 --name daemon ubuntu nc -l 1234

image.gif

与docker run一起使用的-d标志将以守护进程方式运行容器。-i 标志则赋予容器与Telnet会话交互的能力。使用-p 将容器的1234端口公布到宿主机上。通过-- name标志赋予容器一个名称,以便后期用来对它进行引用。最后,使用 netcat(nc)在1234端口上运行一个简单的监听应答(echo)服务器。

如果现在使用Telnet连接它并发送消息,就可以使用docker logs命令看到容器已经接收到该消息,如下:

[root@localhost ~]# telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape character is '^]'.
hello daemon
^]
telnet> q
Connection closed.
[root@localhost ~]# docker logs daemon
hello daemon
[root@localhost ~]# docker rm daemon
daemon
[root@localhost ~]#

image.gif

(1)使用telnet命令连接到容器的netcat服务器;

(2)输入发送给netcat服务器的一行文本;

(3)按Ctrl+]然后按回车键退出Telnet会话;

(4)输入q然后按回车键退出Telnet程序;

(5)运行docker logs命令查看容器的输出;

(6)使用rm命令清除容器;

4. 将Docker移动到不同分区

Docker把所有与容器和镜像有关的数据都存储在一个目录下。由于它可能会存储大量不同的镜像,这个目录可能会迅速变大。

如果宿主机具有不同分区,用户可能会更快遭遇空间限制,在这种情况下,第一时间想到的是移动Docker所操作的目录。

停止Docker守护进程,并使用-g 选项指定新的位置来启动。

首先必须将Docker守护进程停止。

假设想在/home/dockeruser/mydocker运行Docker。运行下列命令将在这个目录中创建一组新的目录和文件:

docker daemon -g /home/dockeruser/mydocker

image.gif

这些目录是Docker内部使用的,对其进行操作风险还是比较大的。

这个虽然看起来把容器和镜像从之前的Docker守护进程清除了。不过不用担心。如果杀掉刚才运行的Docker进程,并重启Docker服务,Docker客户端就会指回它原来的位置,容器和镜像也将回归。

如果想让这个移动永久有效,需要对宿主机系统的启动进程进行相应配置。

5. Docker客户端

如下图:Docker客户端是Docker架构中最简单的部件。在主机上输入docker run或docker pull这类命令时运行的便是它。它的任务是通过HTTP请求与Docker守护进程进行通信。

6.  使用端口连接容器

Docker容器从一开始就被设计用于运行服务。在大多数情况下,都是这样或那样的 HTTP服务。其中很大一部分是可以使用浏览器访问的Web服务.

这会造成一个问题。如果有多个Docker容器运行在其内部环境中的80端口上,它们将无法全部通过宿主机的80端口进行访问。接下来的技巧将展示如何通过暴露和映射容器的端口来管理这一常见场景。

使用Docker的-p 选项将容器的端口映射到宿主机上。

要从外部地址获取镜像,可以使用docker pull命令。在默认情况下,镜像将从Docker Hub下载:

[root@localhost ~]# docker pull tutum/wordpress

image.gif

要运行第一个博客,可使用如下命令:

[root@localhost ~]# docker run -d -p 10001:80 --name xiaopeng1 tutum/wordpress

image.gif

这里的docker run命令以守护进程方式(-d)及发布标志(-p)运行容器。它指定将宿主机端口(10001)映射到容器端口(80)上,并赋予该容器一个名称用于识别它(--name xiaopeng1 tutum/wordpress)。

可以对第二个博客做相同操作:

[root@localhost ~]# docker run -d -p 10002:80 --name xiaopeng2 tutum/wordpress

image.gif

如果现在运行这个命令:

[root@localhost ~]# docker ps -a | grep xiaopeng

image.gif

将看到列出的两个博客容器及其端口映射,看起来像下面这样:

9afb95ad3617 tutum/wordpress:latest "/run.sh" 9 seconds ago Up 9 seconds ➥ 3306/tcp, 0.0.0.0:10001->80/tcp xiaopeng1 
31ddc8a7a2fd tutum/wordpress:latest "/run.sh" 17 seconds ago Up 16 seconds ➥ 3306/tcp, 0.0.0.0:10002->80/tcp xiaopeng2

image.gif

现在可以通过浏览http://localhost:10001和http://localhost:10002来访问自己的容器。

要在完成后删除这些容器(假设不想保留它们),可运行下面这个命令:

[root@localhost ~]# docker rm -f xiaopeng1 xiaopeng2

image.gif

-p / P 选项的使用格式:

        > -p  <ContainerPort>:将指定的容器端口映射到物理机的随机一个端口上

        > -p  <HostPort>:<ContainerPort>:映射至指定的主机端口

        > -p  <IP>::<ContainerPort>:映射至指定的主机的 IP地址 的随机端口

        > -p  <IP>:<HostPort>:<ContainerPort>:映射至指定的主机 IP 的主机端口(最完整版)

        #主机ip 主机端口 容器端口

        > -P(大):暴露所需要的所有端口

        #将物理机的随机端口与容器的需要暴露的端口进行映射

👑👑👑结束语👑👑👑

image.gif

目录
相关文章
|
2月前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
8天前
|
前端开发 应用服务中间件 nginx
docker安装nginx,前端项目运行
通过上述步骤,你可以轻松地在Docker中部署Nginx并运行前端项目。这种方法不仅简化了部署流程,还确保了环境的一致性,提高了开发和运维的效率。确保按步骤操作,并根据项目的具体需求进行相应的配置调整。
55 25
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
1月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
152 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
1月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
69 5
|
1月前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
76 4
|
2月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
Docker 容器
docker守护进程和配置操作
service docker start  service docker stop service docker restart ...
926 0
|
13天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
160 93

热门文章

最新文章