天天看点

Docker下部署php mysql nginx

前几天在腾讯购买了域名和云主机,尝试在docker容器内部署php+mysql+nginx,参考了https://notemi.cn/docker-quickly-set-up-php-nginx-mysql-environment.html,经过一番折腾,总算是成功了。这里把详细的过程写下来,供今后参考。

系统环境:

CentOS Linux release 7.7.1908 (Core)

Docker 19.03.2

安装docker

1. 添加repo

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
           

2. 查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r
           

3.推荐安装docker的最新稳定版本

$ sudo yum install docker-ce
           

4.安装好后使用下面命令检查确认docker版本

$ docker --version
           
Docker下部署php mysql nginx

创建资源文件夹

Docker安装好之后,我们可以创建一些文件夹,映射一些配置文件或网站程序文件到宿主机。

/data
  /mysql  存放数据库备份
  /nginx  nginx配置文件
    /conf
    /rewrite 伪静态
  /wwwroot  网站文件
  /wwwlogs  日志
  /source  程序源代码
  /download 下载目录
           

部署Mysql

1. 拉取镜像

2 创建mysql容器,为了便于今后的管理和命令的重复使用,直接把命令放在sh脚本文件中

create_mysql.sh

echo "create mysql container"
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name m_mysql mysql:5.7
           

参数说明:

-d 容器后台运行

-p 添加主机到容器的端口映射,前面是映射到宿主机的本地端口,后面是容器内需要映射的端口

-e 设置环境变量, MYSQL_ROOT_PASSWORD这里设置了mysql的root用户初始密码

--name 容器的名字

之后需要进入容器执行mysql允许远程连接

3. 进入容器:

$ docker exec -it m_mysql /bin/bash
           

4. 开启Mysql远程连接

# 进入MySQL
$ MySQL -uroot -p123456
# 选择数据库
> use mysql
# 开启远程连接
> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
> FLUSH PRIVILEGES;
# 重启
$ service mysql restart
           

部署PHP

这里使用bitnami/php-fpm:7.1的镜像,比原生的php-fpm相比,默认安装了mysqli和pod扩展。

1. 拉取镜像

docker pull bitnami/php-fpm:7.1
           

2. 创建容器。下面给出创建php容器的脚本create_php_container.sh

echo "create php container"
docker run \
  -d \
  -p 9000:9000 \
  -v /data/wwwroot:/usr/share/nginx/html \
  --link m_mysql:mysql \
  --name m_phpfpm bitnami/php-fpm:7.1
           

参数说明: 

-d 让容器在后台运行

-p 添加主机到容器的端口映射

-v 添加目录映射

--name 容器的名字,随便取,但是必须唯一

--link link 是在两个contain之间建立一种父子关系,父container中的web,可以得到子container db上的信息。

通过link的方式创建容器,我们可以使用被Link容器的别名进行访问,而不是通过IP,解除了对IP的依赖。

部署NGINX

1.首先使用命令拉取镜像并运行容器

$ docker pull nginx:1.11.0
$ docker run -d -p 80:80 --name m_nginx nginx:1.11.0
           

2. 之后用docker cp命令复制配置文件到宿主机

# docker cp m_nginx:/etc/nginx/nginx.conf /data/nginx
# docker cp m_nginx:/etc/nginx/conf.d/default.conf /data/nginx/conf
           

3. 删除之前运行的nginx

$ docker stop m_nginx && docker rm m_nginx
           

4. 重新运行nginx容器,这一步跟以前一样,建议保存为create_nginx_container.sh脚本

docker run -d -p 80:80 --name m_nginx \
  -v /data/wwwroot:/usr/share/nginx/html \
  -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v /data/nginx/conf:/etc/nginx/conf.d \
  -v /data/wwwlogs:/var/log/nginx \
  --link m_phpfpm:phpfpm \
  nginx
           

5. 编辑配置文件

修改

/data/nginx/conf/default.conf

server {
    listen       80;
    server_name  _;

    #charset koi8-r;
    access_log  /var/log/nginx/default_nginx.log  main;

    location / {
        root   /usr/share/nginx/html/default;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /usr/share/nginx/html/default;
        fastcgi_pass   phpfpm:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
           

部署phpmyadmin

1. 拉取镜像

$ docker pull phpmyadmin/phpmyadmin
           

2. 创建容器

docker run -d -p 8080:80 \
  --name m_phpmyadmin \
  --link m_mysql:db \ 
  phpmyadmin/phpmyadmin
           

注意:这一步我们把宿主机的8080端口映射到容器的80端口上。

最后测试

浏览器里输入http://主机地址:8080,用户名和密码需要跟mysql一致。

Docker下部署php mysql nginx

OK,成功

Docker下部署php mysql nginx