当前位置: 首页 > news >正文

docker 相关操作

1. 以下是一些常见的 Docker 命令:

docker --version

显示安装的 Docker 版本。

docker pull <image_name>

从 Docker Hub 或其他镜像仓库下载镜像。

docker build -t <image_name> <path>

从指定路径的 Dockerfile 构建 Docker 镜像。

docker images

列出本地所有的 Docker 镜像。

docker ps

列出所有正在运行的容器。

docker ps -a

列出所有容器(包括运行和停止的容器)。

docker run <image_name>

根据指定镜像运行一个容器。

docker run -d <image_name>

在后台(脱离模式)运行容器。

docker exec -it <container_id> <command>

在正在运行的容器中执行命令(如 bash 或 sh)。

docker stop <container_id>

停止正在运行的容器。

docker start <container_id>

启动已停止的容器。

docker restart <container_id>

重启容器。

docker rm <container_id>

删除已停止的容器。

docker rmi <image_name>

删除 Docker 镜像。

docker logs <container_id>

查看正在运行或已停止容器的日志。

docker-compose up

启动 docker-compose.yml 文件中定义的服务。

docker-compose down

停止并删除 docker-compose.yml 文件中定义的容器、网络和卷。

docker network ls

列出所有 Docker 网络。

docker volume ls

列出所有 Docker 卷。

docker info

显示 Docker 系统的全局信息。

2. 手动生成一个 Docker 镜像

要手动生成一个 Docker 镜像,你通常需要创建一个 Dockerfile,然后使用 Docker 命令来构建镜像。下面是整个过程的步骤:

1. 创建 Dockerfile

首先,你需要创建一个 Dockerfile 文件,定义镜像的构建过程。Dockerfile 是一组指令,告诉 Docker 如何构建镜像。

示例 Dockerfile

以下是一个简单的 Dockerfile 示例,用于创建一个包含 Python 环境的镜像:

# 使用官方的 Python 作为基础镜像
FROM python:3.8-slim# 设置工作目录
WORKDIR /app# 将本地代码复制到容器中
COPY . /app# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt# 设置容器启动时执行的命令
CMD ["python", "app.py"]
  • FROM: 定义基础镜像,这里使用的是 Python 3.8 版本的官方镜像。
  • WORKDIR: 设置容器内的工作目录,所有后续命令都会在此目录下运行。
  • COPY: 将本地文件(如源代码)复制到容器内。
  • RUN: 在容器内执行命令,这里用于安装 Python 依赖。
  • CMD: 设置容器启动时执行的命令。

2. 构建镜像

一旦你有了 Dockerfile,你就可以用 docker build 命令来构建镜像。

命令格式:
docker build -t <image_name>:<tag> <path_to_dockerfile>
  • <image_name> 是你为镜像指定的名称。
  • <tag> 是镜像的标签,通常是版本号,比如 latestv1.0
  • <path_to_dockerfile> 是 Dockerfile 所在的目录,通常是当前目录(.)。
示例:
docker build -t my_python_app:latest .

这个命令会在当前目录(.)查找 Dockerfile 并使用该文件构建镜像,最后生成的镜像会被命名为 my_python_app,标签为 latest

3. 查看生成的镜像

构建完成后,你可以使用 docker images 命令查看所有本地的 Docker 镜像:

docker images

这将列出所有可用的镜像,类似于以下输出:

REPOSITORY           TAG       IMAGE ID       CREATED          SIZE
my_python_app        latest    abc123def456    5 seconds ago    150MB
python               3.8-slim  789xyz123abc    2 days ago       80MB

在这里插入图片描述

4. 运行镜像

你可以使用 docker run 命令来启动一个容器并运行你的镜像。例如:

docker run -d --name my_python_app_container my_python_app:latest
  • -d 表示在后台运行容器。
  • --name 用于给容器指定一个名称。
  • my_python_app:latest 是你刚刚构建的镜像。
    在这里插入图片描述

5. 删除镜像

如果你不再需要某个镜像,可以使用 docker rmi 命令删除它:

docker rmi my_python_app:latest

这将删除名为 my_python_app 且标签为 latest 的镜像。

3. 项目目录

如果你有一个项目目录,并希望在该目录中构建 Docker 镜像,目录结构通常像这样:

/my-project├── Dockerfile├── app.py├── requirements.txt└── ... (其他文件)

我的 app.py 文件是 print("hello world") 但是 docker run 后,怎么没有显示

