本 post 为狂神课程笔记
# 重要名词
- 镜像(image)
- Docker 镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat 镜像 => run => tomcat01 容器, 通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
- 容器(container)
- Docker 利用容器技术,独立运行一个或者一组应用, 通过镜像来创建的
- 启动,停止,删除,基本命令!
- 就目前可以把这个容器理解为一个建议的 linux 系统
- 仓库(repository)
- 存放镜像的地方
- Docker Hub(默认是国外的)
- 阿里云等都有容器服务(配置镜像加速!)
# docker 安装(win 版)
参考 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 快?

- Docker 有着比虚拟机更少的抽象层
- 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 卷的技术,做到数据自动同步 |