Docke_常用命令详解
这篇文章分享一下笔者常用的Docker命令供各位读者参考。
为什么要用Docker?
简单来说:Docker通过提供轻量级、隔离且可移植的容器化环境,使得应用在不同平台上保持一致性、易于部署和管理,具体如下
- 环境一致性: Docker容器使得应用及其所有依赖项(如库、操作系统、配置文件等)都打包在一起,可以确保在任何地方运行时都具有相同的环境,不论是开发、测试还是生产环境。
- 跨平台兼容性: Docker容器可以在不同操作系统(如Windows、Linux和macOS)上运行,确保应用程序在不同环境中的一致性。
- 隔离性: 每个容器运行在隔离的环境中,不会干扰主机操作系统或其他容器。这样,开发人员可以在同一台机器上同时运行多个不同版本的应用和服务,而不会产生冲突。
- 轻量级和高效: 与虚拟机相比,Docker容器更加轻量级,启动速度更快,占用资源更少。这使得容器化应用的性能更好,并能够在相同的硬件上运行更多的实例。
- 可移植性: 由于Docker容器中包含了应用程序及其所有依赖项,因此可以轻松地将应用从开发环境迁移到生产环境,甚至在不同的云平台之间迁移。
- 版本控制和更新管理: Docker镜像可以被版本控制,当需要更新应用时,可以简单地创建新镜像并部署,这简化了应用的更新和回滚操作。
- 自动化部署: Docker与CI/CD(持续集成/持续部署)工具兼容,可以帮助自动化应用的构建、测试、部署和扩展,提升开发效率和运维灵活性。
- 资源利用率高: Docker容器共享操作系统内核,因此比虚拟机更高效,减少了资源的浪费。
- 分布式应用支持: Docker容器可以在集群环境中轻松运行,支持微服务架构,方便开发和管理分布式应用。
一、镜像管理
1.拉取镜像
docker pull [image]
2.查看镜像
docker images

3.导入镜像
docker load -i your_docker.tar

4.构建镜像
docker -f /path/dockerfile build -t my_image:latest .
5.将容器打包成镜像
为什么要将容器commit成镜像?
- 持久化容器状态:容器在运行时是临时的,一旦停止或删除,容器中的所有更改都会丢失。如果你在容器中做了配置或安装了一些依赖,
commit容器可以将这些更改保存为镜像,方便以后重新使用或分发。 - 版本控制:通过将容器状态保存为镜像,可以为应用创建不同的版本。例如,开发过程中每次变更后都可以创建一个新的镜像版本,便于追溯和管理。
- 迁移和分发:将容器保存为镜像后,可以通过镜像在不同环境或服务器之间迁移。这样,开发环境中的配置和软件版本可以准确复制到生产环境。
- 自动化部署:当容器的状态被
commit成镜像后,可以将这个镜像推送到 Docker Hub 或其他镜像仓库,方便团队成员或CI/CD流水线在不同机器上拉取并使用相同的镜像进行部署。 - 共享和协作:如果你在容器中做了一些定制化的修改,可以将这些修改保存为镜像,然后与团队成员共享。其他人可以基于这个镜像继续开发或部署。
简单来说,commit 容器成镜像是为了将动态容器环境固定下来,便于以后复用、管理和共享。
前提:容器正常运行中
docker commit <container_id> <repository_name>:<tag>
<container_id> 是你的容器ID。
<repository_name> 是你想要给镜像的名字。
<tag> 是你想要给镜像的标签,通常用 latest 表示最新版本。

检查是否成功

dockerfile.txt信息如下
FROM playphone:v5.0
WORKDIR /workspace
ENTRYPOINT bash start.sh & python3 rm.py & tail -f /dev/null
参数解析
- FROM playphone:v5.0:指定构建镜像时所使用的基础镜像。
- WORKDIR /workspace:设置工作目录。指定了容器内的当前工作目录。当后续的命令在容器中执行时,它们会相对于这个目录来执行。
- ENTRYPOINT bash start.sh & tail -f /dev/null:指定容器启动时运行的命令或脚本。
6.构建镜像
docker build -f /data/dockerfile.txt -t playphone:v5.1 .

检查是否成功

7.导出镜像
docker save -o <output_file>.tar <image_name>:<tag>
<output_file>.tar 是导出文件的名称。
<image_name>:<tag> 是你要导出的镜像名称和标签。

8.删除镜像
docker rmi <container_id>

二、容器管理
1.查看容器
docker ps -a
- CONTAINER ID:容器的唯一标识符(短ID)。
- IMAGE:容器是基于哪个镜像创建的。
- COMMAND:启动容器时执行的命令。
- CREATED:容器创建的时间。
- STATUS:容器的当前状态,可能是“Up”表示正在运行,或“Exited”表示已停止,后面跟着退出码等信息。
- PORTS:容器暴露的端口映射。
- NAMES:容器的名称(自动或手动设置)。