如果你在 app.py 文件中只是简单地写了 print("hello world"),但是使用 docker run 后没有看到输出,可能是因为容器默认运行时没有将标准输出(stdout)正确地映射到终端。你可以通过以下几种方式来调试和确保输出显示。

1. 确保容器的输出没有被重定向

默认情况下,Docker 容器的标准输出(stdout)和标准错误(stderr)是打印到控制台的。但是,如果容器是在后台运行的(即使用了 -d 参数),输出会被忽略。确保你没有使用 -d 参数,或者查看容器的日志。

解决方法:不使用 -d 以交互模式启动容器

如果你没有使用 -d,容器会在前台运行并直接打印输出:

docker run --name my_python_app my_python_app:latest

这样,你应该能看到 hello world 输出。

在这里插入图片描述

2. 查看容器的日志

如果你使用了 -d 参数让容器在后台运行,你可以通过以下命令查看容器的日志输出:

docker logs my_python_app_container

或者:

docker logs <container_id>

这会显示容器的标准输出和错误输出。如果 app.py 中有 print("hello world"),你应该能在这里看到输出。

3. 确保 Dockerfile 设置正确

确保你的 Dockerfile 配置正确。特别是确保容器启动时执行 app.py,可以通过 CMDENTRYPOINT 来指定容器启动的命令。

例如,假设你有如下的 Dockerfile:

# 使用 Python 作为基础镜像
FROM python:3.8-slim# 设置工作目录
WORKDIR /app# 将本地代码复制到容器中
COPY . /app# 安装依赖
# RUN pip install --no-cache-dir -r requirements.txt # 如果有依赖的话# 执行 app.py 文件
CMD ["python", "app.py"]

确保你的 CMDENTRYPOINT 指令正确地运行了 app.py

4. 调试步骤

确保容器启动后,python app.py 会执行。
如果你仍然无法看到输出,可以进入容器内部进行调试,看看脚本是否正常执行。
进入容器内部:

docker exec -it my_python_app_container /bin/bash

然后手动执行脚本:

python /app/app.py
5. 完全重新构建镜像

如果你对 Dockerfile 或代码做了更改,确保重新构建镜像并运行容器。可以使用以下命令来重新构建镜像:

docker build -t my_python_app:latest .

然后再次运行容器:

docker run my_python_app:latest

相关文章:

docker 相关操作

1. 以下是一些常见的 Docker 命令&#xff1a; docker --version显示安装的 Docker 版本。 docker pull <image_name>从 Docker Hub 或其他镜像仓库下载镜像。 docker build -t <image_name> <path>从指定路径的 Dockerfile 构建 Docker 镜像。 docker i…...

AI作图效率高,亲测ToDesk、顺网云、青椒云多款云电脑AIGC实践创作

一、引言 随着人工智能生成内容&#xff08;AIGC&#xff09;的兴起&#xff0c;越来越多的创作者开始探索高效的文字处理和AI绘图方式&#xff0c;而云电脑也正成为AIGC创作中的重要工具。相比于传统的本地硬件&#xff0c;云电脑在AIGC场景中展现出了显著的优势&#xff0c;…...

【代码随想录day57】【C++复健】 53. 寻宝(prim算法);53. 寻宝(kruskal算法)

53. 寻宝&#xff08;prim算法&#xff09; 好像在研究生的算法课上学过prim算法和kruskal算法&#xff0c;不过当时只是了解了一下大致的概念和流程&#xff0c;并没有涉及到如何去写代码的部分&#xff0c;今天也算是学习了一下这两个算法的代码应该如何去实现&#xff0c;还…...

C++中多态

1) 什么是多态性&#xff1f;C中如何实现多态&#xff1f; 多态性是指通过基类指针或引用调用派生类的函数&#xff0c;实现不同的行为 多态性可以提高代码的灵活性和可扩展性&#xff0c;使程序能够根据不同的对象类型执行不同的操作。 2&#xff09;C中如何实现多态&#…...

【实现多网卡电脑的网络连接共享】

电脑A配备有两张网卡&#xff0c;分别命名为eth0和eth1&#xff08;对于拥有超过两张网卡的情况&#xff0c;解决方案相似&#xff09;。其中&#xff0c;eth0网卡能够连接到Internet&#xff0c;而eth1网卡则通过网线直接与另一台电脑B相连&#xff08;在实际应用中&#xff0…...

算力介绍与解析

