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安装好之后,我们可以创建一些文件夹,映射一些配置文件或网站程序文件到宿主机。

/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一致。

OK,成功

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值