Docker的学习笔记
- Docker
- B站视频链接-docker快速入门
-
- docker的启动
- [dockerfile 文件的编写实现镜像的创建](#dockerfile 文件的编写实现镜像的创建)
- [采用docker build创建镜像](#采用docker build创建镜像)
- 有了镜像就可以启动容器
- B站文档资料
- 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