一、DOCKER简介
1、DOCKER是一种开源的容器引擎,可以让开发者打包应用以及依赖的库,然后发布到任何流行的Linux发行版上,移植性强。
2、由go语言编写,基于apache2.0协议发布。
3、基于Linux kernel ,要想在widows下运行需要借助虚拟机来实现。
4、DOCKER优势:
(1)启动快,秒级别
(2)资源利用率高,一台高配置服务器上可以跑上千个dockers容器
(3)更快的交付和部署,一次创建和配置后,可以在任意地方运行。
(4)内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率。
(5)易迁移,平台依赖性不强。
5、DOCKER核心概念:
(1)镜像,是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。
(2)容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动,开始,停止,删除等操作,每个容器都是隔离的。
(3)仓库,存放镜像的场所,仓库分为公开仓库和私有仓库。最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库(dockerpool.com)。
二、DOCKER安装
1、下载yum源
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo
2、安装DOCKER
yum install -y docker-ce
3、也可以通过扩展源安装
yum install -y epel-release
yum install -y docker
4、启动DOCKER
systemctl start docker
三、DOCKER镜像管理
1、通过docker pull下载镜像
docker pull centos
2、查看本地镜像
docker images
3、为镜像标记标签
docker tag 源镜像 标签名
4、将镜像启动创建容器,首次启动使用run,-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动
docker run -itd wyu
5、查看运行的容器
docker ps
6、进入正在运行的容器
docker exec -it container id bash
7、使用模板创建镜像
(1)下载模板
http://openvz.org/Download/templates/precreated
(2)将模板传到虚拟机中,导入镜像
cat centos-6-x86-minimal.tar.gz|docker import - centos6
(3)docker images查看导入镜像
(4)将现有镜像导出为文件
docker save centos6 -o linux1
(5)使用刚才的文件导入镜像
docker load --input linux1
docker load <linux1
8、容器及镜像的删除
(1)首先将容器停止,删除容器
docker ps
docker stop container id 如果无法删除可加-f强制删除
docker stop container id -f
docker rm container id
(2)其次删除对应镜像
docker rmi image id
四、DOCKER仓库管理
1、下载registry镜像,registry为docker官方提供的一个镜像,可以用来创建docker私有仓库。
2、以registry镜像启动容器,-p会把容器的端口映射到宿主机上,:左边为宿主机监听端口,右边为容器监听端口。
[root@oracle2 ~]# docker run -d -p 5000:5000 registry
694770bb5e48bbab02ce8c35803ce52612fecb2adc773ee191a8772bf2a72bcb
3、可以通过curl来访问。
[root@oracle2 ~]# curl 127.0.0.1:5000/v2/_catalog
{"repositories":[]}
4、将镜像上传到私有仓库中。
(1)标记tag,必须要带有私有仓库的ip:port
[root@oracle2 ~]# docker tag wyu 192.168.0.43:5000/wyu
(2)将标记的镜像推送到私有仓库
要提前修改配置文件,vim /etc/docker/daemon.json加入以下内容
{ "insecure-registries":["192.168.0.43:5000"] } 重启服务systemctl restart docker之后将镜像推送
[root@oracle2 ~]# docker push 192.168.0.43:5000/wyu
5、查看推送上来的镜像
[root@oracle2 ~]# curl 127.0.0.1:5000/v2/_catalog
{"repositories":["wyu"]}
五、DOCKER数据管理
1、挂载本地目录到容器里,相当于创建了一个数据卷
[root@oracle2 ~]# docker run -itd -v /doc1/data:/data wyu bash
b105906eead4f155a3c0da770e02c81929cda806987dfe897b826537535924d6
-v用来指定挂载目录,:前面/doc1/data为宿主机本地目录,/data为容器中目录,会在容器中自动创建。
进入到该容器中查看目录信息
2、挂载数据卷,使用上一步创建的数据卷为模板再创建一块数据卷并将其挂载。
(1)挂载目录时可以指定容器name,如果不指定就是随机定义
(2)生成新的数据卷
[root@oracle2 ~]# docker run -itd --volumes-from zen_lamport --name vol1 wyu bash
其中--volumes-from后加容器name,--name后为自定义容器name,wyu为来源镜像文件,可以通过docker ps 查看刚刚创建并挂载好的数据卷
3、定义数据卷容器,是用于多个容器之间共享数据,类似于Linux中的NFS,建立数据卷容器,以便于其他容器可以直接挂载该数据卷。
(1)建立数据卷容器
[root@oracle2 ~]# docker run -itd -v /data/ --name testvol1 wyu bash
/data是容器中的data目录
(2)其他容器挂载该数据卷
[root@oracle2 ~]# docker run -itd --volumes-from testvol1 --name wyuvol2 wyu bash
进入到新创建的容器中查看是否挂载成功
在data目录下创建文件
到源数据卷容器中查看是否存在
4、DOCKER数据卷的备份与恢复
备份:
(1)创建备份目录
mkdir /u01/backup
(2)由数据卷创建新的容器,并将本地备份目录挂载上去
[root@oracle2 u01]# docker run -itd --volumes-from testvol1 -v /u01/backup:/backup --name backupvol1 wyu /bin/bash
(3)查看目录信息
其中/data为数据卷目录,/backup为备份目录
(4)打包文件
恢复:
(1)将备份目录下的压缩文件拷贝到共享目录/data下
(2)由原来的数据卷容器创建新的容器
[root@oracle2 /]# docker run -itd --volumes-from testvol1 --name bak1 wyu bash
可以在新的容器中查看到/data目录以及目录下的信息
(3)解压文件恢复
六、DOCKER网络模式
1、host模式,使用docker run时--net=host指定,docker使用的网络实际上和宿主机一样,在容器内看到的网卡IP是宿主机IP。
2、container模式,使用--net=container:container_id/container_name,多个容器公用的网络,看到的IP是一样的。
3、none模式,使用--net=none,这种模式下不会配置任何网络。
4、bridge模式,使用--net=bridge指定,默认模式,会为每个容器分配一个独立的network namespace,类似于VMware NAT模式,同一宿主机的所有容器会在同一个网段下,相互之间可以通信。
七、DOCKER网络管理,外部访问容器
1、创建容器,并安装httpd服务
[root@oracle2 /]# docker run -itd centos
16fd8c1ccfb39ee41db5522665a868e2a4e47586f13bf8b97ce3d4adcaa5f644
[root@oracle2 /]# docker exec -it 16fd8c1c bash
[root@16fd8c1ccfb3 /]# yum install -y epel-release
[root@16fd8c1ccfb3 /]# yum install -y nginx
[root@16fd8c1ccfb3 /]# systemctl status nginx
Failed to get D-Bus connection: Operation not permitted
无法查看服务状态,由本容器创建新的镜像
[root@oracle2 /]# docker commit -m "nginx_wu" -a "wyu" 16fd8c1ccfb3 nginx1
[root@oracle2 /]# docker run -itd --privileged -e "container=docker" -p 5123:80 nginx1 /usr/sbin/init
在进入容器时加参数 --privileged -e “container=docker” 将bash 改为/user/sbin/init
2、启动服务
systemctl start nginx
3、查找服务对应的入口文件
find / -name *.html
在网页上测试是否可以访问
4、配置桥接网络
(1)配置本地桥接网络
拷贝一份网卡并命名为ifcfg-br0
[root@oracle2 ~]# cd /etc/sysconfig/network-scripts/
[root@oracle2 network-scripts]# cp ifcfg-enp0s25 ifcfg-br0
[root@oracle2 network-scripts]# cat ifcfg-enp0s25
TYPE=Ethernet
POXY_METHOD=none
NAME=enp0s25
DEVICE=enp0s25
ONBOOT=yes
BRIDGE=br0
[root@oracle2 network-scripts]# cat ifcfg-br0
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.0.43
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=119.29.29.29
DNS2=8.8.8.8
(2)重启网络systemctl restart network
(3)安装pipework
git clone https://github.com/jpetazzo/pipework
(4)拷贝文件
[root@oracle2 /]# cp pipework/pipework /usr/local/bin/
(5)开启一个容器
[root@oracle2 /]# docker run -itd --net=none --name test1 wyu_net bash
--net=none表示不分配任何网络,--name test1容器name为test1,wyu_net为安装有网络服务的源镜像
[root@oracle2 /]# pipework br0 test1 192.168.0.4/24@192.168.0.1
br0为设置的桥接网卡,192.168.0.4为设置容器的IP,需要与本机在同一IP,24为子网掩码,@192.168.0.1为网关
可以查看到IP为我们设置的192.168.0.4