Docker是怎么工作的

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机 上,然后通过socke连接从客户端访问,守护进程从 客户端接收命令并管理运行在主机上的容器。

docker 与主机调试 docker机制_加载

为什么Docker比VM快

docker 与主机调试 docker机制_加载_02


通过上图可以知道:

  1. docker有着比虚拟机更少的抽象层。由于Docker不需要Hypervisor实现资源虚拟化,运行在docker容器上的程序直接使用的都是物理机的硬件资源。因此在CPU、内存利用率上Docker将会有明显的优势。
  2. Docker 利用的是宿主机的内核,而不需要Guest OS。因此新建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核 。对于虚拟机来说,当新建一个虚拟机是时候,虚拟软件需要加载Guest OS,这个过程是分钟级别的,而Docker直接利用宿主机的操作系统,省略了这个过程,因此新建一个docker容器只需要几秒钟。

docker 与主机调试 docker机制_rabbitmq_03

Docker常用命令

帮助命令

查看docker版本
[johnny@localhost ~]$ docker version

查看docker详细信息

[johnny@localhost ~]$ docker info

docker帮助命令
[johnny@localhost ~]$ docker --help

镜像命令

docker images 列出本地主机上的镜像

【可选参数】
-a 列出本地所有镜像(含中间映像层)
-q 只显示镜像ID
–digests 显示镜像摘要
–no-trunc 显示完整的镜像信息

docker 与主机调试 docker机制_docker_04

docker search 某个镜像名字 ,该命令从docker.hub中搜索文件并返回查询结果

docker 与主机调试 docker机制_docker 与主机调试_05


docker pull 某个镜像名字 从镜像源拉取镜像到本地

docker rmi 某个镜像ID

docker 与主机调试 docker机制_加载_06

容器命令

新建并启动容器

docker run [option] 容器名/id

docker 与主机调试 docker机制_加载_07

docker 与主机调试 docker机制_rabbitmq_08

列出当前正在运行的容器

docker ps [options]

docker 与主机调试 docker机制_docker 与主机调试_09

退出容器

两种退出方式

  1. exit 容器停止并 退出
  2. ctrl + P +Q 容器不停止退出

启动容器

docker start 容器名/id

重启容器

当容器经ctrl + P + Q 退出,则
docker restart 容器名/id

停止容器

温柔地停止
docker stop 容器名/id

强制停止容器

docker kill 容器名/id

删除已停止的容器

docker rm 容器ID
一次性删除多个容器:
docker rm -f $(docker ps -qa)

重要

启动守护式容器

docker 与主机调试 docker机制_docker_10


所以使用 docker -l 查看不到

查看容器日志

docker logs -f -t --tail 容器ID
-t 是加入时间戳
-f 跟随最新的日志打印
–tail 数字显示最后多少条

查看容器内运行的进程

docker top

docker 与主机调试 docker机制_docker_11

查看容器内部细节

docker inspect 容器名/id

进入正在运行的容器并以命令行交互

docker 与主机调试 docker机制_docker 与主机调试_12

docker 与主机调试 docker机制_加载_13

从容器拷贝文件到主机上

docker 与主机调试 docker机制_Docker_14

安装mysql

docker 与主机调试 docker机制_docker_15

使用docker 安装rabbitmq

docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.7.14-management

windows浏览器访问虚拟机开的rabbitmq服务,无法访问,尝试

  1. 关闭防火墙

systemctl stop firewalld

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

docker 未启动

[johnny@localhost ~]$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor pre>
   Active: inactive (dead)
     Docs: https://docs.docker.com
[johnny@localhost ~]$ systemctl restart docker.service 
[johnny@localhost ~]$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor pre>
   Active: active (running) since Fri 2021-07-02 13:18:52 CST; 6s ago
     Docs: https://docs.docker.com
 Main PID: 4849 (dockerd)

一劳永逸的方法,设置docker开机自启动
systemctl enable docker

利用虚拟机搭建docker环境,使用rabbitmq入门