Docker的学习笔记

ops/2025/2/23 9:43:18/

Docker的学习笔记

  • Docker
  • B站视频链接-docker快速入门
    • docker的启动
    • dockerfile 文件的编写实现镜像的创建
    • 采用docker build创建镜像
    • 有了镜像就可以启动容器
  • B站文档资料
    • 创建镜像
    • 修改镜像名称
    • 删除镜像
      • Docker 中 save 和 export 命令的区别
    • 容器container常规命令
      • 进入容器
      • 停止容器
      • 重启容器
      • 删除容器
  • Docker-从入门到实践
    • 虚悬镜像


希望通过学习docker,能够实现在docker上运行代码,跑项目,以及了解一些基本的实用性信息,比如人家说镜像,容器,一些简单命令

网上关于docker的介绍很多,要不就是讲的很底层,要不就是不连贯,能把知识穿起来的我没找到,所以最后还是自己写个笔记,方便以后回顾。

对于笔记学习,还是看不太进去,准备找一些视频介绍进行学习

Docker

Docker是一种虚拟化技术,在当前的操作系统下创建一个相对独立的特定的操作系统环境,用来运行我们所需要的软件程序

在这里插入图片描述
在这里插入图片描述

B站视频链接-docker快速入门

Docker中有三个重要概念,dockerfiles、image、container。
image(镜像):类似于一个虚拟机的快照,里面包含要部署的应用程序和所有关联库、软件,通过镜像,我们可以创建不同的容器。
container(容器):类似于一个虚拟机,里面包含了运行程序,每一个容器都是独立运行的。
dockerfiles:自动化运行脚本,可以被用作创建镜像。

docker_23">docker的启动

sudo systemctl enable docker
sudo systemctl start docker

dockerfile__28">dockerfile 文件的编写实现镜像的创建

首先用from命令指定一个基本的镜像,从而节省软件安装配置的时间
dockerhub 里面提供了许多高质量的操作系统镜像,里面包含方便某种语言,某种框架搭建的镜像,比如python,做python的应用可以直接安装python的镜像,从而免去python的安装。
在这里插入图片描述

FROM python:3.10.16-bookworm
# python 是官方镜像的名字,:后面的是版本号也可以称为tag

在这里插入图片描述

WORKDIR /root
WORKDIR 指定了所有docker命令的工作路径,如果这个路径不存在docker会帮助手动创建,避免切换使用绝对路径或手动切换路径
COPY /root/home /
COPY ..
COPY代表拷贝路径,第一个是本地路径,第二个是目标路径(如果是.代表是刚才指定的/root)
RUN 命令  比如cd cp rm 等
RUN命令运行我们在创建镜像的时候运行任意的shell命令

至此完成idockerfile文件的编写,实现镜像的创建

docker_build_56">采用docker build创建镜像

docker build -t 镜像名称 .( 这个.告诉docker应该在当前目录下寻找这个dockerfile文件,.**不能省略**)

tips:第一次调研docker build会花费较长时间,因为docker会下载必要的镜像文件,然后逐行按照指令进行操作,当再次调用dockerfile会比第一次快,因为docker会自动缓存之前的操作。

有了镜像就可以启动容器

docker run来启动容器,docker run 就是运行容器的命令,

docker run -p a:b -d 容器名称
a是本机上的端口一般选80,后面的b是容器的端口
-p将容器的某个端口映射到主机上,这样才能从主机上去访问容器中的web应用;
-d 让容器在后台上运行,使得容器的输出不会显示在控制台
还可以用命令 
docker run -it 镜像:tag
-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
docker run -it --rm 镜像:tag
--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。

其他相关命令

