前言
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描述一个镜像或者容器长什么样,最后跑出来的就是什么样,是不是很厉害?下一节,我们来讲讲这个神奇的文件吧。
未完待续