本文共 2829 字,大约阅读时间需要 9 分钟。
一、准备镜像
安装完docker后,更换完镜像源(docker的安装十分简单自行百度即可)打开/etc/docker目录下的daemon.json添加以下内容{
"registry-mirrors": ["https://自己的地址.mirror.aliyuncs.com"]}
docker工作的基础即是镜像,可以认为镜像是一个独立的由应用组成的虚拟机
重启docker服务service docker restart
docker pull nginx:alpine
docker pull php:7-fpm-alpinedocker pull postgres:alpine
可以用docker image ls 随时查看已下载的镜像
二、启动nginx
启动容器sudo docker run --rm -d -p 80:80 --name nginx nginx:alpine
此时在浏览器地址栏中输入你虚拟机的ip就可以看到nginx的默认欢迎界面了
docker stop 后面跟上容器的名字或者id就可以停止容器
例如我的这个容器名字叫做nginx那么输入命令docker stop nginx
就可以停止它
三、启动 LNMP
由于 LNMP 共由3个容器组成,单个启动过于麻烦,推荐使用 docker-compose 管理并启动它们。
安装 docker-compose
docker-compose 是 docker 的多个服务部署工具,以方便地同时启动多个容器。可以使用以下命令方便地安装它sudo apt-get install -y python-pip && sudo pip install docker-compose
编辑 docker-compose 的配置文件
对于每一个你希望使用 docker-compose 来启动的项目,都应该在该项目的目录下配置 docker-compose.yml 。编辑 docker-compose.yml,version: "3"
services:Nginx:image: nginx:alpineports:
- 80:80volumes:
- ./web:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:roPHP:image: undefined01/php:7-fpm-alpinevolumes:
- ./web:/var/www/html:rwDatabase:image: postgres:alpineenvironment:POSTGRES_USER: "postgres"POSTGRES_PASSWORD: "rootroot"volumes:
- ./data:/var/lib/postgresql/data:rw
编辑 nginx 的配置文件
为了让 nginx 能够将请求顺利的转交给 php 处理,我们需要更改 nginx 的配置文件编辑 nginx.confserver {
listen 80;server_name localhost;location / { root /usr/share/nginx/html;index index.php index.html index.htm;}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 /var/www/html/$fastcgi_script_name;include fastcgi_params;}}
使用 docker-compose 启动服务
sudo docker-compose up -d
测试 LNMP 环境
对了,以上命令都使用了root权限,因此如果想要修改其中的内容可能不太方便。可以使用以下命令来获取编辑权限。sudo chmod -R 777 ./data ./web
测试 php
编辑 web/index.php<?php
phpinfo();?>
如果一切顺利的话,就可以在http://193.112.46.97/index.php看到php的相关信息了。
测试 PostgreSQL还记得密码吗?我提到过,就在 docker-compose 中配置了。因此在实际环境中一定要注意该文件的访问权限。至于 PostgreSQL 数据库的地址嘛,我也提到过,就是这个容器的名称(此处是 Database )。可以把它想象为一个域名就好了。编辑 web/test.php?php
$dbconn = pg_connect('host=Database user=postgres password=rootroot')or die('Could not connect: ' . pg_last_error());pg_query('CREATE TABLE IF NOT EXISTS test ( tester INT )');pg_query('INSERT INTO test VALUES (0)');$res = pg_query('SELECT * FROM test') or die('Query failed: ' . pg_last_error());$num = pg_num_rows($res);echo "You have visited this site $num times";pg_free_result($res);pg_close($dbconn);?>
如果一切顺利的话,就可以在http://193.112.46.97/test.php看到一个网页计数器。不断刷新它试试看。
利用docker搭建 LNMP 环境是不是so easy呢!!用 docker-compose 停止服务
可以使用以下命令来停止服务,它会自动销毁相应的容器:sudo docker-compose down
什么?销毁?别担心,你的数据库已经保存在当前目录下的data文件夹中了,迁移到任何一台新的主机,只需要将该目录打包带走就行了!
不信?可以重新启动上面的示例,看看数据库是否被保存了下来。……我不是天生强大,我只是天生要强!!!转载于:https://blog.51cto.com/13670314/2165624