Docker的学习笔记

Docker的学习笔记


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

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

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

Docker

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


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

Docker中有三个重要概念,dockerfiles、image、container。

image(镜像):类似于一个虚拟机的快照,里面包含要部署的应用程序和所有关联库、软件,通过镜像,我们可以创建不同的容器。

container(容器):类似于一个虚拟机,里面包含了运行程序,每一个容器都是独立运行的。

dockerfiles:自动化运行脚本,可以被用作创建镜像。

docker的启动

bash 复制代码
sudo systemctl enable docker
sudo systemctl start docker

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

首先用from命令指定一个基本的镜像,从而节省软件安装配置的时间

dockerhub 里面提供了许多高质量的操作系统镜像,里面包含方便某种语言,某种框架搭建的镜像,比如python,做python的应用可以直接安装python的镜像,从而免去python的安装。

bash 复制代码
FROM python:3.10.16-bookworm
# python 是官方镜像的名字,:后面的是版本号也可以称为tag
bash 复制代码
WORKDIR /root
WORKDIR 指定了所有docker命令的工作路径,如果这个路径不存在docker会帮助手动创建,避免切换使用绝对路径或手动切换路径
bash 复制代码
COPY /root/home /
COPY ..
COPY代表拷贝路径,第一个是本地路径,第二个是目标路径(如果是.代表是刚才指定的/root)
bash 复制代码
RUN 命令  比如cd cp rm 等
RUN命令运行我们在创建镜像的时候运行任意的shell命令

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

采用docker build创建镜像

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

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

有了镜像就可以启动容器

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

bash 复制代码
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 可以避免浪费空间。

其他相关命令

bash 复制代码
查看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),一般情况下不写,省略,按照默认。 命令格式为:

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

创建镜像

创建镜像有三种办法:

1.从已有镜像的容器创建

bash 复制代码
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提供的模板来常见

bash 复制代码
######### 从本地模板导入 ############
$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利用容器来运行和隔离应用;

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

进入容器

bash 复制代码
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 标记可以为容器重新命名

停止容器

bash 复制代码
docker stop <container id>

重启容器

bash 复制代码
docker restart <container id>  #重启容器

删除容器

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

Docker-从入门到实践

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

虚悬镜像

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

bash 复制代码
docker image ls -f dangling=true

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

bash 复制代码
docker image prune
相关推荐
非 白1 小时前
数据结构——树
数据结构·笔记·考研
Dizzy.5173 小时前
数据结构(查找)
数据结构·学习·算法
lalapanda4 小时前
Unity学习part4
学习
E___V___E4 小时前
MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2
数据库·笔记·mysql
啄缘之间6 小时前
4.6 学习UVM中的“report_phase“,将其应用到具体案例分为几步?
学习·verilog·uvm·sv
_院长大人_7 小时前
Docker Mysql 数据迁移
mysql·adb·docker
爱学习的小王!8 小时前
nvm安装、管理node多版本以及配置环境变量【保姆级教程】
经验分享·笔记·node.js·vue
陈志化8 小时前
JMeter----笔记
笔记·jmeter
viperrrrrrrrrr78 小时前
大数据学习(49) - Flink按键分区状态(Keyed State)
大数据·学习·flink
HollowKnightZ8 小时前
论文阅读笔记:Gated CRF Loss for Weakly Supervised Semantic Image Segmentation
论文阅读·笔记