1. docker命令行
docker命令行的基本格式:
docker + 管理的对象(比如容器,镜像) + 具体操作(比如创建,启动,停止,删除)
比如:docker image pull nginx:拉取一个nginx的docker image镜像
不清楚docker能管理什么对象或者不清楚有什么操作,可以输入docker --help或docker image --help
2. 镜像(image)和容器(container)
2.1 image镜像:
- Docker image是一个
read-only文件- 这个文件包含文件系统、源码、库文件、依赖等运行应用需要的文件
- 可以理解为一个模板
- 其具有分层的概念
2.2 container容器
- 可以理解为“一个运行中的docker image”
- 实质是复制image并在image上层加上一层
read-write的层,称之为container layer- 基于同一个image可以创建多个container

2.3 docker image的获取
- 自己制作
- 从registry拉取(比如docker hub)
3. 容器的基本操作
| 操作 | 命令(全) | 命令(简) |
|---|---|---|
| 容器的创建 | docker container run <image name> | docker run <image name> |
| 容器的列出(运行中) | docker container ls | docker ps |
| 容器的列出(全部) | docker container ls -a | docker ps -a |
| 容器的停止 | docker container stop <name or ID> | docker stop <container name or ID> |
| 容器的删除 | docker container rm <name or ID> | docker rm <container name or ID> |
3.1 批量操作
显示所有容器的ID号:
docker container ls -aq停止/删除当前所有容器:
①
docker container stop/rm af 87(af和87为容器ID号的前两位)②
docker container stop/rm $(docker container ls -aq)注意:无法删除一个正在运行的容器,需要先停止容器再删除,也可以使用
docker container rm 87(容器ID号) -f快速对系统进行清理,删除停止的容器,不用的image等:
docker system prune -a -f
4. 容器的attached和detached模式
① attatched模式:
在Windows系统和Linux/Mac系统下执行
docker container run -p 80:80 nginx,当前shell窗口会出现执行nginx的log,并且无法使用命令行。然后执行ctrl+c会出现不同的情况:Windows系统:执行完ctrl+c后,容器依旧会继续执行,仅仅只是在shell窗口执行退出。
Linux/Mac系统:执行完ctrl+c后,将执行脚本停止,容器退出。
将本地的输入/输出结果会直接反映容器内部(即上述Linux/Mac系统操作结果)即为attatched模式。Windows系统执行的结果并不是完整的attached模式
② detached模式:
在Windows系统和Linux/Mac系统下执行
docker container run -d -p 80:80 nginx,当前shell窗口并不会出现执行nginx的log(想要显示执行的log,可以使用docker container logs 85(容器ID号)),只会出现容器ID号,并且可以使用命令行。此时该容器处于detached模式。如果要重新attah到该容器,可以执行
docker attach 85(容器ID号)。创建容器时推荐使用detached模式
5. 容器的交互式模式
① 创建一个容器并进入交互式模式:
docker container run -it 执行
docker container run -it ubuntu sh后直接进入到ububtu容器的shell中,可以进行交互,此时执行exit会将ubuntu容器直接退出。② 在一个已经运行的容器里执行一个额外的command:
docker container exec -it 执行
docker container run -d -p 80:80 nginx创建detached模式的容器,然后执行docker exec -it 85(容器ID号) sh进入到该容器内部,此时执行exit并不会退出该nginx容器执行脚本(该nginx容器还在运行),只是退出当前shell。 该命令使用较为频繁,使用该命令可以进入容器内部进行检查。
6. Windows如何运行docker engine?
Windows安装完docker的服务端和客户端后,输入
docker version后在客户端信息中可以查询到OS/Arch:windows/amd64,而服务端信息中0S/Arch:Linux/amd64。那么在Windows系统下为什么会出现Linux环境?在Windows中搜索Hyper-V Manager,会出现DockerDesKtopVM这样一台Linux系统的虚拟机,这台虚拟机安装了docker的engine。
7. 容器和虚拟机

虚拟机底层需要Hypervisor(VMWare、Virtual box等),容器运行在container engine之上
7.1 容器不是Mini的虚拟机
- 容器其实是进程
- 容器中的进程被限制了堆CPU、内存等资源的访问
- 当进程停止后,容器就退出了
7.2 容器的进程
查询当前的容器进程:
docker top 1b(容器ID号)如果此时使用的是Windows系统,是无法使用
ps aux | grep nginx查看到进程状态,因为docker engine在DockerDesKtopVM中,并不在Windows宿主机中。

查询进程的关系结构:
pstree -halps 9547(进程ID号)9480即为创建该容器的进程ID号,id后面的字符串为容器的ID号

注意,我们在容器中看到的进程ID号和在宿主机上看到的进程ID号是不一样的。
下图中,此时显示的容器进程为1和7;进入到容器内部,进程ID号为15803


8. docker container run运行流程
当执行
docker container run -d -p 80:80 --name webhost nginx后(–name是给容器指定名称webhost,没有指定的话就随机生成):
- 在本地查找是否有nginx这个image镜像
- 本地没有就去远程的image registry查找nginx镜像(默认的registry是Docker Hub)
- 下载最新版本的nginx镜像 (nginx:latest 默认)
- 基于nginx镜像来创建一个新的容器,并且准备运行
- docker engine分配给这个容器一个虚拟IP地址
- 在宿主机上打开80端口并把容器的80端口转发到宿主机上
- 启动容器,运行指定的命令(在上述命令最后可以加上创建容器后需要执行的命令,这里没有加上其他命令就执行默认脚本启动nginx)
9. 参考
https://dockertips.readthedocs.io/en/latest/container-quickstart.html
本文详细介绍了Docker命令行的基本格式,以及如何通过命令管理Docker镜像和容器。解释了镜像是只读模板,容器是运行中的镜像实例。讲解了如何获取和操作镜像,包括创建、列出、停止和删除容器。还提到了容器的attached和detached模式,以及交互式模式的使用。此外,讨论了Windows环境下Docker的运行原理,容器与虚拟机的区别,并解析了`docker run`命令的执行流程。最后,提供了实用的Docker操作技巧和参考链接。
585

被折叠的 条评论
为什么被折叠?