查看docker镜像
docker images
或者
docker image ls (二者等效)  不加任何参数的情况下,docker image ls 会列出所有顶层镜像
列出部分镜像
docker image ls 镜像名
列出特定的某个镜像
docker image ls 镜像名:tag
除此以外,docker image ls 还支持强大的过滤器参数 --filter,或者简写 -f,比如看到在 mongo:3.2 之后建立的镜像,可以用下面的命令:
docker image ls -f since=mongo:3.2
docker image ls 会输出一个完整的表格,但是我们并非所有时候都会需要这些内容,利用 docker image ls 把所有的虚悬镜像的 ID 列出来
docker image ls -q查看docker容器信息 
docker ps
docker ps -a #显示本机上存在的所有容器

在这里插入图片描述
视频内容到这里就结束了,通过这个视频我们学到如何创建镜像,启动容器,但有时候还会看到pull操作这些,继续学!!

B站文档资料

这个部分主要是根据运行命令进行详细讲解···

镜像是创建Docker容器的基础,用户基于镜像来运行自己的容器,Docker运行容器前本地必须存在对应的镜像,如果不指定镜像名将会默认自动采用Docker Hub公共注册服务器仓库中该名称的镜像;

从 Docker 镜像仓库获取镜像的命令是 docker pull。
Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub(docker.io),一般情况下不写,省略,按照默认。 命令格式为:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull python:tag
类似这种命令是下载镜像 需要镜像名:版本(latest是最新版)
上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub (docker.io)获取镜像。
docker images   #列出本机已有镜像
docker inspect [image id]  #获取镜像的详细信息

创建镜像

创建镜像有三种办法:
1.从已有镜像的容器创建

docker commit [option-选项] ContainerId [Repository[:Tag]]
docker commit -m "xx" -a "oo" ContainerID(被修改过的ID) [Repository[:Tag]]
# -a,--author="作者"
# -m,--message="更改信息"
# -p,--pause=ture 提交时暂停容器Container运行

2.基于本地模板导入:使用操作系统模板导入一个镜像文件;这里推荐使用OpenVZ提供的模板来常见

######### 从本地模板导入 ############
$sudo cat ubuntu-14.04.tar.gz | docker import - ubuntu:14.04  #本地导入镜像命令

3.基于Dockerfile导入(上面哪个就是这种)

修改镜像名称

给当前镜像添加标签,新标签要不含大写字母
docker tag 原仓库[:标签] 新仓库名[:标签]  
修改镜像的tag标签	
docker tag  [image id]   新仓库名[:标签]  	

删除镜像

当该镜像在容器运行存在的时候,镜像文件默认是无法被删除的;必须停止/删除容器ID才能删除镜像文件;
当同一个镜像有多个标签的时候rmi命令只是删除了该进行的标签而且,并不影响镜像文件,但当只剩下一个标签的时候就要小心了,如果在停止的状态下再次使用rmi命令则会删除该镜像
$ sudo docker rmi [镜像名称]

Docker 中 save 和 export 命令的区别

save 与 load 命令对应即导出与导入镜像,而export与import命令对应即导出导入容器;

容器container常规命令

Docker利用容器来运行和隔离应用;

  • 容器是从镜像创建的应用独立运行的实例; 可以进行启动/开始/停止/删除容器,而这些容器都是相互隔离,互不可见的;
  • 镜像自身只读的,容器从镜像启动的时候会在镜像的最上层创建一个可写层,镜像本身将保持不变;
  • 创建容器、启动容器、终止容器、进入容器、删除容器、导入导出容器实现容器迁移;

在这里插入图片描述

进入容器

docker create -it repository[:tag] #创建容器但处于停止状态
docker start -a -i <container id>   #启动创建的容器
# -a 参数   连接容器并打印输出或错误 -
# -i 参数   启动容器并进入交互模式docker run -t -i repository[:tag]  /bin/bash #创建并启动容器 等同于上面两条命令
# -t:让Docker分配一个伪终端(pseudo-tty)并绑定在容器的标准输入上.
# -i:则让容器的标准输入保持打开.
# CTRL+Z 和 Exit 则退出容器Container
docker run -d repository[:tag] /bin/sh -C "echo hello word" #守护态运行
# -d 参数即可后台运行,用户无法看到容器中的信息
# -c 执行的Command
# --rm 添加这个标记,容器会在停止后立即删除自身   (注意:与-d不能同时使用)
# --name 使用--name web 标记可以为容器重新命名

