环境
menghuiguli@dreamfly:~$ docker version
Client: Docker Engine - Community
Version: 19.03.9
API version: 1.40
Go version: go1.13.10
Git commit: 9d988398e7
Built: Fri May 15 00:25:18 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.9
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 9d988398e7
Built: Fri May 15 00:23:50 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec368
Codename: bionic
安装php-fpm容器
docker pull bitnami/php-fpm
docker run --name php7-fpm -v ~/nginx/www:/www -d bitnami/php-fpm
-d 后台运行
-v 目录映射 主机的~/nginx/www目录映射到容器的www目录
–name 给容器一个名字
安装nginx容器
docker pull nginx
docker run -p 80:80 --name nginx -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/conf.d:/etc/nginx/conf.d --link php7-fpm:php -d nginx
-p将容器80端口映射到服务器的80端口
配置nginx文件
将配置文件放到服务器的~/nginx/conf/conf.d/ 文件夹中,文件内容如下:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
}
fastcgi_pass 这里的php对应的是之前的php7-fpm进程,端口9000是php7-fpm默认进程.
重启nginx容器
docker restart nginx
配置swoole扩展
1.首先进入容器的shell环境
docker exec -it php7-fpm /bin/bash
2.更新源
apt update
3.安装需要的编译环境和文本编辑器
apt install -y gcc g++ autoconf libtool make vim
4.使用pecl安装swoole扩展
pecl install swoole
5.配置php.ini文件
cd /opt/bitnami/php/bin/php
vim php.ini
添加swoole扩展,就是添加
extension=swoole
6.退出
exit
7.重启php7-fpm容器
docker restart php7-fpm
注意事项
由于swoole提供了http服务器,所以我们可以不使用php-fpm,我们可以直接使用php来运行我们的文件index.php文件如下:
<?php
error_reporting(E_ALL);
$http = new Swoole\Http\Server("0.0.0.0", 9999);
$http->on('request', function ($request,Swoole\Http\Response $response) {
$response->end("<h1>hello</h1>");
});
$http->start();
需要提到的一点,我们都是通过映射来进行和容器的文件交互的。
当我们对php安装了扩展之后,我们可以把我们的容器进行打包成镜像,这样下次运行的时候,就需要重复安装扩展,这也是容器的一个优点。
docker commit php7-fpm swoole
启动容器的方法
docker run --name swoole -it -p 8888:8888 -v /www:/app -d swoole php index.php
运行上面的语句之前,我们本地服务器需要在/www目录下面存在index.php,就是上面我们提到的那个index.php文件,如果不存在,容器就会启动失败。
查看容器的id,然后可以查询到容器的logs
docker ps -a
docker logs id[xxxxxxxxxxxxxxxxx]
而且我们可以进入容器的shell中查看/app目录中是否有同步的index.php
docker exec -it swoole /bin/bash
cd /app
ls
总结
我们的数据最后都是会放入到容器中执行的,那么如何和容器打交道或者通信是我们需要研究的
其中-v这个是一个同步的方法,还有一个就是通过scp 把文件存入到容器中,不管那种方法,最后容器执行的时候,数据都是在容器中运行的,而不是在本地运行的,这也是容器的好处,就是保证了隔离性。
Comments are closed.