PHP下如何优雅的使用Docker来构建环境(一)
前言
Docker诞生于2013年,是一门基于Go语言开发的LXC的高级容器引擎。目前代码开源在Github上,并吸引了大部分开发者的关注。不管是想真正的使用Docker带来的便利中还是只是为了好玩,我觉得你都应该一试。个人而言,Docker的命令是比较简单好理解的,但是Docker中也有很多的概念是比较抽象晦涩,然而这不影响我们作为一个PHP开发者来使用Docker。
本文着重介绍如何优雅的使用Docker来构建开发环境甚至是线上环境(当然这个还不是你能够拿去大规模部署的)。
这个系列文章我会带大家认识Docker基本命令,Dockerfile,Mac下Docker搭建,Docker应用编排,集群构建初认识,Docker官方三件客和基于swarm的shipyard。
Docker基本认识
如果你对Docker的基础命令比较熟悉了,可以跳过。
下面我将列举我平常用的比较多的概念和命令。
Docker镜像拉取命令
这个是为了拉取到你所需要的镜像,由于Docker的官方镜像国内访问速度比较慢,所以我们可以使用daocloud.io的镜像,所以你可以这么写:
docker pull daocloud.io/nginx:latest | | | 镜像地址 镜像名称 镜像版本
又很多初学者不知道怎么加速pull过程,对学习造成很大的困扰,这里大家注意下。但是呢,作为一名程序员你应该学会某种技能哦。(附送我的邀请传送门: VPN传送门)
创建一个容器
docker run -it --name=bruceit ubuntu bash这是非常基本的命令,你可以通过这条命令来跑起来一个容器。
按下 Ctrl+P然后按下 Ctrl+Q来退出终端,如果你直接 Ctrl+C或者 exit的话容器将直接停止,这也是初学者容易迷糊的地方。
关于更多参数,你可以通过 docker run -help获取。
进入一个容器
就像你创建了一台虚拟机,你总得进去虚拟机的终端看看吧?
docker exec -it bruceit bash我个人比较喜欢使用这条命令来进入容器。
查看容器里发生了什么
有时候你会遇到,容器一启动就挂掉或者结束掉了,你会感到莫名奇妙。这时候你可能需要这条命令来看看容器里到底发生了什么。
docker logs bruceit当然啦,前提是有日志可看,比如前面直接 docker run -it ubuntu bash这个命令就没什么日志可以输出的,不过呢,一般office的镜像都会提供日志的,这个以后部分中我们在慢慢聊吧。
我系统里到底有什么镜像
你可以通过:
docker images来查看你目前拥有的镜像。
你可能会看到这种情况:
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
phpdev latest 24c0b5733f83 9 days ago 362.4 MB
php 7.0.3-fpm 486955ae3d52 11 days ago 495 MB
nginx latest ae8e1e9c54b3 11 days ago 134.6 MB
mysql latest 9ece564cf894 11 days ago 361.3 MB
elasticsearch latest 2b364154b257 3 weeks ago 346.2 MB
redis latest 678a090a2546 4 weeks ago 151.3 MB
rabbitmq latest 6c1bb940499a 4 weeks ago 305.1 MB
jenkins latest 285c9f0f9d3d 4 weeks ago 708.5 MB
dev/puppet latest 697209192a73 5 weeks ago 328.1 MB
dev/yun latest 697209192a73 5 weeks ago 328.1 MB
115.com/yun latest 697209192a73 5 weeks ago 328.1 MB
yun_yun latest 90b28d9d2d66 5 weeks ago 328.1 MB
mysql 5.5.47 699c0769b628 5 weeks ago 256.5 MB
ghost latest e8bcee9b4ba0 6 weeks ago 351.3 MB
php 5.6.17-fpm 212d6ad44680 7 weeks ago 453.9 MB
php 5.6-apache e83c39465589 7 weeks ago 480.5 MB
docker_web latest b8add95fc24f 8 weeks ago 259.6 MB
server_web latest b8add95fc24f 8 weeks ago 259.6 MB
src_web latest b8add95fc24f 8 weeks ago 259.6 MB
src_phpfpm latest d7eafe53b19f 8 weeks ago 453.9 MB
server_phpfpm latest d7eafe53b19f 8 weeks ago 453.9 MB
docker_phpfpm latest d7eafe53b19f 8 weeks ago 453.9 MB
php 5.6.16-fpm db493c8f4214 11 weeks ago 453.9 MB
swarm latest a9975e2cc0a3 11 weeks ago 17.15 MB
daocloud.io/ubuntu 14.04 89d5d8e8bafb 11 weeks ago 187.9 MB
ubuntu latest 89d5d8e8bafb 11 weeks ago 187.9 MB
centurylink/wordpress latest b7f30fcd815e 9 months ago 520.2 MB
你可能会说这些 <none>都是些什么鬼,哈哈强迫症的同学要注意啦,有些 <none>你是删除不了的,因为他可能是其他镜像的依赖,你要知道,Docker镜像是增量构建的。什么意思?就是比如你在Ubuntu镜像上构建vim,他只会记录你vim的增加,对于Ubuntu相同的东西并不会多份保存。
停止、开始、重启你的容器
停止、开始或者重启一个Docker容器的速度是非常快的,哈哈,其实就是重启一个进程而已啦,并不是你想象中要重启一台服务器或者虚拟机那么久。
docker stop bruceitdocker start bruceitdocker restart bruceit
我相信你一看就懂。
自学能力很重要
本文只列举了不到7条命令,然而Docker的命令可不止这几条,这几条只是我在日常中使用频率比较多的。所以呢,你还是要到去看官方手册啦,自学能力很重要哦!~
Dockerfile,一个非常重要的文件
Dockerfile其实好比一张图纸,你在Dockerfile描述一个镜像或者容器长什么样,最后跑出来的就是什么样,是不是很厉害?下一节,我们来讲讲这个神奇的文件吧。
未完待续