停止容器

docker stop <container id>

重启容器

docker restart <container id>  #重启容器

删除容器

docker kill <cantainer id>  #强行终止容器 可以直接发送SIGKILL信号来终止容器
docker rm <container id>    #删除容器删除依赖该镜像的容器ID,前3位即可
# -f,--force=false 强制终止并删除一个运行中的容器[默认会发生SIGKILL信号]
# -l,--link=false  删除容器连接但保留容器
# -v,--volumes=false  删除容器挂载的数据卷

docker_practice/image/list" rel="nofollow">Docker-从入门到实践

这里面的内容和前面的很多都融合了,相关内容的补充也填在了前面的相关内容里面了,这里补充一些前面没有提到的内容

虚悬镜像

在这里插入图片描述
随着官方镜像维护,发布了新版本后,由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:

docker image ls -f dangling=true

一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除:

docker image prune

http://www.ppmy.cn/ops/160735.html

相关文章

粘贴到Word里的图片显示不全

粘贴到Word里的图片显示不全&#xff0c;可从Word设置、图片本身、软件与系统等方面着手解决&#xff0c;具体方法如下&#xff1a; Word软件设置 经实践发现&#xff0c;图片在word行距的行距出现问题&#xff0c;可以按照如下调整行距进行处理 修改段落行距&#xff1a; 选…

【Android】类加载器热修复-随记

1. 背景 在「Android插件化开发指南——类加载器」一文中曾提到&#xff0c;在Android中的类加载示意图为&#xff1a; 图中可知&#xff0c;加载外部jar、dex、apk都需要构建一个DexClassLoader的实例&#xff0c;并将对应的jar、dex、apk文件塞入其中&#xff0c;以构建出一…

【多模态处理篇六】【DeepSeek3D点云处理:PointNet++工业检测】

嘿,各位技术爱好者们!今天咱要来好好唠唠《DeepSeek3D点云处理:PointNet++工业检测》这个超厉害的技术。在工业领域,检测可是个至关重要的环节,而点云处理技术就像是给工业检测装上了一双超级眼睛,能让我们更精准地发现产品里的各种问题。那DeepSeek3D和PointNet++到底是…

契约思维驱动开发:OpenAPI的最佳实践

文章目录 引言软件设计中的规范命名规范异常处理规范服务提供者的异常处理服务调用者的异常处理 架构规范 软件设计中的标准Java规范API设计标准 依赖契约的扩展机制基于接口的扩展1. Spring ApplicationListener 扩展示例接口定义 (框架提供)用户自定义实现 (扩展点)框架调用逻…

linux 知识点

指令选项操作对象这三部分构成了完整的linux命令 选项部分定义命令的执行特性&#xff0c;这一选项可以有长有短 长选项用“--”引导、后面跟整个单词、如 --help&#xff0c;不能组合使用。 短选项用“-”引导、后面跟单个字母、如 -h、可以组合使用、例如-h -l -a-hla…

华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B

华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 硅基流动 1.1 注册登录 1.2 实名认证 1.3 创建API密钥 1.4 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载&#xff1a; AI聊天本地客户端 接入Chatbox客户端 点击设置 选择SiliconFloW API 粘贴1.3创…

elf_loader:一个使用Rust编写的ELF加载器

本文介绍一个使用Rust实现的ELF加载器。 下面是elf_loader的仓库链接&#xff1a; github&#xff1a; https://github.com/weizhiao/elf_loaderhttps://github.com/weizhiao/elf_loader crates.io&#xff1a; https://crates.io/crates/elf_loaderhttps://crates.io/cra…

使用Ubuntu搭建Java部署环境

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:小舟从此逝&#xff0c;江海寄余生&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小…