Docker系列教程05-容器常用命令

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 原文:http://www.itmuch.com/docker/05-docker-command-containers/本节我们来讨论Docker容器的常用命令。

原文:http://www.itmuch.com/docker/05-docker-command-containers/

本节我们来讨论Docker容器的常用命令。

新建并启动容器[重要]

使用以下docker run 命令即可新建并启动一个容器。该命令是我们最常用的命令了,它有很多选项,下面笔者列举一些常用的选项。

① -d选项:表示后台运行

② -P选项:随机端口映射

③ -p选项:指定端口映射,有以下四种格式。

ip:hostPort:containerPort

ip::containerPort

hostPort:containerPort

containerPort

④ --network选项:指定网络模式,该选项有以下可选参数:

--network=bridge: 默认选项,表示连接到默认的网桥。

--network=host:容器使用宿主机的网络。

--network=container:NAME_or_ID:告诉Docker让新建的容器使用已有容器的网络配置。

--network=none:不配置该容器的网络,用户可自定义网络配置。

示例1:

docker run java /bin/echo 'Hello World'
AI 代码解读

这样终端会打印Hello World的字样,跟在本地直接执行/bin/echo 'Hello World' 一样。

示例2:

docker run -d -p 91:80 nginx
AI 代码解读

这样就能启动一个Nginx容器。在本例中,我们为docker run添加了两个参数,含义如下:

-d                           # 后台运行
-p 宿主机端口:容器端口         # 开放容器端口到宿主机端口
AI 代码解读

访问http://Docker宿主机IP:91/ ,将会看到如图12-3的界面:

12-3.png

图12-3 Nginx首页

TIPS

需要注意的是,使用docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像,Docker就会自动从Docker Hub下载镜像并启动一个Docker容器。

列出容器[重要]

使用docker ps 命令即可列出运行中的容器。执行该命令后,可看到类似于如下的表格。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
784fd3b294d7        nginx               "nginx -g 'daemon off"   20 minutes ago      Up 2 seconds        443/tcp, 0.0.0.0:91->80/tcp   backstabbing_archimedes
AI 代码解读

如需列出所有容器(包括已停止的容器),可使用-a参数。

该表格包含了七列,含义如下:

① CONTAINER_ID:表示容器ID。

② IMAGE:表示镜像名称。

③ COMMAND:表示启动容器时运行的命令。

④ CREATED:表示容器的创建时间。

⑤ STATUS:表示容器运行的状态。Up表示运行中,Exited表示已停止。

⑥ PORTS:表示容器对外的端口号。

⑦ NAMES:表示容器名称。该名称默认由Docker自动生成,也可使用docker run命令的--name选项自行指定。

命令格式:

docker ps [OPTIONS]
AI 代码解读

参数:

Name, shorthand Default Description
--all, -a false 列出所有容器,包括未运行的容器,默认只展示运行的容器
--filter, -f 根据条件过滤显示内容
--format 通过Go语言模板文件展示镜像
--last, -n -1 显示最近创建n个容器(包含所有状态)
--latest, -l false 显示最近创建的容器(包含所有状态)
--no-trunc false 不截断输出
--quiet, -q false 静默模式,只展示容器的编号
--size, -s false 显示总文件大小

示例:

docker ps -n 5
docker ps -a -q
AI 代码解读

停止容器[重要]

使用docker stop 命令,即可停止容器。

命令格式:

docker stop [OPTIONS] CONTAINER [CONTAINER...]
AI 代码解读

参数:

Name, shorthand Default Description
--time, -t 10 强制杀死容器前等待的时间,单位是秒

示例:

docker stop 784fd3b294d7
AI 代码解读

其中784fd3b294d7 是容器ID,当然也可使用docker stop 容器名称 来停止指定容器。

强制停止容器[重要]

可使用docker kill 命令停止一个或更多运行着的容器。

命令格式:

docker kill [OPTIONS] CONTAINER [CONTAINER...]
AI 代码解读

参数:

Name, shorthand Default Description
--signal, -s KILL 向容器发送一个信号

例如:

