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 的容器的所有详细信息(如配置、网络设置、存储卷、环境变量等)。

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

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

相关文章

selenium基础知识-python

一、下载selenium pip install selenium4.1.1 --ignore-installed 二、导包 from selenium import webdriver #用于支持下拉列表 from selenium.webdriver.support.select import Select from time import sleep三、浏览器 用于打开浏览器操作&#xff0c;首先需要把浏览…

【服务器】服务器进程运行不受本地终端影响的方法总结

服务器进程运行不受本地终端影响的方法总结 1. 使用 nohup2. 使用 setsid3. 将命令放入后台 (&)总结参考 为了确保在集群或服务器上运行的长时间作业不受本地计算机网络中断或用户注销的影响&#xff0c;可以使用以下三种方法&#xff1a;nohup、setsid 和将命令放入后台 (…

Ubuntu 20.04下Kinect2驱动环境配置与测试【稳定无坑版】

一、引言 微软Kinect2传感器作为一个包含深度传感器、RGB摄像头以及红外摄像头的多模态采集设备&#xff0c;在计算机视觉、机器人感知、人体姿态识别、3D建模等领域有着广泛应用。相比第一代Kinect&#xff0c;Kinect2拥有更好的深度分辨率和更高的数据质量。本文将详细介绍如…

深度学习-75-大语言模型LLM之基于llama.cpp和Transformers与Qwen(通义千问)因果语言模型交互

文章目录 1 Qwen2.51.1 模型介绍1.2 Qwen2.5-0.5B模型1.3 llama.cpp支持Qwen架构2 下载模型2.1 Huggingface镜像网站整体下载2.2 阿里魔塔社区整体下载2.3 模型Qwen2.5-0.5B-Instruct-IQ3_M.gguf3 推理方式3.1 llama.cpp启动模型3.1.1 补全3.1.2 聊天3.2 使用transformers库3.2…

Flask入门:打造简易投票系统

目录 准备工作 创建项目结构 编写HTML模板 编写Flask应用 代码解读 进一步优化 结语 Flask,这个轻量级的Python Web框架,因其简洁和易用性,成为很多开发者入门Web开发的首选。今天,我们就用Flask来做一个简单的投票系统,让你快速上手Web开发,同时理解Flask的核心概…

ApacheStruts2 目录遍历与文件上传漏洞复现(CVE-2024-53677,S2-067)(附脚本)

0x01 产品描述: Apache Struts 2 是一个用于JAVA的MVC框架,它用于快速开发web应用。它的设计目标是使得开发者能够更容易的处理web应用的展现层,数据层,和业务层。0x02 漏洞描述: CVE-2024-53677 漏洞的根本原因是 Struts 框架中不安全的文件上传处理机制。攻击者利用 CVE…

Cadence学习笔记 9 器件封装匹配

基于Cadence 17.4&#xff0c;四层板4路HDMI电路 更多Cadence学习笔记&#xff1a;Cadence学习笔记 1 原理图库绘制Cadence学习笔记 2 PCB封装绘制Cadence学习笔记 3 MCU主控原理图绘制Cadence学习笔记 4 单片机原理图绘制Cadence学习笔记 5 四路HDMI原理图绘制Cadence学习笔记…

2011年IMO几何预选题第5题

△ A B C \triangle ABC △ABC 内心为 I I I, 外接圆在 B B B, C C C 两点处的切线交于 P P P, D D D, E E E 分别为 B I BI BI, C I CI CI 与外接圆的交点, D E DE DE 分别交 A B AB AB, A C AC AC 于点 M M M, N N N, 过 M M M 作 B I BI BI 平行线, 过 N N …

Python构造方法:对象的“开机启动程序”

在Python中&#xff0c;构造方法&#xff08;__init__&#xff09;是一个类的“生命之初”&#xff0c;定义了每个对象从“出生”到“投入使用”的整个初始化过程。那既然类里可以直接写属性&#xff0c;为什么还需要构造方法呢&#xff1f; 构造方法的核心作用&#xff1a;创…

Superset 和 Appsmith的对比

