本 post 为狂神课程笔记

# 重要名词

  • 镜像(image)
    • Docker 镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat 镜像 => run => tomcat01 容器, 通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
  • 容器(container)
    • Docker 利用容器技术,独立运行一个或者一组应用, 通过镜像来创建的
    • 启动,停止,删除,基本命令!
    • 就目前可以把这个容器理解为一个建议的 linux 系统
  • 仓库(repository)
    • 存放镜像的地方
    • Docker Hub(默认是国外的)
    • 阿里云等都有容器服务(配置镜像加速!)

# docker 安装(win 版)

若遇到 WSL 报错,可参考文章;若 win 10/win 11 遇到 device guard 问题,参考教程

参考 windows 安装 docker 教程:文章链接

注意在启动 docker desktop 前,确保 hyper-V 以及 wsl 的正常

通过运行 hello-world 映像来验证是否正确安装了 Docker :

$ sudo docker run hello-world

# docker 底层原理

Docker 是一个 Client-Server 结构的系统,Docker deamon(守护进程)运行在敲命令的 (docker CLI 所在的)主机上,通过 Socket 从客户端访问

Docker Server 接收到 Docker-Client 的指令,就会执行这个命令


docker 为什么比 VM 快?

d8ffd9ddf253908fadbd2aece5029082

  1. Docker 有着比虚拟机更少的抽象层
  2. Docker 利用的是宿主机的内核,VM 需要的是 Guest OS

所以说,新建一个容器的时候,docker 不需要像虚拟机一样重新家在一个操作系统内核, 避免隐刀。虚拟机是加载 Guest OS , 分钟级别的。而 Docker 是利用宿主机的操作系统, 省略了这个复杂的过程, 秒级!

# docker 命令

# 帮助命令

docker verion               # 显示 docker 的版本信息
docker info                 # 显示 docker 的系统信息,包括镜像和容器的数量等
docker 指令 --help       	   # 帮助命令

# 镜像命令

docker images  # 查看本地主机上所有镜像
# 解释
REPOSITORY                  # 镜像的仓库员
TAG                         # 镜像的标签
IMAGE ID                    # 镜像的 id
CREATED                     # 镜像的创建时间
SIZE                        # 镜像的大小
# 可选项
-a                          # 列出所有镜像
-q                          # 指向是镜像的 id
docker search  # 搜索镜像 
docker pull 镜像名[:tag] # 拉取镜像,如果不写 tag,默认拉取最新版本
# 联合文件系统,分层下载
docker rmi 镜像名 / 镜像ID
# 批量删除
docker rmi -f $(docker images -aq)  # 查出所有镜像 id, 递归删除

# 容器命令

docker run [可选参数] IMAGENAME # 新建容器并启动
# 参数说明
--name="NAME"               # 容器别称,用来区分不同容器
-d                          # 后台方式运行
-it                         # 使用交互方式运行,进入容器查看内容
-p                          # 指定容器的端口 -p 8080:8080
	-p ip主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
	-p 容器端口
-P   						# 随机端口
docker ps            # 列出正在运行的容器
docker ps -a         # 列出当前正在运行的容器 + 历史运行过的容器
docker ps -n=?       # 显示最近创建的容器?number  指个数
docker ps -q         # 只显示容器的编号

退出容器

exit            # 停止容器并退出
Ctrl+P+Q        # 保持容器运行并退出

删除容器

docker rm 容器id                   # 删除单个容器
docker rm 容器id 容器id             # 删除多个容器
docker rm -f $(docker ps -aq)       # 删除所有容器
docker ps -aq|xargs docker rm       # 删除所有容器

启动和停止容器的操作

docker start 容器id       # 启动容器
docker restart 容器id     # 重启容器
docker stop 容器id        # 停止当前正在运行的容器
docker kill 容器id        # 强制停止容器

# 常用其他命令

后台启动容器

docker run -d IMAGENAME
# 问题: docker ps 发现 centos 停止了
# 常见的坑: docker 容器使用后台运行,就必须要有一个前台进程. docker 发现没有应用,就会自动停止

查看日志

docker logs -args

查看容器中的进程信息

docker top CONTAINERID # 查看运行中的容器的进程

查看镜像的元数据

docker inspect containerid

进入当前正在运行的容器

# 容器通常设定为后台运行。如果有进入容器的需要
docker exec -it containerid /bin/bash   # 通过 exec 进入容器开启一个新终端,可在里面操作(常用)
docker attach containerid               # 通过 attach 进入容器正在运行的进程,不会创建新进程

容器内拷贝文件到宿主机上

docker cp containerid:/path /主机path 
# 拷贝是一个手动过程,未来我们可以使用 -v 卷的技术,做到数据自动同步
总访问量:加载中...更新于

谢谢你请我喝[茶]!(๑OvO๑)♪

柳小寒寒子 微信支付

微信支付