docker基础(四)之docker run(第一弹),2024年最新八年Linux运维开发心路历程

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
img

正文

用于学习和记录,以下内容来自chatgpt3.5,网络等,补充例子。

本文介绍了docker run的基础用法,及这些options的详细解释和例子。包括 -a stdin;-d, -i, -t, -P, -p, --rm, --name, --dns, --dns-search

docker系列其他文章:docker专栏

由于内容比较多,分为两篇博文,本文只对部分options进行详细说明,其他选项说明可以查看:
docker基础(五)之docker run(第二弹)

其他相关:docker基础(六)之docker create和docker exec

语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker run 创建一个新的容器并运行一个命令

命令选项用法速查

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与-t同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • --name="nginx-lb: 为容器指定一个名称;
  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h "mars": 指定容器的hostname;
  • -e username="ritchie": 设置环境变量;
  • --env-file=[]: 从指定文件读入环境变量;
  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container 四种类型;
  • --link=[]: 添加链接到另一个容器;
  • --expose=[]: 开放一个端口或一组端口;
  • --volume , -v: 绑定一个卷

OPTIONS说明:

-a stdin

指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR三项.

STDIN/STDOUT/STDERR指的是什么?

这些是标准的I/O流程符号

STDIN(标准输入)是指向程序的输入流,可以通过键盘或者重定向输入到程序中。

STDOUT(标准输出)是指向程序的输出流,程序默认会将输出发送到标准输出,可以重定向到文件或者其他地方。

STDERR(标准错误)也是一个输出流,用于发送程序的错误信息。

在Docker中,-a stdin参数可以将容器的标准输入重定向到指定的文件或设备,而STDIN/STDOUT/STDERR则是定义了标准的输入、输出、错误流的含义。

举例

假设我们有一个简单的Docker容器,该容器内部的程序需要从标准输入读取数据并将结果输出到标准输出或标准错误。

将容器的标准输入、标准输出、标准错误重定向到本地文件

我们可以使用docker run命令来启动一个容器,并将容器的标准输入、标准输出、标准错误重定向到本地文件。假设我们有一个名为"input.txt"的文件,我们想将其内容作为容器的标准输入,并将容器的标准输出和标准错误分别重定向到"output.txt"和"error.txt"文件中,我们可以使用以下命令:

docker run -i -a stdin=input.txt -a stdout=output.txt -a stderr=error.txt <image>

上述命令中,-i表示在容器的标准输入上启用交互式连接

-a stdin=input.txt表示将容器的标准输入重定向到"input.txt"文件

-a stdout=output.txt表示将容器的标准输出重定向到"output.txt"文件

-a stderr=error.txt表示将容器的标准错误重定向到"error.txt"文件。

这样,当容器启动后,它将从"input.txt"文件读取输入数据,并将输出和错误信息分别写入"output.txt"和"error.txt"文件中。

在Docker中,除了文件外,还可以将标准流重定向到设备或网络。

将容器的标准流重定向到设备

重定向到设备:

docker run -a stdin=/dev/tty -a stdout=/dev/lp0 -a stderr=/dev/console <image>

在这个例子中,标准输入被重定向到终端设备(/dev/tty),标准输出被重定向到打印机设备(/dev/lp0),标准错误被重定向到控制台设备(/dev/console)。

将容器的标准流重定向到网络

重定向到网络:

docker run -a stdout=| nc example.com 80

这个例子中,标准输出通过管道重定向到网络连接,使用nc命令将输出发送到远程主机的端口80。

-d

后台运行容器,并返回容器ID;
在使用 -d 参数时,容器启动后会进入后台。 某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach 命令或 nsenter 工具等。

当使用-d参数时,容器将在后台运行,并返回容器的ID。这意味着容器将在后台运行,而不会占用当前终端的控制权。

示例

以下是一个示例,假设我们有一个名为my-container的容器,我们想要在后台运行它,并获取容器的ID:

docker run -d <image>

运行以上命令后,Docker会在后台启动指定的容器,并返回该容器的ID。通过此命令,容器将会在后台运行,而不会阻塞当前终端的控制权,同时可以获得容器的ID以供进一步操作。

应用场景

