Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
logo解释:
标志是一头鲸鱼携带着一堆容器。它正在向您发送这些信息的途中。Docker直译过来是码头工人,然而Docker给人的第一感觉是容器,容器技术英译为Linux Container, Container的直译有集装箱,容器两个意思。
我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色,在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响于是乎,IT领域借鉴了这一理念,大家就在想,有没有可能大家 只需要关注程序本身?
我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色, 「在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响」
Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。
重心:
Docker其实就是可以打包程序和运行环境,把环境和程序一起发布的容器。
开发者需要能方便高效构建应用,并且任何时间任何地点都可以获取。
对开发和运维( DevOps)人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常地运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀。
优势:
- 更快速的交付和部署
- 更高效的资源利用
- 更轻松的迁移和扩展
- 更简单的更新管理
作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势。
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
磁盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 完全隔离 | 完全隔离 |
虚拟化技术是一个通用的概念,在不同领域有不同的理解。在计算领域,一般指的是计算虚拟化或通常说的服务器虚拟化。
简单的说,「虚拟化」,顾名思义,就是「虚拟」的,是「假」的,是形而上的,是观念上、逻辑上的划分。
举栗说明
假设你现在手头上有一套房子,并且你要把它给租出去,租金的市场价是2000元/月。那么有没有办法把它租得更贵,获得6000元的租金呢?你想到了两个办法:
虚拟化分类:
- 完全虚拟化
- 硬件辅助虚拟化
- 部分虚拟化
- 超虚拟机化
- 操作系统虚拟化
什么是物理机
什么是虚拟机
什么是Docker
Docker技术的三大核心概念,分别是:
Docker 镜像 (Image) 类似于虚拟机镜像,可以将它理解为个面向 Docker引擎的模板,包含了文件系统。
Docker容器(Container)类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。**容器是从镜像创建的应用运行实例,**可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
注意:
容器和镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,可以记住这个简单的公式:容器 = 容器镜像 + 可读可写层
Docker仓库(Repository)类似于代码仓库,是Docker**集中存放镜像文件的场所。**目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。
注意:
Docker利用仓库管理镜像的设计理念与Maven非常相似。
咱们再来理解docker的两句口号就更好理解了
序号 | 软件 | 版本 |
---|---|---|
1 | Centos | 7.5 |
2 | Linux内核 | 3.8之上 |
systemctl stop firewalld
vim /etc/selinux/config
SELINUX=disabled
yum install -y docker
systemctl start docker
systemctl enable docker
docker run hello-world
Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。
docker pull
镜像是Docker运行容器的前提。docker pull
语法格式:
docker pull 镜像名字:[tag]
注意:
如果不指定tag,则下载Docker Hub公共注册服务器中仓库的最新版本。
docker images
列出本地主机上已有的镜像。docker images
[root@docker *]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
参数:
- 来自于哪个仓库,比如 ubuntu仓库。镜像的标签信息,比如14.04。
- 镜像的ID号(唯一)。
- 创建时间。
- 镜像大小。
镜像的ID信息十分重要,它唯一标识了镜像。
docker search
搜索远端仓库中共享的镜像,默认搜索Docker Hub官方仓库中的镜像。docker search
docker search [镜像名字]
参数:
可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、星级 (表示该镜像的受欢迎程度)、是否官方创建、是否自动创建等。
docker rmi
使用镜像的标签删除镜像 docker rmi
docker rmi 源名字
docker rmi image id
当我们有了镜像,才可以创建容器, 创建一个centos容器来学习
Docker的容器十分轻量级,用户可以随时创建或者删除容器。
语法格式
docker create -it 镜像名字
注意:
使用docker create命令新建的容器处于停止状态,可以使用
docker start
命令来启动它。
docker ps [参数]
参数:
- -a: 显示未启动容器
- -q:返回容器id号
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态( stopped)的容器重新启动。所需要的命令主要为docker run,等价于先执行docker create命令,再执行docker start命令。
语法格式:
docker run 镜像名字 /bin/echo 'hello world'
Docker在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
- 利用镜像创建并启动一个容器。
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
- 从地址池配置一个IP地址给容器。
- 执行用户指定的应用程序。
- 执行完毕后容器被终止。
下面命令则启动一个bash端,运行用户交互
docker run -t -i 镜像名字 /bin/bash
参数:
其中,-t选项让Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。
exit命令退出。
更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。用户可以通过添加-d参数来实现。
语法格式:
docker run -d 镜像名字 /bin/sh -c "while true; do echo hello world ;sleep 1 ;done"
容器启动后会返回一个唯一的ID,也可以通过docker ps命令来查看容器信息:
docker ps
获取容器输出信息
docker logs 容器id
语法格式:
docker stop 容器id
处于终止状态的容器,可以通过docker start命令来重新启动:
docker start 容器id
此外,docker restart命令会将一个运行态的容器终止,然后再重新启动
docker restart 容器id
在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息。某些时候如果需要进入容器进行操作,有多种方法,包括使用docker attach命令、docker exec命令,以及nsenter工具等。
语法格式:
docker attach 容器id
注意:
但是使用attach命令有时候并不方便。当多个窗口同时attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
Docke自1.3版本起,提供了一个更加方便的工具exec,可以直接在容器内运行命令。例如进入到刚创建的容器中,并启动一个bash:
docker exec -it 容器id /bin/bash
语法格式:
docker rm 容器id
参数:
- -f, --force=false强行终止并删除一个运行中的容器。
- -l, --link=false删除容器的连接,但保留容器。
- -V,–volumes=false删除容器挂载的数据卷。
#如果docker容器在启动的时候没有加 -d 参数
exit # 会直接停止同期并退出
Ctrt + p + q # 容器不停止 并退出
语法格式:
docker logs 容器id
参数:
- -f, --follow 跟踪实时日志
- –since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
- –tail string 从日志末尾显示多少行日志, 默认是all
- -t, --timestamps 显示时间戳
- –until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
语法格式:
docker top 容器id
语法格式:
docker cp 容器id:容器内路径 目录路径