Docker简介


官网 www.docker.com


github   https://github.com/docker/docker.github.io


开源的容器引擎,可以让开发者打包应用以及依赖的库,然后发布到任何流行的 linux 发行版上,移植很方便


由 go 语言编写,基于 apache2.0 协议发布


基于 linux kernel ,要想在 win 下运行需要借助一个 vm (虚拟机)来实现


自 2013 年开始,近些年发展迅猛


docker 从 1.13x 开始,版本分为社区版 ce 和企业版 ee ,并且基于年月的时间线形式,当前最新稳定版为 17.09 参考


 

Docker和传统的虚拟化比较        

docker qbittorrent 双网卡 qnap docker_bash

docker qbittorrent 双网卡 qnap docker_bash_02


Docker 的优势


 启动非常快,秒级实现


资源利用率高,一台高配置服务器可以跑上千个 docker 容器


更快的交付和部署,一次创建和配置后,可以在任意地方运行


内核级别的虚拟化,不需要额外的 hypevisor 支持,会有更高的性能和效率


易迁移,平台依赖性不强


docker qbittorrent 双网卡 qnap docker_bash_03

Docker核心概念


镜像, 是一个只读的模板,类似于安装系统用到的那个 iso 文件,我们通过镜像来完成各种应用的部署。


容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。


仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是 Docker hub ( hub . docker .com ),国内公开仓库( dockerpool.com )


 

Docker安装


curl https://download.docker.com/linux/centos/docker-ce.repo -o  /etc/yum.repos.d/docker.repo

docker qbittorrent 双网卡 qnap docker_docker_04


yum install -y docker-ce

docker qbittorrent 双网卡 qnap docker_docker_05

docker qbittorrent 双网卡 qnap docker_centos_06


速度比较慢,大家也可以直接下载 rpm 包


https://download.docker.com/linux/centos/7/x86_64/stable/Packages/


下载完,上传到 linux 下


也需要用 yum 安装,可以自动解决依赖关系


yum install -y docker-ce-xxxx.rpm


systemctl start docker  启动docker


docker qbittorrent 双网卡 qnap docker_docker_07


docker每次启动都会自动生成的iptables规则,删除后docker的网络会出问题

docker qbittorrent 双网卡 qnap docker_docker_08

Docker镜像管理


docker pull centos//可以到官方下载centos镜像,速度很慢

docker qbittorrent 双网卡 qnap docker_bash_09


配置 docker 加速器(参考 )


•创建加速器连接  vi /etc/docker/daemon.json//加入如下内容