对于报表数据需要给到前端进行定制化展示&#xff0c;并且直接提供基于报表的 API 让前端调用&#xff0c;以下是对 Superset 和 Appsmith 的对比分析&#xff1a; 1. Apache Superset API 支持 Superset 提供 REST API 接口&#xff0c;可以让前端调用获取报表数据。前端可以…

idea | maven项目标红解决方案 | 强制刷新所有依赖

场景&#xff1a;父pom多模块&#xff0c;新增时&#xff0c;依赖正常&#xff0c;但是application.yml看起来没被springboot识别&#xff0c;试过rebuild、重开idea清除缓存&#xff0c;重新maven面板reload all maven projects, 试过pom文件的依赖先移除再重新粘贴导入进来&a…

Nginx常用配置详解(1)

Nginx常用配置详解 一、全局块&#xff08;main&#xff09;配置 在Nginx的配置文件中&#xff0c;最外层的部分是全局块。这部分配置通常会影响Nginx服务器整体的运行参数。 worker_processes 作用&#xff1a;这个配置指令用于指定Nginx工作进程的数量。工作进程是Nginx处理…

单幅图像合成 360° 3D 场景的新方法:PanoDreamer,可同时生成全景图像和相应的深度信息。

论文介绍了一种从单幅图像合成 360 3D 场景的新方法。该方法以连贯的方式生成全景图及其相应的深度&#xff0c;解决了现有最先进方法&#xff08;如 LucidDreamer 和 WonderJourney 的局限性。这些方法按照生成轨迹依次添加细节&#xff0c;通常在循环回输入图像时导致可见的接…

Linux —— 管理进程

一、查看进程 运行态&#xff08;Running&#xff09; 定义&#xff1a;处于运行态的进程正在 CPU 上执行指令。在单 CPU 系统中&#xff0c;同一时刻只有一个进程处于运行态&#xff1b;在多 CPU 或多核系统中&#xff0c;可能有多个进程同时处于运行态。示例&#xff1a; 当…

Kubernetes中subPath

在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;当容器关闭时&#xff0c;其使用的subPath目录的清理行为取决于几个因素。首先&#xff0c;subPath允许Pod中的容器挂载共享卷的一个子目录&#xff0c;而不是整个卷。这种机制有助于避免不同容器间的文件冲突。 容器关闭…

前端(组件传参案例)

父组件(商品详情页) 子组件上边放大图 底下缩小轮播图 需求分析&#xff1a;父组件获取图片数据&#xff0c;传给底下子组件进行进行轮播&#xff0c;实现父组件给子组件传参。然后底下子组件轮播后&#xff0c;把当前图片下标给父组件&#xff0c;实现子组件给父组件传参。父组…

Linux基础 -- 查看程序注册了的信号的方案

程序注册了哪些信号的方案 方法 1&#xff1a;使用 strace 动态追踪信号处理注册 strace 是一个强大的工具&#xff0c;可以动态捕获程序对信号的处理注册行为&#xff08;如 sigaction 或 signal 系统调用&#xff09;。 示例 启动程序并追踪信号注册&#xff1a; strace…

数据库设计的四大原则:优化性能、保证一致性与高效处理

目录 一. 数据冗余最小化 二. 数据一致性 三. 事务处理 四. 查询性能优化 数据库设计不仅是关于创建表和字段的简单任务&#xff0c;更是构建一个高效运行、易于维护且能够确保数据一致性的系统的核心。一个好的数据库设计不仅能提升应用程序的性能&#xff0c;还能为未来的…

What‘s Next on TON 成都站|聚焦生态创新,共享技术前沿

2024 年&#xff0c;TON 生态为何持续吸引全球开发者和用户的关注&#xff1f;在经历了一系列重要的技术更新和生态扩展后&#xff0c;TON 正在迎来一个爆发式增长的阶段。作为全球四城巡回沙龙的第三站&#xff0c;成都站的活动将如何继续推动这一势头&#xff0c;带来哪些不容…

算法-动态数组-62.不同路径

一、题目 二、思路解析 1.思路&#xff1a; 对于找到目的地它的来源主要来源于目的地的上一格和目的地的左一格 2.常用方法&#xff1a; 无 3.核心逻辑&#xff1a; 1.处理边界&#xff1a; a.只向右移动&#xff0c;至始至终只有一条路径 for(int i0;i<m;i){dp[i][0]1; } …