拉取相应的docker镜像
docker官方镜像地址:https://hub.docker.com
docker中文文档:http://www.dockerinfo.net/document
docker pull mysql:5.7.33;
docker pull php:7.2-fpm;
docker pull nginx:1.18.0;
docker pull centos:7.2.1511;
思路:利用数据卷容器来做数据持久化,mysql,php,nginx挂载数据卷容器。
前奏
在宿主机上创建共享数据目录
/dockerdatavolume
└───www
│
└───services
│ └───mysql-5.7
│ │ └───config
│ │ └───data
│ │ └───log
│ └───php-7.2
│ │ └───config
│ │ └───log
│ └───nginx-1.18.0
│ │ └───config
│ │ └───log
cd /
mkdir dockerdatavolume
cd dockerdatavolume/
mkdir www
mkdir services/mysql-5.7/config
mkdir services/mysql-5.7/data
mkdir services/mysql-5.7/log
mkdir services/php-7.2/config
mkdir services/php-7.2/log
mkdir services/nginx-1.18.0/config
mkdir services/nginx-1.18.0/log
一、创建一个nginx临时容器
- 将容器内 /etc/nginx/conf.d 文件夹复制到 /dockerdatavolume/services/nginx-1.18/config 目录下
- 将容器内 /etc/nginx/nginx.conf 文件复制到 /dockerdatavolume/services/nginx-1.18/config 目录下
二、创建一个php7.2-fpm临时容器
- 将容器内 /usr/local/etc 目录下的所有文件复制到 /dockerdatavolume/services/php-7.2/config 下
三、创建一个mysql5.7临时容器
- 将容器内 /etc/mysql 目录下的所有文件复制到 /dockerdatavolume/services/mysql5.7/config 下
1.生成数据卷容器
docker run -v /dockerdatavolume:/dockerdatavolume --name common_data_container centos:7.2.1511
2.创建mysql容器
docker run \
--volumes-from common_data_container \
-v /dockerdatavolume/services/mysql-5.7/config:/etc/mysql:ro \
-v /dockerdatavolume/services/mysql-5.7/data:/var/lib/mysql \
--name mysql5.7 \
-p 33066:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.33
注:为了在外部能使用root用户连接mysql,需要进入容器修改root用户的密码
#进入容器
docker exec -it mysql5.7 /bin/bash
#进入容器修改root用户的密码
mysql -u root -p 123456
#进入到mysql中
mysql>GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY '123456';
mysql>GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123456';
mysql>GRANT ALL PRIVILEGES ON *.* TO root@'127.0.0.1' IDENTIFIED BY '123456';
mysql>FLUSH PRIVILEGES;
#退出容器
mysql>exit
创建php容器
docker run \
--volumes-from common_data_container \
-v /dockerdatavolume/services/php-7.2/config:/usr/local/etc:ro \
--name php7.2-fpm \
--link mysql5.7:mysql \
-d php:7.2-fpm
注:由于镜像未安装mysqli扩展,需要进入容器安装插件
/*
* docker中php开启mysqli扩展
* 找到php.ini,一般在/usr/local/etc/php/php.ini中,通过copy复制到宿主机之后去掉php_mysql.so前面的分号后上传
* 进入容器扩展安装目录/usr/local/bin
* 执行命令安装扩展 docker-php-ext-install mysqli
* 重启容器 docker restart php7.2-fpm
*/
docker exec -it php7.2-fpm /bin/bash
cd /usr/local/bin
docker-php-ext-install mysqli
docker restart php7.2-fpm
创建nginx容器
docker run \
--volumes-from common_data_container \
-v /dockerdatavolume/services/nginx-1.18/config/conf.d:/etc/nginx/conf.d:ro \
-v /dockerdatavolume/services/nginx-1.18/config/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /dockerdatavolume/www:/usr/share/nginx/html \
--name nginx1.18 \
-p 8080:80 \
--link php7.2-fpm:php7.2 \
-d nginx:1.18.0
小贴士
docker run -v /dockerdatavolume/services/nginx-1.18/config/conf.d:/etc/nginx/conf.d:ro -d nginx:1.18.0
- 问题:-v /dockerdatavolume/services/nginx-1.18/config/conf.d:/etc/nginx/conf.d:ro 后面的 :ro 是什么意思?
解释:-v 操作在容器创建的过程时候可以将宿主机的目录挂载到容器内
- 在容器内部该目录下,或者宿主机内部该目录下,修改文件、创建文件,彼此都会同步修改
- 默认情况下,对于容器而言是读写的权限,可以使用 ro ,使容器只有读权限
- php7.2-fpm镜像内的目录情况:
php:7.2-fpm下:
#配置目录
/usr/local/etc/ pear.conf php php-fpm.conf php-fpm.conf.default php-fpm.d
/usr/local/etc/php-fpm.d/ docker.conf www.conf www.conf.default zz-docker.conf
/usr/local/etc/php/ conf.d php.ini-development php.ini-production
#www根目录
/var/www/html
- nginx-1.18.0镜像内的目录情况:
#配置目录
/etc/nginx/ conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
#域名配置目录
/etc/nginx/conf.d
#nginx.conf配置文件
/etc/nginx/nginx.conf
#www根目录
/usr/share/nginx/html
#日志文件,建议此处不用处理
/var/log/nginx/error.log
/var/log/nginx/access.log
- mysql5.7镜像内的目录情况:
#配置文件目录
/etc/mysql/ conf.d my.cnf my.cnf.fallback mysql.cnf mysql.conf.d
#数据表存放目录
/var/lib/mysql