欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-05-16 20:01:10
...

前言

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

ad7bb024631b 9 days ago 362.4 MB

68f54c38c09e 10 days ago 362.4 MB

9e599b43d79f 10 days ago 362.4 MB

4939079b5793 10 days ago 362.4 MB

465cdd230d56 10 days ago 362.4 MB

9d2980267ca1 10 days ago 362.4 MB

eb511bbabec2 10 days ago 362.4 MB

ffc712eeedb7 10 days ago 362.4 MB

de9d3010cec2 10 days ago 362.4 MB

d3818ad8ee03 10 days ago 362.4 MB

5a50d7c9f721 10 days ago 362.4 MB

ef408ea46d34 10 days ago 362.4 MB

bb720b95f60a 10 days ago 362.4 MB

c74c70d12d6f 10 days ago 362.4 MB

51d95118f10a 10 days ago 362.4 MB

b4014edba8ac 10 days ago 362.4 MB

9238755c1095 10 days ago 362.4 MB

0d06777fd38a 10 days ago 362.4 MB

1adfb54367d4 10 days ago 362.4 MB

7e38d504c01a 10 days ago 362.4 MB

d87e483f5383 10 days ago 362.4 MB

ca2843dcd786 10 days ago 362.4 MB

2cc2c1303e42 10 days ago 362.4 MB

fd68eb9d6a6a 10 days ago 362.4 MB

576203266dcc 10 days ago 362.4 MB

87cd4603f056 10 days ago 362.4 MB

63164129801c 10 days ago 362.4 MB

8e3ac5e68657 10 days ago 362.4 MB

5b96089abd0d 10 days ago 362.4 MB

633abb5ec84e 10 days ago 362.4 MB

8c3eab64ed4b 11 days ago 362.4 MB

2a8273582788 11 days ago 362.4 MB

e81cad2d9842 11 days ago 362.4 MB

php 7.0.3-fpm 486955ae3d52 11 days ago 495 MB

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

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

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

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>你是删除不了的,因为他可能是其他镜像的依赖,你要知道,Docker镜像是增量构建的。什么意思?就是比如你在Ubuntu镜像上构建vim,他只会记录你vim的增加,对于Ubuntu相同的东西并不会多份保存。

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

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

docker stop bruceitdocker start bruceitdocker restart bruceit

我相信你一看就懂。

自学能力很重要

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

Dockerfile,一个非常重要的文件

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

未完待续