{
  "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}

说明:这个url为加速器地址,需要同学们自行到阿里云申请


配置完 加速器,重启 docker服务,再次docker pull centos会快很多

docker qbittorrent 双网卡 qnap docker_centos_10


docker images 查看本地的镜像

docker qbittorrent 双网卡 qnap docker_docker_11


TAG  一般为版本标签


IMAGE ID  区分么个镜像的标识


 


docker search xxx //搜索公共仓库镜像,其中xxx是关键词

docker qbittorrent 双网卡 qnap docker_centos_12


docker tag centos centos-1 //给镜像打标签


打完标签后会生产新的镜像

docker qbittorrent 双网卡 qnap docker_bash_13

标示一个镜像

docker qbittorrent 双网卡 qnap docker_bash_14


也可以标签一样TAG不一样



docker qbittorrent 双网卡 qnap docker_docker_15


docker run - itd centos // 把镜像启动为容器, - i 表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面

docker qbittorrent 双网卡 qnap docker_bash_16

报错启动失败


[root@localhost ~]# vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:
    net.ipv4.ip_forward=1

重启network服务
# systemctl restart network

docker qbittorrent 双网卡 qnap docker_centos_17

docker qbittorrent 双网卡 qnap docker_docker_18

docker qbittorrent 双网卡 qnap docker_bash_19


 


docker ps //查看运行的容器,

docker qbittorrent 双网卡 qnap docker_docker_20


加上-a选项后可以查看所有容器,包括未运行的

docker qbittorrent 双网卡 qnap docker_docker_21


 


docker rmi centos // 用来删除指定镜像


其中后面的参数可以是 tag ,如果是tag时,实际上是删除该tag。当后面的参数为镜像ID时,则会彻底删除整个镜像,所有标签也会一同删除,类似linux的软连接

docker qbittorrent 双网卡 qnap docker_centos_22

docker qbittorrent 双网卡 qnap docker_centos_23


 

Docker通过容器创建镜像


docker run 启动容器后,可以通过下面命令进入容器


docker exec -it xxxxx   bash// 其中 xxxxx 为容器 id ,这个 id 可以用 docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端

docker qbittorrent 双网卡 qnap docker_bash_24


加bash 是因为给他增加bash进程,没有bash进程就不能进行交互


进入容器后可以使用命令查看内存大小 安装软件 等几乎与虚拟机一致,因为这是一个被严重删减的系统命令只有600多个


 


进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像


在容器中执行 yum install -y net-tools,查看IP地址


 


ctrl d退出容器

docker qbittorrent 双网卡 qnap docker_docker_25


docker自己找了个网段指定了IP ,每开启一个容器虚拟机就会添加一个网卡使用两者可以进行通信 

docker qbittorrent 双网卡 qnap docker_centos_26

docker qbittorrent 双网卡 qnap docker_centos_27


 


 


docker commit -m "change somth "  -a "somebody info" container_id new_image_name // container_id


通过 docker ps -a 获取,后面的new_image_name为新镜像名字


例如:   docker commit -m "install net-tools" -a " linux02" 14957c27d477 centos_with_nettool


这个命令有点像 svn 的提交, -m 加一些改动信息,-a 指定作者相关信息  2c74d这一串为容器id,再后面为新镜像的名字

docker qbittorrent 双网卡 qnap docker_centos_28


这样如果需要再新建一个镜像就不需要重复之前的操作


使用容器名字进入终端

docker qbittorrent 双网卡 qnap docker_centos_29

查看ip                                              

docker qbittorrent 双网卡 qnap docker_centos_30


测试网络

docker qbittorrent 双网卡 qnap docker_centos_31


linux又多了一个网卡



docker qbittorrent 双网卡 qnap docker_centos_32


 

Docker使用模板创建镜像


首先去下载一个模板

docker qbittorrent 双网卡 qnap docker_bash_33


http://openvz.org/Download/templates/precreated // 下载速度不快,阿铭下载了一个 centos6 的模板 centos-6-x86-minimal.tar.gz


导入该镜像的命令为:


cat centos-6-x86-minimal.tar.gz|docker import - centos6

docker qbittorrent 双网卡 qnap docker_bash_34


docker images查看导入的镜像

docker qbittorrent 双网卡 qnap docker_bash_35


启动                                     

docker qbittorrent 双网卡 qnap docker_docker_36

docker qbittorrent 双网卡 qnap docker_docker_37


把现有镜像,导出为一个文件:


docker save -o aming-centos.tar aming


我们还可以用该文件恢复本地镜像:


docker load --input aming-centos.tar  或者


docker load < aming-centos.tar


docker push image_name   // 可以把自己的镜像传到 dockerhub 官方网站上去,但前提是需要先注册一个用户,后续如果有需求再研究吧


 


Docker容器管理

• docker create  -it  centos6   bash //这样可以创建一个容器,但该容器并没有启动

docker qbittorrent 双网卡 qnap docker_bash_38

• docker start   container_id   //启动容器后,可以使用 docker ps  查看到,有start 就有stop,和restart

docker qbittorrent 双网卡 qnap docker_docker_39

• 之前我们使用的docker run 相当于先create再start

• docker run -it centos bash  

docker qbittorrent 双网卡 qnap docker_docker_40

• 这样进入了一个虚拟终端里面,我们可以运行一些命令,使用命令exit或者ctrl d 退出该bash,当退出后这个容器也会停止。

docker qbittorrent 双网卡 qnap docker_centos_41

• docker run -d  可以让容器在后台运行

• 比如:docker run -d centos bash -c "while :; do echo "123"; sleep 2; done"

• docker run --name web -itd centos bash // --name 给容器自定义名字

docker qbittorrent 双网卡 qnap docker_docker_42

docker qbittorrent 双网卡 qnap docker_centos_43

• docker run --rm -it centos bash -c "sleep 30" //--rm 可以让容器退出后直接删除,在这里命令执行完容器就会退出

docker qbittorrent 双网卡 qnap docker_docker_44

 

• docker logs 可以获取到容器的运行历史信息,用法如下

docker qbittorrent 双网卡 qnap docker_bash_45

• docker logs  container_id  

• docker attach 可以进入一个后台运行的容器,比如

• docker attach  container_id    //但是attach命令不算好用,比如我们想要退出终端,就得exit了,这样容器也就退出了,还有一种方法

• docker exec -it container_id  bash  //可以临时打开一个虚拟终端,并且exit后,容器依然运行着

• docker rm  container_id  //container_id是ps的时候查看到的,这样就可以把container删除,如果是运行的容器,可以加-f

docker qbittorrent 双网卡 qnap docker_bash_46

docker qbittorrent 双网卡 qnap docker_bash_47

• docker  export  container_id  > file.tar  // 导出容器,可以迁移到其他机器上,需要导入

• cat file.tar |docker import - aming_test   //这样会生成aming_test的镜像

 

Docker仓库管理

• docker pull registry   //下载registry 镜像,registy为docker官方提供的一个镜像,我们可以用它来创建本地的docker私有仓库。

docker qbittorrent 双网卡 qnap docker_bash_48

• docker run -d -p 5000:5000 registry   //以registry镜像启动容器,-p会把容器的端口映射到宿主机上,:左边为宿主机监听端口,:右边为容器监听端口

docker qbittorrent 双网卡 qnap docker_docker_49

docker qbittorrent 双网卡 qnap docker_centos_50

• curl 127.0.0.1:5000/v2/_catalog //可以访问它

• 下面我们来把其中一个镜像上传到私有仓库

• docker tag aming_test  172.7.15.113:5000/centos //标记一下tag,必须要带有私有仓库的ip:port

docker qbittorrent 双网卡 qnap docker_bash_51

• docker push 172.7.15.113:5000/centos //把标记的镜像给推送到私有仓库

• 此时并不会成功,Get https://172.7.15.113:5000/v2/: http: server gave HTTP response to HTTPS client

• 更改配置文件,vi /etc/docker/daemon.json//更改为

{ "insecure-registries":["192.168.96.135:5000"] }

docker qbittorrent 双网卡 qnap docker_centos_52

• systemctl restart docker

docker qbittorrent 双网卡 qnap docker_docker_53

• docker ps -a //查看容器已经关闭,还需要启动

• docker start  id //这里的id为registry容器id

docker qbittorrent 双网卡 qnap docker_bash_54

• 再次push

• docker push 172.7.15.113:5000/centos

docker qbittorrent 双网卡 qnap docker_centos_55

• curl 127.0.0.1:5001/v2/_catalog //可以查看到推送上来的镜像

docker qbittorrent 双网卡 qnap docker_centos_56

第二个容器

docker qbittorrent 双网卡 qnap docker_bash_57

docker qbittorrent 双网卡 qnap docker_docker_58

 

 

Docker数据管理

• 1. 挂载本地的目录到容器里

• docker run -tid -v /data/:/data centos bash //-v 用来指定挂载目录,:前面的/data/为宿主机本地目录,:后面的/data/为容器里的目录,会在容器中自动创建

docker qbittorrent 双网卡 qnap docker_docker_59

docker qbittorrent 双网卡 qnap docker_centos_60

 

 

• 2. 挂载数据卷

• 其实我们挂载目录的时候,可以指定容器name,如果不指定就随机定义了。比如上面我们没有指定,它就生成了一个名字为relaxed_franklin,这个名字可以使用命令 docker ps  看最右侧一列

• docker run -itd --volumes-from relaxed_franklin aming123 bash

docker qbittorrent 双网卡 qnap docker_centos_61

• 这样,我们使用aming123镜像创建了新的容器,并且使用了 relaxed_franklin  容器的数据卷

• 3. 定义数据卷容器

• 有时候,我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,然后其他容器直接挂载该数据卷。

• 首先建立数据卷容器

• docker run -itd -v /data/ --name testvol centos  bash  //注意这里的/data/是容器的/data目录,并非本地的/data/目录。 

• 然后让其他容器挂载该数据卷

• docker run -itd  --volumes-from testvol aming123 bash

 

 

 

 

Docker数据卷的备份与恢复

• 备份

• mkdir /data/backup

• docker run --volumes-from testvol -v  /data/backup/:/backup centos tar cvf  /backup/data.tar /data/

• 说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的/vol_data_backup/目录挂载到该容器的/backup下,这样在容器中/backup目录里面新建的文件,我们就可以直接在/data/backup/目录中看到了。 然后再把/data/目录下面的文件打包到成data.tar文件放到/backup目录下面。

• 恢复

• 思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。

• 新建数据卷容器:docker run -itd -v /data/ --name testvol2 centos bash

• 挂载数据卷新建容器,并解包:docker run --volumes-from testvol2  -v /data/backup/:/backup centos tar xf /backup/data.tar

 

 

docker qbittorrent 双网卡 qnap docker_bash_62