Docker命令解读-一

这篇博客详细介绍了Docker的命令使用,特别是`docker run`命令的各种选项,包括容器的运行模式(前台与后台)、标识设置、PID、UTS、IPC、网络配置、重启策略、资源约束等。文章旨在帮助读者深入理解Docker容器的管理和配置,以便更好地利用Docker进行应用程序部署和服务提供。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

title: Docker命令解读(一)
date: 2015-11-19 18:15:05
tags: docker

categories: Docker Commands

Docker命令解读系列文章将系统讲解Docker使用的命令,方便大家学习Docker的基本操作。在写这个系列文章的时候,主要参考了Docker官方的文档,有些内容是直接的翻译。原文档地址 Docker Docs
转载请注明出处

首先从docker run 命令开始解读,这是我们使用最多的命令。当我们需要从镜像创建一个容器来运行我们的应用或提供某种服务时,就要使用docker run命令。
官方文档链接:docker run
可以运行docker run --help来查看所有的参数和使用方法
格式:

$ docker run [OPTIONS] IMAGE[:TAGS|@DIGEST] [COMMAND] [ARG...]

从格式可以看出,docker run命令必须指定一个IMAGE来运行容器。容器中有些默认配置和行为,如:
- 后台还是前台运行
- 容器标识
- 容器运行的CPU,内存等限制
- 权限等

使用[OPTIONS]选项可以改变这些默认值,使用这种方法几乎可以改变容器的所有默认行为,这也是为什么docker run命令有如此多选项的原因。
更多关于[OPTIONS]的内容可以参考Option Types
Note: 你可能需要使用sudo来运行docker run命令,如果你不想使用sudo来运行它,你可以将你的用户加入到你本机的docker组下(注意,这会影响你的系统的安全性)。
下面讲解如下几个方面的[OPTIONS]:
* 前台模式VS后台模式
* 容器标识
* PID设置
* UTS设置
* IPC设置
* 网络模式设置
* 重启策略 --restart
* 清除标识 --rm
* 安全设置
* 自定义cgroups
* 运行时资源约束
* 运行时特权,Linux Capabilities和LXC配置
* 日志驱动器(logging driver)
* 改变Dockerfile设定的默认行为

前台模式VS后台模式

使用docker run命令运行一个容器时,我们可以选择是让他后台运行(detached模式)或者前台运行(foreground模式【默认】)

后台模式

使用detached模式运行容器,需要在docker run 命令中指定-d=true(或-d)选项。使用detached模式运行起来的容器停止时不会自动移除,也就是说,在使用了-d(或-d=true)选项的docker run命令中不能指定--rm选项。
不要将类似于下面的命令传递给一个以detached模式运行起来的容器:

service XXX start

例如下面的命令试图在容器中启动nginx,运行时指定了-d选项:

docker run -d -p 80:80 nginx_image service nginx start

这确实启动了容器中的nginx服务,但是容器却没有保持运行。因为容器中的祖先进程(在这个例子中就是service nginx start)执行完返回,按照容器的设计,容器中的祖先进程返回后容器就停止了。结果,nginx服务启动了但不能使用。
在这个例子中,我们应该使用这样的命令:

docker run -d -p 80:80 nginx_image nginx -g 'daemon off;'

要与使用detached模式运行起来的容器交换信息,需要使用网络或共享卷(shared volumes),因为在detached模式下docker run命令执行完后,容器就不再监听命令行了。
要重新定位到容器可以使用docker attach命令(参考attach)。

前台模式

前台模式下,docker run命令会在新的容器中启动一个进程,并将这个进程的标准输入,标准输出和标准出错绑定到控制台上(甚至是一个伪TTY客户端)。这些都是可以配置的。

-a=[]            : 绑定'STDIN', 'STDOUT'和/或'STDERR'
-t=false         : 分配一个伪TTY终端
--sig-proxy=true :传递所有的信号给容器中的进程(仅在非tty模式下有效)
-i=false         :使STDIN保持打开,即使容器没有被连上(not attached)

如果你没有指明-a标识,默认会绑定所有的三个标准IO流。你也可以像下面这样绑定三个中的一个或多个:

docker run -a stdin -a stdout -i  -t ubuntu /bin/bash

如果要开启一个交互式的容器,必须同时指定-i-t标识,以分配一个tty终端。-i-t标识经常一起写作-it,在接下来的例子中我们经常这样使用。
当标准输出流被重置的时候,<

### Docker Application Container Engine 配置概述 Docker种容器化技术,允许开发者创建、部署和运行分布式应用程序。Docker 应用程序容器引擎(Application Container Engine)是个核心组件,负责管理容器生命周期以及与主机操作系统交互。 当遇到 `Failed to start Docker Application Container Engine` 的错误时,通常涉及以下几个方面: #### 卸载旧版本 Docker 如果之前已安装过旧版 Docker,则可能需要清理残留配置以避免冲突。可以通过以下命令卸载旧版 Docker 及其关联包[^1]: ```bash $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine ``` #### 安装最新版 Docker 完成旧版卸载后,应按照官方文档重新安装最新的稳定版本 Docker。这步骤有助于修复因版本不兼容引起的问题。 #### 检查并重载服务配置 在某些情况下,修改了 Docker 的配置文件却未同步更新 systemd 服务定义,可能导致启动失败。此时可尝试刷新守护进程缓存并重启服务: ```bash $ sudo systemctl daemon-reload $ sudo systemctl restart docker.service ``` 上述操作能够确保新的配置生效[^2]。 #### 确认 Docker Daemon 是否正常工作 日志显示无法连接到 Docker 套接字 `/var/run/docker.sock`,表明 Docker 守护进程可能并未成功启动。需验证该路径下是否存在有效套接字文件。若缺失,可通过手动方式启动调试模式下的 Docker 守护进程来排查原因: ```bash $ sudo dockerd -D ``` 此命令会启用详细日志记录功能以便于分析具体异常情况[^4]。 #### 日志中的常见提示信息解读 从提供的日志片段来看,“Cannot connect to the Docker daemon at unix:///var/run/docker.sock.” 明确指出当前环境缺少可用的 Docker 守护进程实例[^3]。进步调查应当围绕为何守护进程未能按预期初始化展开。 --- ### 总结 针对 `Docker Application Container Engine` 启动失败的情况,建议依次执行如下动作:移除遗留软件包以防干扰;依据官方指南正确部署新版本;调整完成后记得通知系统关于变更的内容并通过标准流程激活改动后的设置最后再确认基础设施层面是否有阻碍因素存在比如权限不足或者依赖项丢失等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值