算力&#xff08;Computing Power&#xff09;是指计算机系统在单位时间内处理数据和执行计算任务的能力。算力是衡量计算机性能的重要指标&#xff0c;直接影响计算任务的速度和效率。 算力的分类和单位 a. 基础算力&#xff1a;以CPU的计算能力为主。适用于各个领域的计算。…...

解决 MyBatis 中空字符串与数字比较引发的条件判断错误

问题复现 假设你在 MyBatis 的 XML 配置中使用了如下代码&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…...

python 词向量的代码解读 self.word_embeds = nn.Embedding(vocab_size, embedding_dim) 解释下

在PyTorch中&#xff0c;nn.Embedding 是一个用于将稀疏的离散数据表示为密集的嵌入向量的模块。这在自然语言处理&#xff08;NLP&#xff09;任务中非常常见&#xff0c;例如在处理单词或字符时&#xff0c;我们通常需要将这些离散的标识符转换为可以被神经网络处理的连续值向…...

记一次:使用C#创建一个串口工具

前言&#xff1a;公司的上位机打不开串口&#xff0c;发送的时候设备总是关机&#xff0c;因为和这个同事关系比较好&#xff0c;编写这款软件是用C#编写的&#xff0c;于是乎帮着解决了一下&#xff08;是真解决了&#xff09;&#xff0c;然后整理了一下自己的笔记 一、开发…...

Android Studio新版本的一个资源id无法找到的bug解决

Android Studio新版本的一个资源id无法找到的bug解决 文章目录 Android Studio新版本的一个资源id无法找到的bug解决一、前言二、Android Studio的无法获取到资源id的bug1、一段简单的Java代码1、错误现象2、错误解决方法 三、其他1、小结2、gradle.properties文件 其他相关属性…...

Datawhale AI冬令营(第一期)--零基础定制你的专属大模型

本文主要简述如何快速完成和一些小细节 第一步下载嬛嬛数据集 数据来源&#xff1a;self-llm/dataset/huanhuan.json at master datawhalechina/self-llm GitHub 注意:1.一定是数据集下载完成一定是.json结尾的 2.这个是github的网址&#xff0c;可能会遇到打不开的情况 …...

LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略

LLMs之APE&#xff1a;基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略 目录 Prompt Improver的简介 0、背景痛点 1、优势 2、实现思路 Prompt优化 示例管理 提示词评估 Prompt Improver的使用方法 1、使用方法 Prompt Improver的案例应用 1、Kap…...

【Unity人形布娃娃插件】Ragdoll Animator

Ragdoll Animator 是一款为 Unity 引擎开发的插件&#xff0c;专注于让角色在运行时动态地切换到布娃娃物理系统&#xff08;Ragdoll Physics&#xff09;。该插件帮助开发者轻松创建逼真的角色动画过渡效果&#xff0c;尤其适用于需要角色碰撞、摔倒、受击或其他物理反应的场景…...

跨团队协作中目标一致性至关重要

在团队协作的复杂拼图里&#xff0c;目标一致性是那根贯穿始终的主线&#xff0c;缺之则拼图难成&#xff0c;团队亦难达预期之效。 且看这样一个实例&#xff1a;部门承接了业务方一项紧急的数据处理需求&#xff0c;此任务犹如一座亟待攀登的险峰&#xff0c;落在了 A 团队…...

Excel的文件导入遇到大文件时

Excel的文件导入向导如何把已导入数据排除 入起始行&#xff0c;选择从哪一行开始导入。 比如&#xff0c;前两行已经导入了&#xff0c;第二次导入的时候排除前两行&#xff0c;从第三行开始&#xff0c;就将导入起始行设置为3即可&#xff0c;且不勾选含标题行。 但遇到大文…...

使用字典进行动态编程

在你的程序中&#xff0c;你想要执行各种计算&#xff0c;例如计算卫星的总数。 此外&#xff0c;当你进行更高级的编程时&#xff0c;你可能会发现你需要从文件或数据库中加载此类信息&#xff0c;而不是直接编码到 Python 中。 为了帮助支持这些场景&#xff0c;Python 使你…...

机器学习02-发展历史补充

机器学习02-发展历史补充 文章目录 机器学习02-发展历史补充1-机器学习个人理解1-初始阶段&#xff1a;统计学习和模式识别&#xff08;20世纪50年代至80年代&#xff09;2-第二阶段【集成时代】【核方法】&#xff08;20世纪90年代至2000年代初期&#xff09;3-第三阶段【特征…...

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之计数器与累加器(一)