2.创建容器
docker run --gpus all -v /data:/data --shm-size 16g -it -d -p 8025:5000 --name='spiderman' carton-detect:v1.0 /bin/bash
-gpus all: 允许容器使用主机上的所有 GPU。这对于需要 GPU 加速的任务(如深度学习)非常重要。v /data:/data: 将主机上的/data目录挂载到容器内的/data目录。这允许容器访问和使用主机上的数据。-shm-size 16g: 设置共享内存大小为 16GB。这在需要大量共享内存的应用(如一些数据处理和机器学习任务)中很有用。it:i保持标准输入打开,t分配一个伪终端。通常用于需要与容器进行交互的情况。d: 后台运行容器。p 5581:18887: 将主机的 8025端口映射到容器的 5000 端口。这样可以通过主机的 8025 端口访问容器内的服务。-name='名字': 为容器指定一个名称,便于管理。cef698e9f00b: 镜像的 ID,表示基于哪个镜像创建容器。/bin/bash: 启动容器后执行的命令,这里是进入 Bash shell。
注:如果资源不够或者在本地,可能修改命令。笔者是在服务器上运行此命令,docker容器启动时,指定的端口参数是 -p 8025:5000,即宿主机的端口8025映射到容器内的端口 5000。本地访问:本地通过宿主机ip和端口8025访问该容器。
什么是共享内存(SHM,Shared Memory):
- 共享内存是多进程间通信的一种机制,通过这种机制,多个进程可以直接访问同一块内存区域,从而实现高效的数据交换。
- 默认情况下,Docker 容器的
/dev/shm目录大小为 64MB。如果你的应用程序需要更多的共享内存,可以使用--shm-size参数来增加该大小。
-it:(interactive、tty):
- i(保持标准输入打开):i 是 --interactive 的简写,表示保持容器的标准输入(stdin)打开。即使你没有附加到容器,这也允许你在容器中运行交互式命令。这对于需要与容器内的进程进行交互的情况非常有用,例如运行一个需要用户输入的程序。
- -t(分配一个伪终端):t 是 --tty 的简写,表示为容器分配一个伪终端(pseudo-TTY)。这使得容器能够提供类似终端的功能,并且可以更好地处理用户输入和显示输出。通常与 -i 一起使用,使你能够获得一个交互式的 shell 环境。
- 组合使用 -it: 当你将 -i 和 -t 组合使用(即 -it)时,你可以启动一个交互式的容器终端,可以输入命令并实时查看输出。这在需要调试、测试或运行需要用户交互的程序时非常有用。

3.查看容器日志
docker logs spiderman

4.进入容器
docker exec -it spiderman /bin/bash

5.退出容器
exit

6.停止容器
docker stop spiderman

7.启动容器
docker start spiderman

8.删除容器
前提:容器关闭中
docker rm spiderman

三、系统命令
1.显示Docker的系统信息
docker info

2.查看容器信息
docker inspect your-container
这个命令会输出名为 your-container 的容器的所有详细信息(如配置、网络设置、存储卷、环境变量等)。