docker kill 784fd3b294d7
AI 代码解读

启动已停止的容器[重要]

使用docker run 命令,即可新建并启动一个容器。对于已停止的容器,可使用docker start 命令来启动。

命令格式:

docker start [OPTIONS] CONTAINER [CONTAINER...]
AI 代码解读

参数:

Name, shorthand Default Description
--attach, -a false 连接STDOUT/STDERR并转发信号
--checkpoint 从该检查点还原
--checkpoint-dir 使用自定义的检查点存储目录
--detach-keys 覆盖断开容器的关键顺序
--interactive, -i false 连接容器的STDIN

例如:

docker start 784fd3b294d7
AI 代码解读

重启容器[重要]

可使用docker restart 命令来重启容器。该命令实际上是先执行了docker stop 命令,然后执行了docker start 命令。

命令格式:

docker restart [OPTIONS] CONTAINER [CONTAINER...]
AI 代码解读

参数:

Name, shorthand Default Description
--time, -t 10 关闭容器前等待的时间,单位是秒

进入容器[重要]

某场景下,我们可能需要进入运行中的容器。

① 使用docker attach 命令进入容器。

例如:

docker attach 784fd3b294d7
AI 代码解读

很多场景下,使用docker attach 命令并不方便。当多个窗口同时attach到同一个容器时,所有窗口都会同步显示。同理,如果某个窗口发生阻塞,其他窗口也无法执行操作。

② 使用nsenter 进入容器

nsenter工具包含在util-linux 2.23或更高版本中。为了连接到容器,我们需要找到容器第一个进程的PID,可通过以下命令获取:

docker inspect --format "{{.State.Pid}}" $CONTAINER_ID
AI 代码解读

获得PID后,就可使用nsenter命令进入容器了:

nsenter --target "$PID" --mount --uts --ipc --net --pid
AI 代码解读

下面给出一个完整的例子:

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
784fd3b294d7        nginx               "nginx -g 'daemon off"   55 minutes ago      Up 3 minutes        443/tcp, 0.0.0.0:91->80/tcp   backstabbing_archimedes
[root@localhost ~]# docker inspect --format "{{.State.Pid}}" 784fd3b294d7
95492
[root@localhost ~]# nsenter --target 95492 --mount --uts --ipc --net --pid
root@784fd3b294d7:/# 
AI 代码解读

读者也可将以上两条命令封装成一个Shell,从而简化进入容器的过程。

③ docker exec

docker exec -it 容器id /bin/bash
AI 代码解读

删除容器[重要]

使用docker rm 命令即可删除指定容器。

命令格式

docker rm [OPTIONS] CONTAINER [CONTAINER...]
AI 代码解读

参数:

Name, shorthand Default Description
--force, -f false 通过SIGKILL信号强制删除正在运行中的容器
--link, -l false 删除容器间的网络连接
--volumes, -v false 删除与容器关联的卷

例1:删除指定容器。

docker rm 784fd3b294d7
AI 代码解读

该命令只能删除已停止的容器,如需删除正在运行的容器,可使用-f参数。

例2:删除所有的容器。

docker rm -f $(docker ps -a -q)
AI 代码解读

导出容器

将容器导出成一个压缩包文件。

命令格式:

docker export [OPTIONS] CONTAINER
AI 代码解读

参数:

Name, shorthand Default Description
--output, -o 将内容写到文件而非STDOUT

示例:

docker export red_panda > latest.tar
docker export --output="latest.tar" red_panda
AI 代码解读

导入容器

使用docker import 命令即可从归档文件导入内容并创建镜像。

命令格式:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
AI 代码解读

参数:

Name, shorthand Default Description
--change, -c 将Dockerfile指令应用到创建的镜像
--message, -m 为导入的镜像设置提交信息

示例:

docker import nginx2.tar nginx
AI 代码解读

拓展阅读

目录
打赏
0
0
0
0
29
分享
相关文章
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
21天前
|
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
70 20
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
303 15
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
61 23
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
275 93
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
72 17
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
131 12
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
203 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
278 11

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等