PHP下如何优雅的使用Docker来构建环境(一)

369 查看

前言

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
<none>                  <none>              ad7bb024631b        9 days ago          362.4 MB
<none>                  <none>              68f54c38c09e        10 days ago         362.4 MB
<none>                  <none>              9e599b43d79f        10 days ago         362.4 MB
<none>                  <none>              4939079b5793        10 days ago         362.4 MB
<none>                  <none>              465cdd230d56        10 days ago         362.4 MB
<none>                  <none>              9d2980267ca1        10 days ago         362.4 MB
<none>                  <none>              eb511bbabec2        10 days ago         362.4 MB
<none>                  <none>              ffc712eeedb7        10 days ago         362.4 MB
<none>                  <none>              de9d3010cec2        10 days ago         362.4 MB
<none>                  <none>              d3818ad8ee03        10 days ago         362.4 MB
<none>                  <none>              5a50d7c9f721        10 days ago         362.4 MB
<none>                  <none>              ef408ea46d34        10 days ago         362.4 MB
<none>                  <none>              bb720b95f60a        10 days ago         362.4 MB
<none>                  <none>              c74c70d12d6f        10 days ago         362.4 MB
<none>                  <none>              51d95118f10a        10 days ago         362.4 MB
<none>                  <none>              b4014edba8ac        10 days ago         362.4 MB
<none>                  <none>              9238755c1095        10 days ago         362.4 MB
<none>                  <none>              0d06777fd38a        10 days ago         362.4 MB
<none>                  <none>              1adfb54367d4        10 days ago         362.4 MB
<none>                  <none>              7e38d504c01a        10 days ago         362.4 MB
<none>                  <none>              d87e483f5383        10 days ago         362.4 MB
<none>                  <none>              ca2843dcd786        10 days ago         362.4 MB
<none>                  <none>              2cc2c1303e42        10 days ago         362.4 MB
<none>                  <none>              fd68eb9d6a6a        10 days ago         362.4 MB
<none>                  <none>              576203266dcc        10 days ago         362.4 MB
<none>                  <none>              87cd4603f056        10 days ago         362.4 MB
<none>                  <none>              63164129801c        10 days ago         362.4 MB
<none>                  <none>              8e3ac5e68657        10 days ago         362.4 MB
<none>                  <none>              5b96089abd0d        10 days ago         362.4 MB
<none>                  <none>              633abb5ec84e        10 days ago         362.4 MB
<none>                  <none>              8c3eab64ed4b        11 days ago         362.4 MB
<none>                  <none>              2a8273582788        11 days ago         362.4 MB
<none>                  <none>              e81cad2d9842        11 days ago         362.4 MB
php                     7.0.3-fpm           486955ae3d52        11 days ago         495 MB
<none>                  <none>              a0c5da2a099c        11 days ago         328.2 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
<none>                  <none>              17ab14acade7        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
<none>                  <none>              bb3048065f78        8 weeks ago         259.6 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
<none>                  <none>              ea0aca21950d        10 weeks ago        360.3 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>你是删除不了的,因为他可能是其他镜像的依赖,这些<none>叫做中间镜像。你要知道,Docker镜像是增量构建的。什么意思?就是比如你在Ubuntu镜像上构建vim,他只会记录你vim的增加,对于Ubuntu相同的东西并不会多份保存。

如果你要删除可以尝试使用:

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

停止、开始、重启你的容器

停止、开始或者重启一个Docker容器的速度是非常快的,哈哈,其实就是重启一个进程而已啦,并不是你想象中要重启一台服务器或者虚拟机那么久。

docker stop bruceit
docker start bruceit
docker restart bruceit

我相信你一看就懂。

自学能力很重要

本文只列举了不到7条命令,然而Docker的命令可不止这几条,这几条只是我在日常中使用频率比较多的。所以呢,你还是要到去看官方手册啦,自学能力很重要哦!~

Dockerfile,一个非常重要的文件

Dockerfile其实好比一张图纸,你在Dockerfile描述一个镜像或者容器长什么样,最后跑出来的就是什么样,是不是很厉害?下一节,我们来讲讲这个神奇的文件吧。

未完待续