Docker的入门到使用
一,什么是Docker? 【官方解释】
Docker是一个开源的应用容器引擎,基于Go 语言 并遵从Apache2.0 协议开源.Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone 的应用),更重要的是容器性能开销极低。是容器技术的代表,可以理解为一个粗糙的轻量级的虚拟机。
随着大数据越来越成熟,应用越来越多,使用RDD(Resilient Distributed Dataset)越来越多,分布式,微服务,大数据云计算等,Docker就必不可少了。
二,Docker解决了什么问题?
答:①Docker可以解决生产环境和测试环境的运行环境不一致会导致的问题.②一台服务器之中,可以解决不同服务之间干扰问题.③临时拓展性高,弹性拓展方便,只需要下载Docker,加载镜像到拓展的虚拟机!直接可运行!
三,Docker的思想:
可以在同一个主机上运行多个应用程序,而应用程序的运行环境彼此隔离,互不干扰,可以充分利用主机的计算和存储资源,新机器只需要安装搬运工并导入构建好的镜像就可以完成程序部署,免去了繁琐的安装和配置工作,维护成本大大降低.Docker一个容器只做一件事的核心思想!
四,Dokcer安装
4.1,安装要求
Linux CentOS和Ubuntu
64位数操作系统,并且内核版本为3.10以上
查看系统要求
Uname -r
二,Docker是在Ubuntu操作系统上开发,所以对Ubuntu系统支持是最好的
CentOS的安装Docker
sudo wget -qO- https://get.docker.com | SH
说明:-q标识输出要简单,O-标识标准输出,而不是输出到文件
sudo usermod -aG docker用户名
例如:sudo usermod -aG docker root
默认情况下不能使用非根用户直接运行多克尔命令,将当前用户(your_user)加入搬运工用户组
Docker版安装完成,查看Docker版本
上述可知道Docker Client启动,但是Docker Server并未启动
Service Docker启动运行Docker Server服务
Docker版本查看服务版本
看到上述即安装和启动成功。
五, Docker的三大核心概念:
Docker 的三大核心:镜像[images] ,容器[Container] ,仓库[Repository],三大核心概念的关系,用户去仓库拉取镜像,运行在容器中!
镜像[images]:
镜像是创建搬运工容器的基础,多克尔镜像类似于虚拟机镜像,可以将它理解为一个面向码头工人引擎的只读的文件,包含文件系统创建镜像有三种方法:
①:基于已有镜像的容器创建。主要是利用docker commit命令。
②:基于本地模板导入推荐利用OpenVZ的提供的模板来创建。
③:基于dockerfile创建。首先按照dockerfile的格式,编写好Dockerfile文件,之后通过docker build命令来创建镜像.docker构建会取得制定的dockerfile,由dockerfile务来创建镜像文件。
容器[Container]:
泊坞窗容器类似一个轻量级的沙箱,码头工人利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例,可以将其启动,开始,停止,删除,而这些容器都是相互隔离,互不可见的。可以把容器看做一个简易的LINUX系统环境(这包括根用户权限,进程空间,用户空间和网络空间等),以及运行在其中的应用程序打包而成的应用盒子,镜像本身是只读。容器从镜像启动的时候,Docker会在镜像的最上层建一个可写层,镜像本身保持不变。可以利用docker create命令创建一个容器,创建后的的容器处于停止状态,可以使用docker start命令来启动它。也可以直接利用docker run命令来直接从镜像启动运行一个容器.docker run = docker creat + docker start当利用docker run创建并启动一个容器时,docker在后台的标准操作包括:
①,检查本地是否存在指定的镜像,不存在就从公有仓库下载
②,利用镜像创建并启动一个容器
③,从宿主机配置的网桥接口中桥接一个虚拟的接口到容器中
④,从地址池中配置一个IP地址给容器
⑤,执行用户指定的应用程序
⑥,执行完毕后容器终止
备注:当你在容器内部的操作配置,容器停止运行,所有的操作还是会存在!Docker ps -a查看找到容器ID,提交之后,可生成新的镜像!如果你不提创建新的镜像,之前的操作就会丢失!容器内部操作为一次性的,Docker commit容器ID镜像名提交生成新的镜像用来保存操作的配置
仓库[Repository]:
仓库是存放Docker镜像的地方。仓库和注册服务器(登记)还是有区别的。注册服务器是存放仓库的地方,在其中存放了很多仓库,每个仓库存放一类镜像文件。仓库分为公有仓库和私有仓库,DockerHub是目前最大的公有仓库。可以通过docker push / pull命令从仓库中上传和下载镜像,docker search命令来搜索镜像。
网易云镜像中心:c.163.com
在保证Docker启动成功的前提下,黏贴回车即可!
六,Docker的使用
Docker所有的运行都是需要镜像文件作为基础的
①,容器生命周期管理
docker run运行镜像文件,生成服务容器
-d:后台运行容器,并返回容器ID;
-i:以交互模式运行容器,通常与-t同时使用;
-p:端口映射,格式为:主机(宿主)端口:容器端口
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
--name =“Mynginx”:为容器指定一个名称;
--dns 8.8.8.8:指定容器使用的DNS服务器,默认和宿主一致;
-m:设置容器使用内存最大值;
--net =“bridge”:指定容器的网络连接类型,支持bridge / host / none / container:四种类型
docker run -p -i -t -d -v / root / software /:/ mnt / software / 05115a755af0 / bin / bash
-p端口映射外部端口:内部端口
-v文件路径映射宿主机目录:容器目录
-d后台运行
-P随机映射对外所有端口
docker build 创建镜像,命令用于使用Dockerfile docker
system prune 删除所有已经运行结束的容器docker
rm'容器ID' 删除容器【此容器必须为未运行状态】
docker cmmit容器ID 新镜像名 提交保存为新的镜像文件
docker start'容器ID' 启动一个或多少已经被停止的容器docker
stop'容器ID' 停止一个运行中的容器
docker restart'容器ID' 重启容器
docker kill 杀掉一个运行中的容器
例如:docker kill -s Kill'容器ID'
docker rm 删除一个或多少容器
例如:docker rm -f'容器ID1''容器ID2' 删除两个容器
docker create 创建一个新的容器但不启动它
例如:docker镜像nginx: 最新创建一个容器,并将容器命名为myrunoob docker
create --name myrunoob nginx:latest --name是重命名容器
②,容器相关操作
docker ps
-a:显示所有的容器,包括未运行的
-l:显示最近创建的容器
-n:列出最近创建的n个容器
-q:静默模式,只显示容器编号
-s :显示总的文件大小
docker ps -n 5 显示最近创建的5个容器
docker ps -a -q 列出所有创建的容器ID
docker inspect 获取容器/镜像的元数据docker
inspect mysql:5.6获取mysql:5.6 数据的原信息
docker top'容器ID' 查看容器中运行的进程信息,支持ps命令参数
docker exec -it容器ID bash 切入到容器内部【交互式】,退出后,容器还会在运行docker
attach容器ID切入到容器内部【非交互式】,exit后,容器停止运行
docker logs'容器ID'获取容器的日志
例如:docker logs --since =“2016-07-01”--tail = 10'容器ID'
查看容器mynginx从2016年7月1日后的最新10条日志
docker port 列出指定的容器的端口映射
例如:docker port'容器ID'
docker load <web.tar 加载导出的镜像文件到Docker容器中
例如:docker load <导出的镜像文件名.tar
③,容器rootfs命令
docker commit: 从容器创建一个新的镜像。-
a:提交的镜像作者
-c:使用Dockerfile指令来创建镜像
-m:提交时的说明文字
-p:在commit时,将容器暂停
docker commit -a“root”-m“my apache”a404c6c174a2 mymysql:v1
docker cp用于容器与主机之间的数据拷贝
例如:docker cp'本地全路径'容器ID:'容器内部
ID'docker cp /root/AAAA.war 2a501f61a426:/ usr / java / tomcat / apache-tomcat- 27年5月8日/ webapps中
④,镜像仓库docker
Docker pull'镜像名' 从镜像仓库中拉取或者更新指定镜像docker
Docker search'镜像名' 从镜像中心查找镜像
⑤,本地镜像管理
码头图像列出本地镜像docker
rmi'镜像ID'删除本地一个或多少镜像【前提是此镜像不被其他镜像依赖】docker
build命令用于使用Dockerfile创建镜像文件docker
history查看指定镜像的创建历史
docker save -o javaweb.tar镜像ID将docker中的镜像导出
例如:docker save -o存储本地的镜像名字.tar docker中的镜像ID
上述存储语法有一个缺陷根据镜像ID存储的为镜像文件,当加载到其他机器上的码头工人容器中会丢失镜像名称和焦油名称
docker save -o javaweb.tar镜像名称:Tar将docker中的镜像导出
例如:docker save -o存储本地的镜像名字.tar docker中的镜像名称:镜像Tar
当前存储语法,会保存当前镜像的名称和镜像文件的Tar,当加载到其他机器上的Docker容器中不会丢失镜像名称和Tar名称
⑥,info |版本
docker info显示Docker系统信息,包括镜像和容器数docker
version显示Docker版本信息
上述所有使用镜像ID和容器ID的所有操作都可以使用镜像名称/容器名称和镜像标签/容器标签替换
七,备注:Docker使用的注意事项
注意事项①
当一个镜像文件已经运行后,停止在Docker容器中,(Docker ps -a)可以查看,如果想要再运行相同的shell命令启动这个服务,必须要先删除掉容器中的进程,才能重新运行!
报错信息如下:
docker: Error response from daemon: Conflict. The container name "/liuwunan-es" is already in use by container "6b7cbf12d49242bdaebf2cae9e0a3bcdfb3bd0623c39a5e2d1068048e00c451b". You have to remove (or rename) that container to be able to reuse that name.
请参阅'docker run --help'。
(docker system prune 删除停止的所有容器)
重新运行Shell启动这个服务就可以了
注意事项②
当修改了一个容器内部的配置之后,如果需要当前修改配置永久生效需要重新提交当前容器,生成新的镜像文件,否则当下次删除了已经停止运行的容器,配置会重新还原,之前所有的修改配置文件都会丢失!为保证下次删除容器,配置不丢失最好的办法是重新提交容器生成新的镜像文件
(docker commit容器id镜像名:tar标签)镜像名:标签都必须为小写