Docker可以说是一种更加轻量化的虚拟机,比起一般的KVM要节省很多空间,而且开发者可以打包他们的应用以及依赖软件到某个镜像中,此镜像可以发布到任何流行的Linux机器上。
Docker不是虚拟GuestOS的,它直接跑在宿主机的内核上,而且由于它很轻便,所以比起传统的虚拟机可以同时跑更多台服务。
个人认为:Docker就是开发者专门用来发布服务的轻量级的虚拟机。
Docker有镜像、容器和仓库三个重要概念:
1.镜像。Docker镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像是用于快速部署容器的一个模板,可以分为基础镜像(如centos)与用户镜像(httpd、MySQL)
2.容器。容器是一种轻量级的应用程序隔离机制,允许内核自身隔离用户空间运行的多组进程。它有自身的进程列表、网络、文件系统等资源,但是与主机共享内核。
3.仓库。镜像仓库是Docker用来集中存放镜像文件的地方,有公共仓库与私有仓库(类似GitHub,叫做Docker Hub)
三者的关系:可以通过Dockerfile生成镜像文件,当镜像运行起来就是一个容器,镜像是静态的,容器是动态的,可以停止、启动、重启容器,当对容器做了一些配置后,也可以把此容器提交成一个镜像,然后把镜像推送到镜像仓库里,供其他用户使用,也可以从公共仓库里拉去别人做好的镜像。
Docker的安装
主机可以使用CentOS或者Ubantu系统,本例中统一使用CentOS
1.首先,Docker官方的镜像网站Docker Hub上有非常多的操作系统的镜像,但是碍于服务器在国外,所以一般拉去镜像的时候都比较慢,所以可以先配置国内的镜像加速器,这里我们使用阿里云提供的加速服务。
(1)安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce
(2) 配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://m596gb0j.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
上文中提到了要先安装/升级Docker,所以我们先去参考文档中安装Docker
安装完毕后,就可以继续配置上文的Docker加速器了。
2.从仓库里拉取镜像到本地
我们这里也可以使用DaoCloud提供的镜像加速,命令:
docker pull daocloud.io/centos:7
使用命令 docker images 可以查看当前本地存在的镜像
镜像名由仓库名加标签名组成(repository和tag),同一个repository名但tag名不同也是不同的镜像
镜像名的结构是 repository : tag ,仓库名和标签名用冒号:相连。如果不显示的设定镜像的tag则默认为latest,如图。
修改镜像名可以使用 docker tag 源镜像名 新的镜像名,其中如果tag为latest则可以省略。
示例: docker tag centos daocloud.io/centos:7
注意:docker tag会生成一个新的镜像文件,且并不会删除源镜像,所以就会有两个除了名字不一样其他都一样的镜像,用户可选择手动删除,或者不删。
容器的管理
镜像已经拉到本地了,但是仅有镜像是没有任何意义的,必须把镜像运行起来,当镜像运行起来,它就是一个容器了,下面讲解如何运行镜像以及对它的管理。
(1)运行一个镜像。 -i 选项为交互式,也就是运行镜像可以与镜像运行起来的容器进行管理,-t 选项为开启一个终端,/bin/bash为其提供一个SHELL,记住 run命令是用来创建一个容器的,run多少次就会创建多少个容器,每个容器都有一个自己的 ID
docker run -i -t centos /bin/bash
(2)通过docker ps命令查看容器
如果容器退出了,处于不活跃状态则 ps命令是看不到的,可以使用 docker ps -a -a选项是查看所有容器
(3)启动不活跃的容器
docker start 容器ID/容器name 如果容器在run的使用有通过—name创建别名,则启动时也可以用名字
(4)进入启动的容器
docker attach ID/name
(5)配置容器恒处于活跃状态,一般容器退出之后就会进入不活跃状态,他是在run的时候可以配置容器始终在活跃状态,除非手动关闭:docker run -i -t -d —restart=always —name=compute -h node1 -p 10001:80 centos /bin/bash
—restart=always表示退出容器也会一直运行,—name=compute选项表目给容器取名为compute,-h node1表示容器的主机名为node1,也就是hostname命令获得的名字。-p 10001:80是宿主机的10001端口将映射到容器的80端口。
(6)为容器配置网络,容器刚启动时是没有网络服务也没有IP地址的,所以需要安装网络服务工具
yum install net-tools -y
安装完成后通过 ifconfig 查看网卡的ip地址,发现已经有网络了。
(7)在容器中安装想要的服务器,这里我们示例安装httpd软件包,让容器能够提供web服务。
进入容器 docker attach computed (注意这里的compute是自己配置docker的名字)
安装httpd: yum install httpd -y
启动httpd服务,并且给服务创建一个首页:
httpd
echo “hello,docker” > /var/www/html/index.html
(8)在宿主机测试是否可以访问到容器提供的httpd服务,注意!需要访问的是宿主机自身ip地址的10001端口,本例中我的ip地址是192.168.47.132 ,则我要访问的地址就是192.168.47.132:10001。 以此类推。
curl http://192.168.47.132:10001
发现成功获取到首页的内容。
Docker的删除
(1)删除容器 :docker rm 容器ID/容器ID(示例中就是docker rm 58fd)注意删除容器只能使用容器 ID唯一标识
容器ID可以只写前几位,只要Linux能唯一识别即可。
(2)删除镜像:docker rmi 镜像名(示例中就是docker rmi centos)
那么,基本docker配置流程就是这样,先拉取镜像,然后用镜像创建容器,容器包括启动,停止,删除等管理,然后用户再在容器中配置自己需要的服务,包括httpd,vsftpd,named(web服务,ftp服务,dns服务)等常见的服务都可以自行配置,和在宿主机上的配置方法一样。
