这里下载 3 个镜像:
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、创建容器
由于前面已经下载好了镜像,这里会自动从本地镜像创建容器。
2、进入容器
通过分析,得到以下信息:
conf 目录:/etc/nginx/conf.d/
logs 目录:/var/log/nginx/
此时,这个容器可以销毁了。
3、停止容器
4、删除容器
5、创建相关的目录
root@RicenOS:~# mkdir -pv /opt/websites
6、创建 docker-compose.yml 文件
内容如下:
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:/opt/nginx# docker-compose -f docker-compose.yml up -d
二、部署 php-fpm
1、创建容器
由于前面已经下载好了镜像,这里会自动从本地镜像创建容器。
2、进入容器
通过分析,得到以下信息:
同时,注意到 php-fpm 运行的用户和用户组均为:www-data。
修改 /opt/websites 目录的权限:
此时,这个容器可以销毁了。
3、停止容器
4、删除容器
5、创建相关的目录
6、创建 docker-compose.yml 文件
内容如下:
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:/opt/php# docker-compose -f docker-compose.yml up -d
三、配置 nginx 支持 php
内容如下:
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:
创建测试页:
内容如下:
phpinfo();
运行效果:
四、部署 MySQL
不建议使用 docker 安装部署数据库,这里只是演示。
1、创建容器
由于前面已经下载好了镜像,这里会自动从本地镜像创建容器。其中的“p2021#DBA”是初始化密码,可以自行设定。
2、进入容器
通过分析,得到以下信息:
配置文件目录:/etc/mysql/conf.d/
此时,这个容器可以销毁了。
3、停止容器
4、删除容器
5、创建相关的目录
6、创建 .env 文件
内容如下:
MYSQL_ROOT_HOST=%
MYSQL_DIR=.
MYSQL_USER=root
MYSQL_PASS=p2021#DBA
7、创建 docker-compose.yml 文件
内容如下:
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 文件(非必须)
内容如下:
[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:/opt/mysql# docker-compose -f docker-compose.yml up -d
Copyright © 2005-2023 by www.ricensoftwares.com.cn All Rights Reserved.