docker搭建web环境

2018年08月24日 1758点热度 2人点赞 0条评论

[title]注意事项[/title]

  1. 本文所有操作均在Ubuntu系统中进行
  2. 本文仅使用于想要使用docker搭建web环境的新手。
  3. 本文搭建的web环境为nginx+php+mysql

[title]问题[/title]

  1. 什么是docker? -> 请看这里
  2. 为什么要用docker搭web? -> 有(xian)趣(de)

[title]安装docker[/title]

可以参考runoob的教程 -> 链接

#安装docker
wget -qO- https://get.docker.com/ | sh
#启动docker
sudo service docker start
镜像加速

新建文件:/etc/docker/daemon.json

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

使用docker search或在 https://hub.docker.com/ 可搜索镜像

[title]docker命令[/title]

本文用到的docker命令

docker search    #搜索服务器上镜像
docker pull    #拉取镜像
docker rm    #删除容器
docker rmi    #删除镜像
docker ps    #正在运行容器
docker inspect    #镜像/容器数据
docker run    #创建运行容器
docker start/stop/restart    #启动/停止/重启
docker exec     #容器执行命令

[title]1. 创建文件夹[/title]

server
├── mysql
│   ├── conf
│   │   └── my.cnf
│   ├── data
│   └── logs
└── web
    ├── conf
    │   ├── conf.d
    │   │   └── default.conf
    │   ├── nginx.conf
    │   └── php
    │   │   └── php.ini
    ├── logs
    └── site

创建文件 server/web/conf/nginx.conf

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

[title]2. 拉取镜像[/title]

#自行选择镜像版本
docker pull nginx:1.15
docker pull php:7.1-fpm
docker pull mysql:5.7

[title]3. 创建nginx容器[/title]

docker run \
-p 80:80 \  #端口映射 容器:主机
--name nginx \  #容器名称
--restart always \  #自动重启
-v /server/web/site:/usr/share/nginx/html \  #网站根目录
-v /server/web/conf/conf.d:/etc/nginx/conf.d \   #网站配置文件目录
-v /server/web/conf/nginx.conf:/etc/nginx/nginx.conf:ro \ #nginx.conf配置文件
-v /server/web/logs:/var/log/nginx \ #日志目录
-d \  #后台运行
nginx:1.15   #镜像
-v

docker run -v <主机路径:容器路径>

这是主机目录到容器目录挂载到容器的目录(nginx.conf为文件)

在修改配置文件时,应考虑的是容器内的路径而不是主机的路径

[title]4. 创建php7-fpm容器[/title]

docker run \
-p 9000:9000 \
--name  php7.1 \
--restart always \
-v /server/web/site:/www \
-v /server/web/conf/php:/usr/local/etc/php \
-v /server/web/logs:/phplogs \
-d \
php:7.1-fpm

[title]5. 创建mysql容器[/title]

docker run \
-p 3306:3306 \
--name mysql \
--restart always \
-v /server/mysql/conf:/etc/mysql/conf.d \
-v /server/mysql/logs:/logs \
-v /server/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql:5.7

[title]6. 修改网站配置[/title]

创建文件 server/web/conf/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;   # 注意这里是nginx容器内部的目录
        index  index.php index.html index.html;
        autoindex  on;
    }
    
    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name;  # 这个/www是php-fpm容器的
        include        fastcgi_params;
    }
}
# nginx容器的/usr/share/nginx/html和php-fpm容器的/www都被挂载到了主机的server/web/site
# 也就是nginx容器的/usr/share/nginx/html/a.php就是php-fpm容器的/www/a.php
# 搞清楚这个就不会写错了

php配置文件是 server/web/conf/php/php.ini

mysql配置文件是 server/mysql/conf/my.cnf

[title]7. 完成[/title]

server/web/site 目录下新建 index.php

<?php
    phpinfo();
?>

AIKAMINO

暂无