Docker_常用命令详解

这篇文章分享一下笔者常用的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 的容器的所有详细信息(如配置、网络设置、存储卷、环境变量等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/493887.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冯诺依曼架构与哈佛架构的对比与应用

冯诺依曼架构&#xff08;Von Neumann Architecture&#xff09;&#xff0c;也称为 冯诺依曼模型&#xff0c;是由著名数学家和计算机科学家约翰冯诺依曼&#xff08;John von Neumann&#xff09;在1945年提出的。冯诺依曼架构为现代计算机奠定了基础&#xff0c;几乎所有现代…

malloc 分配大堆块(128KB)的一次探索

前言 一次意外执行了 malloc(0x5000)&#xff0c;结构使用 gdb 调试发现其分配的位置在 TLS 区域&#xff0c;这令我不解&#xff08;&#xff1a;最后去看了下 malloc 源码和 mmap 源码实现&#xff0c;发现似乎可能是 gdb 插件的问题&#xff0c;乐 场景复现 #include <…

CS 144 check5: down the stack (the network interface)

Lectures Note 略 Exercises TCP片段传输到对等方的过程&#xff1a; TCP-in-UDP-in-IP. Linux 提供了一种接口&#xff08;即“数据报套接字”&#xff0c;UDPSocket&#xff09;&#xff0c;它允许应用程序仅提供用户数据报的有效载荷和目标地址&#xff0c;而内核则负责…

内核执行时动态的vmlinux的反汇编解析方法及static_branch_likely机制

一、背景 在之前的博客里&#xff0c;我们讲到了tracepoint&#xff08;内核tracepoint的注册回调及添加的方法_tracepoint 自定义回调-CSDN博客&#xff09;和kprobe&#xff08;获取任意一个进程的共享内存的fd对应的资源&#xff0c;增加引用&#xff0c;实现数据的接管——…

Unity 3D饼状图效果

一. 效果展示 二.基础类 using System.Collections; using System.Collections.Generic; using UnityEngine;public class DrawCylinder : MonoBehaviour {// 网格渲染器MeshRenderer meshRenderer;// 网格过滤器MeshFilter meshFilter;// 用来存放顶点数据List<Vector3>…

精通 Numpy 数组:详解数据类型查看、转换与索引要点

1、查看数据类型 通过访问数组的dtype属性时会创建一个表示数据类型的对象&#xff0c; 这个对象其实就是numpy.dtype类型的对象。 如果要想获取数组中元素数据类型的名称&#xff0c;则需要先通过数组访问dtype属性得到numpy. dtype类型的对象&#xff0c;再通过该对象访问n…

分布式系统架构5:限流设计模式

这是小卷对分布式系统架构学习的第5篇文章&#xff0c;今天来学习限流器和限流设计模式 1.为什么要限流&#xff1f; 任何一个系统的运算、存储、网络资源都不是无限的&#xff0c;当系统资源不足以支撑外部超过预期的突发流量时&#xff0c;就应该要有取舍&#xff0c;建立面…

山景BP1048蓝牙音频任务后台运行设置方法

1、 问题 山景BP1048提供的蓝牙音箱SDK蓝牙音频是不能在后台运行的。例如&#xff1a;现在进入U盘模式播放蓝牙音乐&#xff0c;那么此时蓝牙就会关闭。 但是在特定场景下&#xff0c;需要蓝牙保持连接。 2、解决办法 打开sys_param.c文件 #include <string.h> #incl…

【AI知识】为什么激活值过大/过小,初始权重过大/过小,可能导致梯度爆炸/消失?具体例子举例

1.梯度爆炸的公式计算 计算一个简单的两层神经网络的前向传播和反向传播过程。在这里&#xff0c;我们故意选择过大的初始权重值&#xff0c;查看梯度如何爆炸。 总结&#xff1a; 梯度值很大&#xff0c;这是梯度爆炸的一个典型例子。此时&#xff0c;如果我们使用梯度下降进…

在福昕(pdf)阅读器中导航到上次阅读页面的方法

文章目录 在福昕(pdf)阅读器中导航到上次阅读页面的方法概述笔记用书签的方法来导航用导航按钮的方法来导航 备注END 在福昕(pdf)阅读器中导航到上次阅读页面的方法 概述 喜欢用福昕(pdf)阅读器来看pdf文件。 但是有个小问题困扰了我好久。 e.g. 300页的pdf看了一半&#xff…

CCF-GESP 等级考试 2023年9月认证C++一级真题解析

2023年9月真题 一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 正确答案&#xff1a;C 解析&#xff1a;考察知识点&#xff1a;计算机基础 本题属于考察计算机基础知识中的存储设备问题&#xff1b;内存是一种存储设备&#xff0c;也可以考虑关联内存中的“存…

重拾设计模式--建造者模式

文章目录 建造者模式&#xff08;Builder Pattern&#xff09;概述建造者模式UML图作用&#xff1a;建造者模式的结构产品&#xff08;Product&#xff09;&#xff1a;抽象建造者&#xff08;Builder&#xff09;&#xff1a;具体建造者&#xff08;Concrete Builder&#xff…

关于使用拓扑排序算法实现解析勾稽关系优先级的研究和实现

1. 勾稽关系 勾稽关系&#xff08;Reconciliation Relationship&#xff09;是一个财务术语&#xff0c;指的是在会计和审计中&#xff0c;不同会计报表或报表项目之间存在的逻辑对应关系。这种关系可以用来验证会计数据的准确性和完整性。勾稽关系通常体现在以下几个方面&…

电商项目-网站首页高可用(二)

一、LUA基本语法 lua有交互式编程和脚本式编程。 交互式编程就是直接输入语法&#xff0c;就能执行。 脚本式编程需要编写脚本文件&#xff0c;然后再执行。 一般采用脚本式编程。&#xff08;例如&#xff1a;编写一个hello.lua的文件&#xff0c;输入文件内容&#xff0c;并执…

flink实现复杂kafka数据读取

接上文&#xff1a;一文说清flink从编码到部署上线 环境说明&#xff1a;MySQL&#xff1a;5.7&#xff1b;flink&#xff1a;1.14.0&#xff1b;hadoop&#xff1a;3.0.0&#xff1b;操作系统&#xff1a;CentOS 7.6&#xff1b;JDK&#xff1a;1.8.0_401。 常见的文章中&…

第十五届蓝桥杯Scratch01月stema选拔赛—排序

排序 具体要求&#xff1a; 1). 点击绿旗&#xff0c;在舞台上出现4张点数不同的扑克牌&#xff0c;牌上的点数是随机的&#xff08;4-9点&#xff09;&#xff0c;如图所示&#xff1b; 完整题目可点击下方链接查看&#xff1a; 排序_scratch_嗨信奥-玩嗨信息奥林匹克竞赛-…

图形学笔记 - 5. 光线追踪2 - 加速结构

目录 使用AABB加速光线追踪 Uniform Spatial Partitions (Grids) 均匀空间划分 空间划分 KD树预处理 KD-Tree数据结构 遍历kd树 对象划分 & Bounding Volume Hierarchy 层次包围盒 BVH BVH遍历 空间划分与物体划分呢 GTC news: DLSS、RTXGI 实时光线追踪 使用AAB…

计算机毕业设计原创定制(免费送源码):NodeJS+MVVM+MySQL 樱花在线视频网站

目 录 摘要 1 1 绪论 1 1.1研究背景 1 1.2系统设计思想 1 1.3B/S体系工作原理 1 1.4node.js主要功能 2 1.5论文结构与章节安排 3 2 樱花在线视频网站分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5 …

SpringBoot 启动类 SpringApplication 二 run方法

配置 在Program arguments配置2个参数&#xff1a;--server.port8081 --spring.profiles.activedev。 run方法 run方法执行结束代表SpringBoot启动完成&#xff0c;即完成加载bean。 // ConfigurableApplicationContext 是IOC容器 public ConfigurableApplicationContext ru…

如何调大unity软件的字体

一、解决的问题&#xff1a; unity软件的字体太小&#xff0c;怎么调大点&#xff1f;二、解决方法&#xff1a; 1.操作步骤&#xff1a; 打开Unity编辑器> Edit>preferences> UI Scaling>Use custom scaling value&#xff08;取消勾选“使用默认桌面设置”&…