学习背景&#xff1a; 在现实生活中一些需要计数的场景下我们会用到计数器&#xff0c;如空姐手里记录乘客的计数器&#xff0c;跳绳手柄上的计数器等。累加器是累加器求和&#xff0c;以得到最后的结果。计数器和累加器它们虽然是基础知识&#xff0c;但是应用广泛&#xff0…...

Android的SurfaceView和TextureView介绍

文章目录 前言一、什么是SurfaceView &#xff1f;1.1 SurfaceView 使用示例1.2 SurfaceView 源码概述1.3 SurfaceView 的构造与初始化1.4 SurfaceHolder.Callback 回调接口1.5 SurfaceView 渲染机制 二、什么是TextureView&#xff1f;2.1 TextureView 使用示例2.2 TextureVie…...

Scala的集合

1 集合简介 1&#xff09;Scala 的集合有三大类&#xff1a;序列 Seq、集 Set、映射 Map&#xff0c;所有的集合都扩展自 Iterable 特质。 2&#xff09;对于几乎所有的集合类&#xff0c;Scala 都同时提供了可变和不可变的版本&#xff0c;分别位于以下两 个包 不可变集合&am…...

家政派单小程序源头厂家

随着现代生活节奏的加快&#xff0c;家政服务的需求日益增长。为了满足这一需求&#xff0c;许多公司开始推出家政派单小程序&#xff0c;以提供更便捷、高效的服务体验。然而&#xff0c;在众多的选择面前&#xff0c;如何找到一家真正能够满足自身业务需求的源头厂家呢&#…...

双模型工作流架构解析:从原理到实践,构建高效AI应用

1. 项目概述&#xff1a;双模型工作流的魅力与挑战最近在GitHub上看到一个挺有意思的项目&#xff0c;叫cait52099/openclaw-dual-model-workflow。光看名字&#xff0c;openclaw&#xff08;开放之爪&#xff09;和dual-model-workflow&#xff08;双模型工作流&#xff09;这…...

第五篇:Spring事务管理——@Transactional的底层实现与失效场景

前言 在前面的文章中&#xff0c;我们拆解了Spring AOP的底层原理——动态代理和切面编程。现在&#xff0c;我们来看AOP最经典的应用&#xff1a;事务管理。 你每天用着Transactional&#xff0c;往Service方法上一加&#xff0c;事务就自动开启了。但面试中&#xff0c;事务是…...

量子度量学习的黑盒验证协议设计与实现

1. 量子度量学习与黑盒验证概述量子度量学习&#xff08;Quantum Metric Learning&#xff09;是量子机器学习领域的一个重要分支&#xff0c;其核心目标是通过优化量子特征映射&#xff0c;将经典数据转换为量子希尔伯特空间中的态&#xff0c;使得不同类别的数据在量子态空间…...

仅限首批200家认证机构获取:SITS2026兼容性评估矩阵V1.2(含LLM微调知识注入适配表),错过再等18个月!

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI研发知识管理&#xff1a;SITS2026专题 在AI研发加速演进的背景下&#xff0c;知识管理正从文档归档转向语义化、可执行、可追溯的智能中枢。SITS2026&#xff08;Semantic Intelligence for Technic…...

Transformer注意力机制数据流优化与MMEE方法实践

1. 注意力机制数据流优化概述在Transformer架构和大型语言模型(LLM)中&#xff0c;注意力机制的计算开销通常占整体工作负载的60%以上。随着模型处理序列长度的不断增加&#xff0c;注意力计算面临的性能瓶颈日益凸显——其计算复杂度与序列长度呈二次方关系。这种特性使得传统…...

BetterGI原神自动化助手:告别重复操作,解放双手的终极指南

BetterGI原神自动化助手&#xff1a;告别重复操作&#xff0c;解放双手的终极指南 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙…...

网盘下载速度太慢?这3个免费工具让您一键获取直链下载地址

网盘下载速度太慢&#xff1f;这3个免费工具让您一键获取直链下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …...

终极免费解锁:3步获取WeMod专业版完整功能

终极免费解锁&#xff1a;3步获取WeMod专业版完整功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款专为WeMod用户设计的开源增强…...

如何完全掌控你的微信聊天记录:WeChatMsg开源工具技术解析与实战指南

如何完全掌控你的微信聊天记录&#xff1a;WeChatMsg开源工具技术解析与实战指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tre…...