相关文章:
Docke_常用命令详解
这篇文章分享一下笔者常用的Docker命令供各位读者参考。 为什么要用Docker? 简单来说:Docker通过提供轻量级、隔离且可移植的容器化环境,使得应用在不同平台上保持一致性、易于部署和管理,具体如下 环境一致性: Docker容器使得…...
使用vue2.0或vue3.0创建自定义组件
Vue2.0创建自定义组件 在 Vue 2.0 中创建自定义组件是一个相对简单的过程。以下是一个详细的步骤指南,帮助你创建一个自定义组件。 步骤 1: 创建 Vue 组件文件 首先,你需要创建一个新的 Vue 文件(.vue 文件)。假设我们要创建一…...
Elasticsearch-DSL高级查询操作
一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…...
【Linux】重启系统后开不开机(内核模块丢失问题)
问题 重启后开不开机报错如下: FAILED failed to start load kernel moduiles 可以看到提示module dm_mod not found 缺少了dm_mod 在内核module目录中 reboot重启可以看到这个现象: 可以看到重启启动磁盘,加载不到root 原因 dm_mod模块…...
对golang的io型进程进行off-cpu分析
背景: 对于不能占满所有cpu核数的进程,进行on-cpu的分析是没有意义的,因为可能程序大部分时间都处在阻塞状态。 实验例子程序: 以centos8和golang1.23.3为例,测试下面的程序: pprof_netio.go package m…...
Springboot中使用Retrofit
Retrofit官网 https://square.github.io/retrofit/ 配置gradle implementation("com.squareup.okhttp3:okhttp:4.12.0")implementation ("com.squareup.retrofit2:retrofit:2.11.0")implementation ("com.squareup.retrofit2:converter-gson:2.11.0…...
Ubuntu中配置内网固定IP
文章目录 背景一、配置步骤(一)首先确认网卡名称(二)确认网关(三)备份配置文件(四)编辑配置文件(五)应用配置(六)验证配置 二、注意事…...
ExcelVBA编程输出ColorIndex与对应颜色色谱
标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56,打算分4纵列输出,标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA(Visual Basic for Applications)中ÿ…...
MySQL中in和exists的使用场景
在MySQL中,IN 和 EXISTS 是用于子查询的两种常见方法,它们在不同的场景下有不同的表现和适用性。下面我将详细介绍这两种方法的使用场景、优劣,并通过实验来说明问题。 IN 子查询 使用场景: 当子查询返回的结果集较小且不包含 …...
【多线程2】start 和 run 区别,终止线程,等待线程
Thread 类使用 start 方法,启动一个线程,对于同一个 Thread 对象来说,start 只能调用一次!!! 不怕名字起的长,就怕含义不清楚! 想要启动更多线程,就是得创建新的对象&am…...
富途证券C++面试题及参考答案
C++ 中堆和栈的区别 在 C++ 中,堆和栈是两种不同的内存区域,它们有许多区别。 从内存分配方式来看,栈是由编译器自动分配和释放的内存区域。当一个函数被调用时,函数内的局部变量、函数参数等会被压入栈中,这些变量的内存空间在函数执行结束后会自动被释放。例如,在下面的…...
Go使用sqlx操作MySQL完整指南
# Go使用sqlx操作MySQL完整指南## 1. 安装依赖bash go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx2. 数据库基础操作 package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx" )// 定…...
Python 爬取网页文字并保存为 txt 文件教程
引言 在网络数据获取的过程中,我们常常需要从网页中提取有用的文字信息。Python 提供了强大的库来帮助我们实现这一目标。本教程将以https://theory.gmw.cn/2023 - 08/31/content_36801268.htm为例,介绍如何使用requests库和BeautifulSoup库爬取网页文字…...
时间序列预测论文阅读和相关代码库
时间序列预测论文阅读和相关代码库列表 MLP-based的时间序列预测资料DLinearUnetTSFPDMLPLightTS 代码库以及论文库:Time-Series-LibraryUnetTSFLightTS MLP-based的时间序列预测资料 我会定期把我的所有时间序列预测论文有关的资料链接全部同步到这个文章中&#…...
Mamba安装环境和使用,anaconda环境打包
什么是mamba Mamba是一个极速版本的conda,它是conda的C重新实现,使用多线程并行处理来加速包和依赖项的下载。 Mamba旨在提高安装、更新和卸载Python包的速度,同时保持与conda相同的兼容性和命令行接口。 Mamba的核心部分使用C实现ÿ…...
SSH连接成功,但VSCode连接不成功
环境 在实验室PC上连接服务器234 解决方案:在VSCode中重新添加远程主机 删除旧的VSCode Server 在远程主机上,VSCode会安装一个‘vscode-server’服务来支持远程开发,有时旧的‘vscode-server’文件可能会导致问题,删除旧的&am…...
springboot结合AES和国密SM4进行接口加密
api接口加密 1.为什么需要api接口加密呢? 1.防止爬虫 2.防止数据被串改 3.确保数据安全 2.如何实现接口加密呢? 3.我们可以使用哪些加密算法来加密呢? AES 密码学中的高级加密标准(Advanced Encryption Standard,…...
iOS在项目中设置 Dev、Staging 和 Prod 三个不同的环境
在 Objective-C 项目中设置 Dev、Staging 和 Prod 三个不同的环境,并为每个环境使用不同的 Bundle ID,可以通过以下步骤实现: 步骤 1: 创建不同的 Build Configuration 打开项目: 启动 Xcode 并打开你的项目。 选择项目文件&…...
openeuler24.09 系统无需配置 docker 源即可安装 docker 和 docker-composer
准备工作 1、准备一台刚刚创建的 openeuler24.09 lxc 虚拟机 2、使用 dnf 更新到最新,安装常用 工具 dnf update -y dnf install vim net-tools wget3、设置 ssh 由于ssh 与通常网上教程大同小异,在此我们就略过。 从下图我们可以看到 openeuler24.09 已经远程连接上。 …...
Flask入门:打造简易投票系统
目录 准备工作 创建项目结构 编写HTML模板 编写Flask应用 代码解读 进一步优化 结语 Flask,这个轻量级的Python Web框架,因其简洁和易用性,成为很多开发者入门Web开发的首选。今天,我们就用Flask来做一个简单的投票系统,让你快速上手Web开发,同时理解Flask的核心概…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
