最近的工作真是千头万绪,刚折腾完Playbook又要折腾Tower。
Tower是ansible的一个可视化管理工具,开源的名字是AWX,但是这跟docker有什么关系呢?
安装AWX的时候需要用到docker,但发现自己对这个东西竟然一无所知。。
Docker is an open-source project that automates the deployment of applications inside software containers, by providing an additional layer of abstraction and automation of operating-system-level virtualization on Linux. Docker uses the resource isolation features of the Linux kernel such as cgroups and kernel namespaces, and a union-capable filesystem such as aufs and others to allow independent “containers” to run within a single Linux instance, avoiding the overhead of starting and maintaining virtual machines.
Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心命名空间(name space),来建立独立的软件容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机器造成的额外负担。
——摘自维基百科
晕了, 试着将这一堆翻译成人话就是:
Docker是一个封装标准,或者也可以说它是一种封装方式,它把部署一个镜像/系统/开发环境等等等等所需要的基础设施封装在一个标准容器中。最终目的是将部署一个系统/镜像/开发环境的流程简化,把本来零散的各种依赖关系打包成一个完整的、系统的解决方案,这样在第一次部署时把过程中遇到的坑都填平,就能大大简化系统/环境的第二次到第N次移植与部署。
奈何才疏学浅,在网上看了一圈参考资料之后,我只能理解到这个程度了。
P.S. 感谢知乎。
广义上的原因参考上文。
狭义上的原因是我要装的AWX需要用Docker部署。
Docker的安装和卸载Docker可以安装在Windows、Linux、Mac等各个平台上。具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:
[root@xxx ~]# docker version Client: Version: 1.12.3 API version: 1.24 Go version: go1.6.3 Git commit: 6b644ec Built: OS/Arch: linux/amd64 Server: Version: 1.12.3 API version: 1.24 Go version: go1.6.3 Git commit: 6b644ec Built: OS/Arch: linux/amd64
查看Docker的帮助信息:# docker –help。各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。
类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
从官方注册服务器 (https://hub.docker.com )的仓库中pull下CentOS的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:
[root@xxx ~]# docker search centos # 查看centos镜像是否存在 [root@xxx ~]# docker pull centos # 利用pull命令获取镜像 Using default tag: latest latest: Pulling from library/centos 08d48e6f1cff: Pull complete Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c Status: Downloaded newer image for centos:latest [root@xxx ~]# docker images # 查看当前系统中的images信息 REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 0584b3d2cf6d 9 days ago 196.5 MB
以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。
[root@xxx ~]# docker run -it centos:latest /bin/bash # 启动一个容器 [root@72f1a8a0e394 /]# # 这里命令行形式变了,表示已经进入了一个新环境 [root@72f1a8a0e394 /]# git --version # 此时的容器中没有git bash: git: command not found [root@72f1a8a0e394 /]# yum install git # 利用yum安装git ...... [root@72f1a8a0e394 /]# git --version # 此时的容器中已经装有git了 git version 1.8.3.1
此时利用exit退出该容器,然后查看docker中运行的程序(容器):
[root@xxx ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72f1a8a0e394 centos:latest "/bin/bash" 9 minutes ago Exited (0) 3 minutes ago
angry_hodgkin这里将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看:
[root@xxx ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git [root@xxx ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE xianhu/centos git 52166e4475ed 5 seconds ago 358.1 MB centos latest 0584b3d2cf6d 9 days ago 196.5 MB
其中,-m指定说明信息;-a指定用户信息;72f1a8a0e394代表容器的id;xianhu/centos:git指定目标镜像的用户名、仓库名和 tag 信息。注意这里的用户名xianhu,后边会用到
此时Docker引擎中就有了我们新建的镜像xianhu/centos:git,此镜像和原有的CentOS镜像区别在于多了个Git工具。此时我们利用新镜像创建的容器,本身就自带git了。
[root@xxx ~]# docker run -it xianhu/centos:git /bin/bash [root@520afc596c51 /]# git --version git version 1.8.3.1
利用exit退出容器。注意此时Docker引擎中就有了两个容器,可使用docker ps -a查看。
以上都是从参考资料的连接里直接引用的,并非原创。
上面的每一步都亲测有效,但我没有用centos集成git而是用centos with ansible集成了ruby,不过都没区别。
不得不说别人写的教程真是好啊。
好不容易搭的ansible server环境被我搞崩了,崩溃ing。。。
中午睡觉的时候做了一个梦,梦见自己变成机器猫里的小夫了,真是可怕。。。