docker底层原理

1,Docker是如何工作的

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。

2,为什么Docker比VM快

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

docker命令[帮助+镜像]

1,帮助命令

docker version 查看docker版本
docker info 显示全系统信息
docker --help 显示docker相关的所有命令及功能说明
docker images --help 显示docker images命令功能和说明

2,镜像命令

2.1 docker images 列表本机上的镜像

语法

docker images [OPTIONS]

如何拷贝 docker 中的日志 docker拷贝命令_centos


REPOSITORY:表示镜像的仓库源

TAG:镜像的标签

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小OPTIONS 的参数说明

-a 列表本地的所有镜像及子镜像

-q 只显示镜像ID

–digests 显示镜像的摘要信息

–no-trunc 显示完整的镜像信息

如何拷贝 docker 中的日志 docker拷贝命令_docker_02

2.2 docker search 镜像搜索命令

语法

docker search 镜像名 -[OPTIONS]

如何拷贝 docker 中的日志 docker拷贝命令_如何拷贝 docker 中的日志_03


列表数据说明

OPTIONS参数的说明
–no-trunc 显示完整的镜像描述
-s 列出收藏数不少于指定值的镜像
–automated 只列出 automated build类型的镜像
2.3 docker pull 镜像下载命令

docker pull 镜像名称:[TAG]
例如:docker pull tomcat:8.5 下载8.5的镜像版本
dokcer pull tomcat 默认下载最新的tomcat镜像版本 【latest】

2.4 docker rim 镜像删除命令

删除单个 docker rmi -f 镜像ID
删除多个 docker rmi -f 镜像ID1 镜像ID2
docker rim -f 镜像名:[tag] 镜像名:[tag]
删除全部
docker rmi -f $(docker images -qa)
docker images -qa 列出所有镜像的ID

docker命令[容器]

1、什么是容器

容器镜像是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码,运行时,系统工具,系统库,设置。不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序。容器将软件与其周围环境隔离开来,例如开发环境和生产环境之间的差异,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突。

如何拷贝 docker 中的日志 docker拷贝命令_centos_04


1.轻量级

在一台机器上运行的Docker容器共享该机器的操作系统内核; 他们立即开始并使用更少的计算和内存。图像由文件系统层构建并共享公用文件。这最大限度地减少了磁盘使用量,图像下载速度更快。

2.标准

Docker容器基于开放标准,可在所有主要Linux发行版,Microsoft Windows以及任何基础架构(包括虚拟机,裸机和云中)上运行。

3.安全

Docker容器将应用程序彼此隔离并从底层基础架构中分离出来。Docker提供了最强大的默认隔离功能,可以将应用程序问题限制在一个容器中,而不是整个机器上。

2,演示前提

有镜像才能创建容器,这个是根本要求(下载centos镜像来演示)

docker pull centos

3,创建并启动容器

3.1语法
docker run [options] images [command][args]

run 运行
[options] 运行的参数配置
Images 镜像ID或镜像名称:[TAG]
command 命令 这个命令是容器启动之后再执行的命令

3.2options说明
有些是一个减号,有些是两个减号
–name=“容器新名字”: 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射; 主机端口随机
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort 宿主机的端口:容器端口
containerPort

3.3交互式运行
#使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash

4,列出当前所有正在运行的容器

4.1语法

docker ps [options]
4.2 options语法说明
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
–no-trunc :不截断输出。

docker ps -aq 显示所有容器的编号

如何拷贝 docker 中的日志 docker拷贝命令_如何拷贝 docker 中的日志_05

5,退出容器

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

6,启动容器

docker start 容器ID或容器名称

7,重启容器

docker restart 容器ID或容器名称

8,停止容器

docker stop 容器ID或容器名称

9,强制停止容器

docker kill容器ID或容器名称

10,删除已停止的容器

#单个删除
docker rm 容器ID
#多个删除
docker rm -f $(docker ps -aq)

11,其它重点内容

1,启用守护式容器
#使用镜像centos:latest以后台模式启动一个容器
docker run -d centos
问题:docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动是应的service即可。例如 service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行
2,查看容器日志
如果是后台运行的程序,那么如何查看运行的日志呢?
1,先运行一个程序 在后台被隔两秒输出[hello laolei]
docker run -d centos /bin/sh -c “while true;do echo hello laolei;sleep 2;done”
3,查看日志
docker logs -tf --tail 10 容器ID

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

4,查看容器运行进程
docker top 容器ID

5,查询容器内部细节

docker inspect 容器ID或名称

如何拷贝 docker 中的日志 docker拷贝命令_Docker_06

6,进入正在进行的容器并以命令行交互
#方式1
docker exec -it 容器ID /bin/bash
#方式2
docker attach 容器ID
#两种方式的区别
exec 在容器中打开新的终端 并且可以启动新的进程

attch 直接进行容器终端,不会启动新的进程

7,进入容器内拷贝文件到主机

如何拷贝 docker 中的日志 docker拷贝命令_如何拷贝 docker 中的日志_07


语法

docker cp 容器ID:容器内文件的路径 宿主机的路径

docker命令总结

如何拷贝 docker 中的日志 docker拷贝命令_docker_08