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的入门到使用

上述可知道Docker Client启动,但是Docker Server并未启动

Service Docker启动运行Docker Server服务

Docker版本查看服务版本

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所有的运行都是需要镜像文件作为基础的

①,容器生命周期管理

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标签)镜像名:标签都必须为小写