1 Docker简介
docker近几年非常火,因为它是容器虚拟化,更能够充分提高硬件资源的使用率。其实利用率高不算什么,它最大的优势是能给让运维人员或者开发人员快速部署和交付资源,大大提高了工作效率。几乎所有的大企业都在使用docker,所以我们没有理由不去了解它,不去学习它。https://yeasy.gitbooks.io/docker_practice/content/introduction/what.html (感觉还不错的docker电子书)
- 官网 www.docker.com
- 容器虚拟化,比传统的虚拟化轻量
- 使用go语言开发,基于apache2.0协议。
- 开源软件,项目代码在github维护。github https://github.com/docker/docker.github.io
- docker从1.13x开始,版本分为社区版ce和企业版ee,并且基于年月的时间线形式。
- https://yeasy.gitbooks.io/docker_practice/content/introduction/why.html
- docker和传统的虚拟化比较
1. docker虚拟化
2. 传统的虚拟化
也就是说,让我们创建一个新的虚拟机的时候,如果使用Vmware,首先我们需要分配一定的硬件资源去运行虚拟出来的系统,如果一台电脑例如我的win7 配置一般,也就顶多可以跑10个centos,但是如果使用Docker就可以创建成千上百个centos系统,且每个系统都是独立的,隔离开来的,硬件资源也是隔离开来的。这就是根本区别!
- docker优势
1. 启动非常快,秒级实现
2. 资源利用率高,一台高配置服务器可以跑上千个docker容器
3. 更快的交付和部署,一次创建和配置后,可以在任意地方运行
4. 内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率
5. 易迁移,平台依赖性不强
- Docker核心概念
1. 镜像,是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。
2. 容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
3. 仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库(dockerpool.com)
2安装Docker
[[email protected] ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo //下载docker的yum源 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1802 100 1802 0 0 772 0 0:00:02 0:00:02 --:--:-- 772 [[email protected] ~]# yum install -y docker-ce //用yum源的版本安装docker,其实本机也是有的,但是本机的yum自带的源版本比较低,我们需要最新的稳定版来安装 [[email protected] ~]# systemctl start docker //启动docker [[email protected] ~]# ps aux |grep docker root 20090 0.4 1.7 428548 26808 ? Ssl 01:39 0:00 /usr/bin/dockerd root 20093 0.0 0.5 264032 7776 ? Ssl 01:39 0:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docke-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc root 20414 0.0 0.0 112664 976 pts/0 R+ 01:39 0:00 grep --color=auto docker [[email protected] ~]# docker version //查看版本 Client: Version: 17.09.0-ce API version: 1.32 Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:41:23 2017 OS/Arch: linux/amd64 Server: Version: 17.09.0-ce API version: 1.32 (minimum version 1.12) Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:42:49 2017 OS/Arch: linux/amd64 Experimental: false [[email protected] ~]# iptables -nvL Chain INPUT (policy ACCEPT 150 packets, 10819 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0 0 0 DOCKER-ISOLATION all -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 0 0 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0 当我们配置完毕后,会自动帮我们创建如上的一些IPtables 规则,其目的就是不影响docker虚拟机的正常运行。(每次重启docker服务会自动把iptables规则添加上,所以不用担心删除)
3 镜像管理
- docker 由于在国外,国内限制比较大,所以我们一般会使用阿里云的加速器去下载一个镜像
- 配置docker加速器
[[email protected] ~]# vi /etc/docker/daemon.json { "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"] } 说明:这个url为加速器地址,我们也可以直接到阿里云去申请也可以拿来这个使用。 [[email protected] ~]# systemctl restart docker //加速配置完成后需要重启 [[email protected] ~]# docker pull centos //从docker.com获取centos镜像(这时用了加速器的速度会很快)
- docker镜像管理的基本操作
[[email protected] ~]# docker images //查看本地镜像 REPOSITORY TAG IMAGE ID CREATED SIZE centos latest d123f4e55e12 9 days ago 197MB [[email protected] ~]# docker search jumpserver//搜索镜像,其中jumpserver是关键词 [[email protected] ~]# docker tag centos chylinux//为镜像设置标签chylinux [[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest d123f4e55e12 9 days ago 197MB chylinux latest d123f4e55e12 9 days ago 197MB 查看设置的标签会发现改行的image id和centos的一样,类似于更换一个新名字再次展现出来 [[email protected] ~]# docker tag centos chylinux:chy //或者一步到位:(直接修改容器为chylinux,tag为chy) [[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest d123f4e55e12 9 days ago 197MB chylinux chy d123f4e55e12 9 days ago 197MB chylinux latest d123f4e55e12 9 days ago 197MB [[email protected] ~]# docker run -itd centos //启动centos的容器(-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面) 6605c26e980579af355bd38cb1e45fa61d44e0a472f649be2e7bf8a322a1ac68 [[email protected] ~]# docker ps -a //查看运行的容器,加上-a选项后可以查看所有容器,包括未运行的(不加-a是查看启动的容器) CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6605c26e9805 centos "/bin/bash" About a minute ago Up About a minute sad_brahmagupta [[email protected] ~]# docker rmi chylinux //用来删除指定镜像其中后面的参数可以是tag,如果是tag时,实际上是删除该tag(这里需要注意一下如果删除时用的默认tag latest时用如上的方式可以删除但是如果删除时用的不是默认的tag必须要加tag的名称,如下所示的删除例子)。当后面的参数为镜像ID时,则会彻底删除整个镜像,所有标签也会一同删除 Untagged: chylinux:latest [[email protected] ~]# docker rmi chylinux:chy Untagged: chylinux:chy
4 通过容器创建镜像
- 刚刚只是说到了如何删除修改一些基础的操作,一旦镜像搭建好了,如何才能通过命令行进入系统呢?
[[email protected] ~]# docker exec -it 6605c2 bash//其中6605c2为容器id,这个id可以用docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端
- 进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像
[[email protected] /]# yum install -y net-tools//在镜像中安装net-tools [[email protected] /]# ifconfig //查看虚拟ip 而且在外部的虚拟主机我们也是可以看到这个网卡的! eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 3184 bytes 10678749 (10.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2838 bytes 156894 (153.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 退出是ctrl+d
- 把我们刚刚制作的镜像保存成一个新的镜像,下次我们再次需要的时候就可以直接使用(不需要再次安装我们已经安装过的服务!)
[[email protected] ~]# docker commit -m "install net-tools" -a "chenhaiying" 6605c26e9805 centos_with_net //这个命令有点像svn的提交,-m 加一些改动信息,-a 指定作者相关信息 6605c26e9805这一串为容器id,再后面为新镜像的名字 sha256:87dde0ff7187ea314deed8b1b934c0d3e4a75e24ad2a94ee9bdcf11acd0e8b41 [[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_with_net latest 87dde0ff7187 17 seconds ago 277MB centos latest d123f4e55e12 9 days ago 197MB [[email protected] ~]# docker run -itd centos_with_net bash //运行docker 8b1dc20b6c75c85e29145e667ff96ccf93cdf9587d4584872b3c072392c1796d [[email protected] ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8b1dc20b6c75 centos_with_net "bash" 3 seconds ago Up 1 second compassionate_mestorf 6605c26e9805 centos "/bin/bash" 28 minutes ago Up 28 minutes sad_brahmagupta
希望看过的童鞋多多指教,谢谢!