Docker是容器虚拟化技术的实现。将运做应用所须要的系统环境,由下而上打包成镜像,以达到应用跨平台间的无缝接轨运做。docker
Docker和传统虚拟化方式的不一样之处bash
1)传统虚拟机技术是虚拟出一套硬件,并在其上运行一个操做系统,在该系统上再运行所需应用进程。而容器没有进行硬件虚拟,容器内没有本身的内核,容器内的应用进程直接运行于宿主的内核。所以容器要比传统虚拟机更为轻便。服务器
2)每一个容器之间互相隔离,每一个容器有本身的文件系统,容器之间不会相互影响。ide
优势学习
占用资源少,启动快。操作系统
1)仓库:repository,集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是不一样的。仓库注册服务器上存放着多个仓库,每一个仓库中存储多个镜像,每一个镜像有不一样的标签(tag)。命令行
2)镜像:iamge,只读的模板,用来建立Docker容器。rest
3)容器:container,用镜像建立的运行实例。日志
镜像命令blog
1)service docker start:启动Docker后台服务
2)docker images [OPTIONS] :列出本地主机上的镜像
OPTIONS说明
-a :列出本地全部的镜像(含中间映像层)
-q :只显示镜像ID。
--digests :显示镜像的摘要信息
3)docker search 镜像名字:查找镜像
4)docker pull 镜像名字[:TAG]:下载某个版本镜像
5)docker rmi 镜像ID1 [镜像ID2...]:删除镜像
组合命令:一次性删除多个命令 docker rm -f $(docker ps -a -q)
6)docker save 镜像名1:版本号 镜像名2:版本号 -o ./压缩包名.tar :打包镜像
容器命令
1)docker run [OPTIONS] IMAGE [COMMAND] [ARG...]:新建并启动容器
OPTIONS说明
--name="容器新名字": 为容器指定一个名称
-d: 后台运行容器,并返回容器ID,也即启动守护式容器
-i:以交互模式运行容器,一般与 -t 同时使用
-t:为容器从新分配一个伪输入终端,一般与 -i 同时使用
-P: 随机端口映射
-p: 指定端口映射,有如下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
2)docker ps [OPTIONS]:列出当前全部正在运行的容器
OPTIONS说明
-a :列出当前全部正在运行的容器+历史上运行过的
-l :显示最近建立的容器。
-n:显示最近n个建立的容器。
-q :静默模式,只显示容器编号。
3)docker start 容器ID或者容器名:启动容器
4)docker restart 容器ID或者容器名:重启容器
5)docker stop 容器ID或者容器名:中止容器
6)docker kill 容器ID或者容器名:强制中止容器
7)docker rm 容器ID:删除已中止的容器
8)docker logs -f -t --tail 数字 容器ID:查看容器日志
-t 是加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
9)docker top 容器ID:查看容器内运行的进程
10)docker inspect 容器ID:查看容器内部细节
11)docker exec -it 容器ID /bin/bash:进入正在运行的容器并以命令行交互
12)docker cp 容器ID:容器内路径 目的主机路径:从容器内拷贝文件到主机上
13)docker commit -m="提交的描述信息" -a="做者" 容器ID 要建立的目标镜像名:[标签名] :提交容器副本生成新的镜像
镜像是一种轻量级、可执行的独立软件包,打包了软件运行环境和基于运行环境开发的软件。它包含运行某个软件所需的全部内容,包括代码、运行时、库、环境变量和配置文件。
镜像是由一层一层的文件系统(UnionFS)组成。
为何Docker镜像要采用这种分层结构
共享资源,复用中间层。不用镜像可使用相同的镜像层来构建。宿主机只需在磁盘上保存一份基础的镜像层,内存中也只需加载一份镜像层,就能够为全部使用到该镜像层的容器服务了。
镜像的每一层均可以被共享。
做用:持久化数据,将关键的数据保存在宿主机,以免容器关闭后,数据跟着消失。
数据卷添加方式
1)直接命令添加
a) 命令: docker run -it -v /宿主机绝对路径目录:/容器内目录的绝对路径 镜像名
b) 使用命令:docker inspect 容器ID 查看容器数据卷是否挂载成功
c)注意:若是docker挂载主机目录Docker访问出现cannot open directory .: Permission denied。解决办法:在挂载目录后多加一个--privileged=true参数便可。
2)Dockerfile添加
a)格式:VOLUME["/containerName1","/containerName2"]
b)注意:编写Dockerfile时,不能指定宿主机目录,而会在运行Dockerfile时,自动生成宿主机的挂载目录。