25.1 docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,移植很方便;
docker由go语言编写,基于apache2.0协议发布基于linux kernel,要想在win下运行需要借助一个vm(虚拟机)来实现
官网 www.docker.com
docker从1.13x开始,版本分为社区版ce和企业版ee,并且基于年月的时间线形式,当前最新稳定版为17.09
参考
http://blog.csdn.net/chenhaifeng2016/article/details/68062414
Docker和传统的虚拟化比较:
Docker的优势:
启动非常快,秒级实现
资源利用率高,一台高配置服务器可以跑上千个docker容器
更快的交付和部署,一次创建和配置后,可以在任意地方运行
内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率
易迁移,平台依赖性不强
Docker核心概念:
- 镜像,是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。
- 容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
- 仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库(dockerpool.com)
25.2 安装docker
下载docker的repo源:
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo
yum安装:
yum install -y docker-ce
如果以上这种安装方式的速度比较慢的话,也可以直接下载rpm包: https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
下载完之后也需要使用yum安装,
yum install -y docker-ce-xxxx.rpm
安装完成之后,启动docker
[root@server ~]# systemctl start docker [root@server ~]# ps aux |grep docker root 15799 1.0 5.1 469280 52052 ? Ssl 09:27 0:00 /usr/bin/dockerd -H unix:// root 15804 0.6 2.9 391232 30240 ? Ssl 09:27 0:00 containerd --config /var/run/docker/containerd/containerd.toml --log-level info root 15951 0.0 0.0 112720 984 pts/0 S+ 09:27 0:00 grep --color=auto docker
启动docker后,会自动生成一些iptables规则:
[root@server ~]# iptables -nvL [root@server ~]# iptables -nvL Chain INPUT (policy ACCEPT 55 packets, 3910 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-STAGE-1 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 Chain OUTPUT (policy ACCEPT 29 packets, 3108 bytes) pkts bytes target prot opt in out source destination Chain DOCKER (1 references) pkts bytes target prot opt in out source destination Chain DOCKER-ISOLATION-STAGE-1 (1 references) pkts bytes target prot opt in out source destination 0 0 DOCKER-ISOLATION-STAGE-2 all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0 0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 Chain DOCKER-ISOLATION-STAGE-2 (1 references) pkts bytes target prot opt in out source destination 0 0 DROP all -- * docker0 0.0.0.0/0 0.0.0.0/0 0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 Chain DOCKER-USER (1 references) pkts bytes target prot opt in out source destination 0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
保存docker的iptables规则;
[root@server ~]# service iptables save
对于iptables规则,因为重启docker服务,就会自动生成,没有必要保存,但是它涉及很多容器,因此docker一般为专用服务器;
25.3 镜像管理
docker pull centos//可以下载centos镜像,因是国外资源,速度很慢
配置docker加速器
(参考 http://blog.csdn.net/xlemonok/article/details/71403534) vi /etc/docker/daemon.json//加入如下内容 { "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"] }
说明:这个url为加速器地址,需要到阿里云申请
配置完加速器,重启docker服务,再次docker pull centos会快很多
查看本地的镜像:
[root@server ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 75835a67d134 7 weeks ago 200MB
-
REPOSITORY 仓库
-
TAG 标签,相当于给这个镜像标上一个版本,用于区分这是新版本还是旧版本,或者用于区分这是什么环境的版本,总是就是作为一个标识符的存在
-
IMAGE ID是这个镜像的唯一标识,用于区分系统中不同的镜像
-
CREATED ,什么时候创建的
-
SIZE,这个镜像的大小
docker search xxx //搜索镜像,其中xxx是关键词
docker tag centos test_centos //给镜像打标签
[root@server ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 75835a67d134 7 weeks ago 200MB test_centos latest 75835a67d134 7 weeks ago 200MB [root@server ~]# docker tag centos test_centos:181129 [root@server ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 75835a67d134 7 weeks ago 200MB test_centos 181129 75835a67d134 7 weeks ago 200MB test_centos latest 75835a67d134 7 weeks ago 200MB
把镜像启动为容器
[root@server ~]# docker run -itd centos 8e3ff98afc9e609a3448985497591a85a1d8b3e04fc59a3790b66015a5c9d791
注:
-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面
查看运行中的容器,加上-a选项后可以查看所有容器,包括未运行的
[root@server ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e3ff98afc9e centos "/bin/bash" 20 seconds ago Up 19 seconds
删除指定镜像
[root@server ~]# docker rmi test_centos Untagged: test_centos:latest [root@server ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test_centos 181129 75835a67d134 7 weeks ago 200MB centos latest 75835a67d134 7 weeks ago 200MB
其中后面的参数可以是tag,如果是tag时,实际上是删除该tag。当后面的参数为镜像ID时,则会彻底删除整个镜像,所有标签也会一同删除。
25.4 通过容器创建镜像
进入容器:其中xxxxx为容器id,这个id可以用docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端
[root@server ~]# docker ps CONTAI