Docker run的运行流程

底层原理
C/S结构,守护进程运行在主机上,通过Socket从客户端来访问
Docker Server 接收到客户端(Docker-Client)的指令,就会去执行这个命令

Docker有着比虚拟机更少的抽象层,Docker利用的是宿主机的内核,VM则需要Guest OS
所以,新建一个容器时,docker不需要向虚拟机一样重新加载一个操作系统内核,避免引导
虚拟机是加载Guest OS 分钟级别,而docker则利用宿主机的操作系统,省略这个复杂的过程,秒级。

Docker的常用命令
#帮助命令:
docker version #显示docker的版本信息
docker info #显示docker的详细信息
docker --help #帮助命令
镜像命令
#image
docker images --help
docker images #查看所有本地的主机上的镜像
(-a #列出所有镜像;-q #只显示镜像的ID)
docker search 搜索镜像
docker search mysql/nginx/tomcat
(通过收藏数来过滤 --filter=STARTS=3000 搜索出来的镜像收藏数不小于3000)
docker pull 下载镜像
docker pull 镜像名 :tag(版本)
(不指定tag,就默认下载latest(最新版),分层下载,
bashdocker pull mysql:5.7
docker remove images(等同于docker rmi)删除镜像-f,全部删除
docker rmi 镜像ID #删除指定镜像
bashdocker rmi -f $(docker images -aq) #强制删除本地 Docker 环境中所有镜像(无论是否被容器引用),且只通过镜像 ID 精准删除。 #docker images -aq:只输出本地所有镜像的 ID(-a 是所有镜像,-q 是静默模式只显示 ID); #$(...):把前面获取的所有镜像 ID 作为参数传给后面的命令; #docker rmi -f:rmi 是删除镜像,-f 是强制删除(哪怕镜像被停止的容器引用也能删)
容器命令
有了镜像才可以创建容器
1.新建容器并启动docker run [可选参数] images
#参数说明:
--name="Name" 容器名字,如tomcat01 tomcat02,用于区分容器
-d 后台方式运行
-it 交互方式运行
-p 指定容器的端口 8080:8080
①-p 主机端口:容器端口
②-p 容器端口
③-p ip 主机端口:容器端口ji
④容器端口
bash#基于 CentOS 镜像创建并启动一个交互式容器,直接进入容器的 bash 命令行终端 docker run -it centos /bin/bash退出容器的两种方式
操作 效果 适用场景 输入 exit/ 按Ctrl+D退出终端,容器停止运行 临时调试,用完就关 按 Ctrl+P+Q退出终端,容器保持运行 想保留容器,后续再进入
bash# 重新进入 docker exec -it 容器ID /bin/bash-P 随机指定端口
列出正在运行的容器
docker ps # -a 列出正在运行+历史运行过的容器;-n=? 显示最近创建的(n是个数)几个容器; -q 只显示容器的编号
删除容器
docker rm 容器ID #删除指定容器,不能删除正在运行的容器,强制(-f)
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q | xargs docker rm #删除所有的容器
#
xargs把管道传递过来的容器 ID "拆分" 成单个参数,逐个传给docker rm(解决批量参数传递问题)
常用的其他命令
后台启动容器
bash
#命令docker run -d 镜像名
docker run -d centos
#问题是docker ps时,发现centos停止了
#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止。
#如nginx,容器启动后,发现自己没有提供服务就会立刻停止,就是没有程序了
查看日志
bash
docker logs -tf --tail 10 容器ID
#-tf 显示日志
#--tail number 显示的日志条数
查看容器中的进程信息
bash
docker top
查看镜像的元数据
bash
docker inspect 容器ID
进入当前正在运行的容器
bash
#容器通常以后台方式运行,需要进入容器,修改配置
docker exec -it 容器ID /bin/bash
#或docker attach 容器ID
docker exec #进入容器后开启一个新的终端,可以在里面操作
docker attach #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
bash
docker cp 容器ID:容器内路径 目的主机路径

