转载

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

<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

你可能会说这些 &lt;none> 都是些什么鬼,哈哈强迫症的同学要注意啦,有些 &lt;none> 你是删除不了的,因为他可能是其他镜像的依赖,你要知道,Docker镜像是增量构建的。什么意思?就是比如你在Ubuntu镜像上构建vim,他只会记录你vim的增加,对于Ubuntu相同的东西并不会多份保存。

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

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

docker stop bruceit  docker start bruceit  docker restart bruceit

我相信你一看就懂。

自学能力很重要

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

Dockerfile,一个非常重要的文件

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

未完待续

原文  http://dockone.io/article/1083
正文到此结束
Loading...