-d参数在Docker中的应用场景包括但不限于以下几种情况:

  • 后台服务运行:如果你需要在Docker中运行一项长期运行的服务,而不希望它占用你的终端,你可以使用-d参数将容器在后台以守护进程的方式运行。
  • 定时任务和周期性任务:有些任务需要以一定的时间间隔或者定时执行,使用-d参数可以让这些任务在后台按照你的计划自动执行,而不需要手动触发。
  • 后台作业:某些场景下,你可能需要在Docker中运行一些后台作业或者自动化任务,通过-d参数可以更加方便地实现这些目的。

总之,-d参数适用于需要在后台运行的场景,这样可以让容器以守护进程的方式独立运行,并且不会阻塞当前终端的控制权。

返回的容器ID作用

返回的容器ID可以用于识别和管理容器。

一旦容器在后台以守护进程的方式运行,容器ID就可以用于执行其他Docker命令,如停止容器、查看容器日志、执行进入容器等操作。

怎么通过容器ID查看任务的日志

要通过容器ID来查看任务的执行日志或状态,可以使用docker logs命令。这对于在容器中运行的服务或定时任务来说非常有用。
举个例子,假设我们有一个名为 “my-container” 的容器,我们可以通过以下方式使用容器ID来查看其日志:

docker logs <container_id>

例如如果容器ID是e3f00b2aedff,我们可以使用以下命令来查看这个容器执行任务的日志:

docker logs e3f00b2aedff

这将显示容器内服务或任务的输出,可以帮助我们了解任务的执行状态和日志信息。

具体来说,可以使用容器ID来执行如下操作:

  1. 停止容器:使用docker stop命令,需要提供容器ID来指定哪个容器进行停止操作。
  2. 查看容器日志:使用docker logs命令可以查看容器的日志输出,同样需要提供容器ID
  3. 进入容器:使用docker exec命令可以在运行中的容器内执行命令,同样需要提供容器ID

因此,返回的容器ID可以用于作为容器的唯一标识,用于执行其他针对容器的操作。

-i

以交互模式运行容器,通常与 -t 同时使用;

-t

为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-i参数在Docker中表示以交互模式运行容器。通常与-t参数一起使用,-t参数表示分配一个伪终端(pseudo-TTY)-i-t一起使用时,可以让用户与容器进行交互,从而可以输入命令并查看容器的输出。

使用-i参数的含义是告诉Docker在容器内部打开一个交互式会话,允许用户在终端中输入命令,并且能够查看容器执行命令的实时输出。

举个例子,假设我们有一个名为 “my-container” 的容器,我们可以通过以下命令以交互模式运行容器(假设该容器包含了交互式的命令行工具):

docker run -it <image>

在这个例子中,-it参数结合了-i-t,启动了一个交互式终端,允许用户输入命令并查看实时输出。

伪终端(pseudo-TTY)是什么,怎么使用?

伪终端(pseudo-TTY)是一种**在计算机中模拟终端设备的技术,使用户可以与程序进行交互。**在Docker中,-t参数用于分配一个伪终端给容器,并将容器的标准输入和输出连接到此伪终端,使用户可以与容器中的命令进行交互。

下面是一个示例,演示如何使用-t参数来分配一个伪终端给容器:

docker run -t -i ubuntu /bin/bash

在这个例子中,我们使用-t参数来为容器分配一个伪终端,同时使用-i参数以交互模式运行容器。在这种情况下,我们使用了 ubuntu 镜像,并执行了 /bin/bash 命令,这将在容器中启动一个交互式的 Bash shell这样,用户就可以与容器中运行的 Bash shell 进行交互。

一旦容器中的 Bash shell启动,你就可以在终端中输入命令,并且能够看到命令的输出。例如,你可以运行 ls 命令查看容器的文件列表,或者运行其他的系统命令。

其他方式使用伪终端进行交互

除了交互式的 Bash shell,还有很多其他方式可以在 Docker 容器中使用伪终端(pseudo-TTY)进行交互。以下是一些示例:

1. 运行交互式的 Python 解释器:
docker run -it python /usr/bin/python

这个命令会启动一个交互式的 Python 解释器,允许你在容器中编写和执行 Python 代码。

2. 运行交互式的 Node.js 控制台:
docker run -it node /usr/bin/node

这个命令会启动一个交互式的 Node.js 控制台,允许你在容器中编写和执行 JavaScript 代码。

3. 运行交互式的 MySQL 客户端:
docker run -it mysql mysql -h <host> -u <username> -p

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
[外链图片转存中…(img-TJjaI2n9-1713318651836)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值