当前位置:首页 > 系统运维
使用 docker 搭建 nginx、php、mysql 运行环境
来源:靑龍一笑的博客  作者:靑龍一笑  发布时间:2021-06-06 09:22:03  点击量:866  评论:0

    这里下载 3 个镜像:

root@RicenOS:~# docker pull nginx:1.20.1
root@RicenOS:~# docker pull php:7.4.20-fpm
root@RicenOS:~# docker pull mysql:5.6.51

    可以到 https://hub.docker.com/ 网站上去查找所需要的镜像版本。当然,也可以使用 docker search 命令查找所需要的版本。
    首先,需要知道各个镜像里面的一些相关信息。例如:配置文件、数据文件的存放位置等。

一、部署 nginx

1、创建容器

root@RicenOS:~# docker run -p 80:80 -d --name nginx --privileged=true nginx:1.20.1

    由于前面已经下载好了镜像,这里会自动从本地镜像创建容器。

2、进入容器

root@RicenOS:~# docker exec -it nginx /bin/bash

    通过分析,得到以下信息:

web 目录:/usr/share/nginx/html/
conf 目录:/etc/nginx/conf.d/
logs 目录:/var/log/nginx/

    此时,这个容器可以销毁了。

3、停止容器

root@RicenOS:~# docker stop nginx

4、删除容器

root@RicenOS:~# docker rm nginx

5、创建相关的目录

root@RicenOS:~# mkdir -pv /opt/nginx/{conf,logs}
root@RicenOS:~# mkdir -pv /opt/websites

6、创建 docker-compose.yml 文件

root@RicenOS:~# vi /opt/nginx/docker-compose.yml

    内容如下:

version: "3.0"
services:
    nginx:
        container_name: nginx
        image: nginx:1.20.1
        restart: always
        ports:
            - 80:80
            - 443:443
        volumes:
            - /opt/websites:/usr/share/nginx/html
            - /opt/nginx/conf:/etc/nginx/conf.d
            - /opt/nginx/logs:/var/log/nginx

7、创建并启动容器

root@RicenOS:~# cd /opt/nginx/
root@RicenOS:/opt/nginx# docker-compose -f docker-compose.yml up -d

二、部署 php-fpm

1、创建容器

root@RicenOS:~# docker run -p 9000:9000 -d --name php-fpm --privileged=true php:7.4.20-fpm

    由于前面已经下载好了镜像,这里会自动从本地镜像创建容器。

2、进入容器

root@RicenOS:~# docker exec -it php-fpm /bin/bash

    通过分析,得到以下信息:

web 目录:/var/www/html

    同时,注意到 php-fpm 运行的用户和用户组均为:www-data。
    修改 /opt/websites 目录的权限:

root@RicenOS:~# chown -R www-data:www-data /opt/websites

    此时,这个容器可以销毁了。

3、停止容器

root@RicenOS:~# docker stop php-fpm

4、删除容器

root@RicenOS:~# docker rm php-fpm

5、创建相关的目录

root@RicenOS:~# mkdir -pv /opt/php

6、创建 docker-compose.yml 文件

root@RicenOS:~# vi /opt/php/docker-compose.yml

    内容如下:

version: "3.0"
services:
    php-fpm:
        container_name: php-fpm
        image: php:7.4.20-fpm
        restart: always
        ports:
            - 9000:9000
        volumes:
            - /opt/websites:/var/www/html

7、创建并启动容器

root@RicenOS:~# cd /opt/php/
root@RicenOS:/opt/php# docker-compose -f docker-compose.yml up -d

三、配置 nginx 支持 php

root@RicenOS:~# vi /opt/nginx/conf/default.conf

    内容如下:

server {
        listen 80;
        server_name 127.0.0.1;
        access_log /var/log/nginx/127.0.0.1_access.log main;
        error_log /var/log/nginx/127.0.0.1_error.log error;

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

        location ~ \.php$ {
                fastcgi_pass    192.168.1.100:9000;
                fastcgi_index   index.php;
                fastcgi_param   SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
                include fastcgi_params;
        }
}

    虽然 nginx 和 php 都是部署在本机的 docker 里,但是,它们是在不同的容器中,因此,不能使用 127.0.0.1 来调用 php,这里使用的是 host 的 IP,即 192.168.1.100:9000。
    重启 nginx:

root@RicenOS:~# docker restart nginx

    创建测试页:

root@RicenOS:~# vi /opt/websites/index.php

    内容如下:

<?php
        phpinfo();

    运行效果:

四、部署 MySQL

    不建议使用 docker 安装部署数据库,这里只是演示。

1、创建容器

root@RicenOS:~# docker run -p 3306:3306 -d --name mysql -e MYSQL_ROOT_PASSWORD=p2021#DBA mysql:5.6.51

    由于前面已经下载好了镜像,这里会自动从本地镜像创建容器。其中的“p2021#DBA”是初始化密码,可以自行设定。

2、进入容器

root@RicenOS:~# docker exec -it mysql /bin/bash

    通过分析,得到以下信息:

数据目录:/var/lib/mysql
配置文件目录:/etc/mysql/conf.d/

    此时,这个容器可以销毁了。

3、停止容器

root@RicenOS:~# docker stop mysql

4、删除容器

root@RicenOS:~# docker rm mysql

5、创建相关的目录

root@RicenOS:~# mkdir -pv /opt/mysql/{data,conf}

6、创建 .env 文件

root@RicenOS:~# vi /opt/mysql/.env

    内容如下:

MYSQL_ROOT_PASSWORD=p2021#DBA
MYSQL_ROOT_HOST=%
MYSQL_DIR=.
MYSQL_USER=root
MYSQL_PASS=p2021#DBA

7、创建 docker-compose.yml 文件

root@RicenOS:~# vi /opt/mysql/docker-compose.yml

    内容如下:

version: "3.0"
services:
    mysql:
        container_name: mysql
        image: mysql:5.6.51
        restart: always
        ports:
            - 3306:3306
        environment:
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASS: ${MYSQL_PASS}
        command: --default-authentication-plugin=mysql_native_password
        volumes:
            - /opt/mysql/data:/var/lib/mysql
            - /opt/mysql/conf:/etc/mysql/conf.d

8、创建 my.cnf 文件(非必须)

root@RicenOS:~# vi /opt/mysql/conf/my.cnf

    内容如下:

[client]
port= 3306
socket= /var/lib/mysql/mysql.sock

[mysqld]
port= 3306
socket= /var/lib/mysql/mysql.sock
datadir = /var/lib/mysql

character_set_server = utf8
collation-server = utf8_general_ci
character-set-client-handshake = false
lower_case_table_names = 1

skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 8
query_cache_size = 8M
tmp_table_size = 16M

explicit_defaults_for_timestamp = true

max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log-bin=mysql-bin
binlog_format=mixed
server-id= 1
expire_logs_days = 10

default_storage_engine = InnoDB
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_buffer_pool_size = 16M

innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

9、创建并启动容器

root@RicenOS:~# cd /opt/mysql/
root@RicenOS:/opt/mysql# docker-compose -f docker-compose.yml up -d
版权所有 © 2005-2023 靑龍一笑的博客  Powered by C.S.Ricen
Copyright © 2005-2023 by www.ricensoftwares.com.cn  All Rights Reserved.

欢迎光临本站,这里是靑龍一笑的博客。

因资金匮乏,本站已迁到国外的免费空间,可能导致本站的访问速度较慢,由此给您带来的不便,敬请谅解。

您可以通过下方的“支持本站建设”链接,给本站提供资金支持。

Free Web Hosting