目录
一、构建Nginx
创建目录并进入目录
bash
复制
mkdir /opt/nginx
cd /opt/nginx
mkdir /opt/nginx:在 /opt 目录下创建一个名为 nginx 的目录。
cd /opt/nginx:进入 /opt/nginx 目录。
编写Dockerfile
dockerfile
复制
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum clean all
RUN yum -y install net-tools pcre-devel zlib-devel zlib gcc* make
ADD nginx-1.19.5.tar.gz /root
WORKDIR /root/nginx-1.19.5
RUN ./configure --prefix=/usr/local/nginx && make && make install
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
EXPOSE 80
EXPOSE 443
WORKDIR /root/nginx
ADD run.sh /run.sh
RUN chmod 775 /run.sh
CMD ["/run.sh"]
FROM centos:7:基于 centos:7 镜像构建。
RUN rm -rf /etc/yum.repos.d/*:删除 /etc/yum.repos.d/ 目录下的所有文件。
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo:从阿里云下载 CentOS 7 的 yum 源配置文件。
RUN yum clean all:清理 yum 缓存。
RUN yum -y install net-tools pcre-devel zlib-devel zlib gcc* make:安装编译 Nginx 所需的依赖包。
ADD nginx-1.19.5.tar.gz /root:将本地的 nginx-1.19.5.tar.gz 文件添加到容器的 /root 目录并解压。
WORKDIR /root/nginx-1.19.5:设置工作目录为 /root/nginx-1.19.5。
RUN ./configure --prefix=/usr/local/nginx && make && make install:编译并安装 Nginx。
ADD nginx.conf /usr/local/nginx/conf/nginx.conf:将本地的 nginx.conf 配置文件添加到容器的 /usr/local/nginx/conf/ 目录。
EXPOSE 80 和 EXPOSE 443:暴露容器的 80 和 443 端口。
ADD run.sh /run.sh:将本地的 run.sh 脚本添加到容器的根目录。
RUN chmod 775 /run.sh:赋予 run.sh 脚本执行权限。
CMD ["/run.sh"]:设置容器启动时执行的命令为 /run.sh。
编写run.sh脚本
bash
复制
#!/bin/bash
/usr/local/nginx/sbin/nginx
#!/bin/bash:指定脚本使用 Bash 解释器。
/usr/local/nginx/sbin/nginx:启动 Nginx。
生成镜像
bash
复制
docker build -t mynginx .
docker build -t mynginx .:根据当前目录下的 Dockerfile 构建一个名为 mynginx 的镜像。
二、构建PHP
创建目录并进入目录
bash
复制
mkdir /opt/php
cd /opt/php
mkdir /opt/php:在 /opt 目录下创建一个名为 php 的目录。
cd /opt/php:进入 /opt/php 目录。
编写Dockerfile
dockerfile
复制
FROM centos:7
MAINTAINER jacker
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
RUN yum clean all
RUN yum install -y wget net-tools php php-fpm php-common php-devel php-mysql
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/php-fpm.d/www.conf
RUN sed -i 's/listen.allowed_clients/;listen.allowed_clients/g' /etc/php-fpm.d/www.conf
RUN sed -i 's/;default_charset/default_charset/g' /etc/php.ini
EXPOSE 9000
CMD ["php-fpm"]
FROM centos:7:基于 centos:7 镜像构建。
MAINTAINER jacker:设置镜像的作者信息。
RUN rm -rf /etc/yum.repos.d/*:删除 /etc/yum.repos.d/ 目录下的所有文件。
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo:从阿里云下载 CentOS 7 的 yum 源配置文件。
RUN curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo:从阿里云下载 EPEL 的 yum 源配置文件。
RUN yum clean all:清理 yum 缓存。
RUN yum install -y wget net-tools php php-fpm php-common php-devel php-mysql:安装 PHP 及其相关扩展。
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/php-fpm.d/www.conf:将 PHP-FPM 配置文件中的监听地址从 127.0.0.1 改为 0.0.0.0,允许外部访问。
RUN sed -i 's/listen.allowed_clients/;listen.allowed_clients/g' /etc/php-fpm.d/www.conf:注释掉 listen.allowed_clients 配置项,允许所有客户端连接。
RUN sed -i 's/;default_charset/default_charset/g' /etc/php.ini:启用 PHP 的默认字符集配置。
EXPOSE 9000:暴露容器的 9000 端口。
CMD ["php-fpm"]:设置容器启动时执行的命令为 php-fpm。
生成镜像
bash
复制
docker build -t myphp .
docker build -t myphp .:根据当前目录下的 Dockerfile 构建一个名为 myphp 的镜像。
三、构建MySQL
创建目录并进入目录
bash
复制
mkdir /opt/mysql
cd /opt/mysql
mkdir /opt/mysql:在 /opt 目录下创建一个名为 mysql 的目录。
cd /opt/mysql:进入 /opt/mysql 目录。
编写Dockerfile
dockerfile
复制
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum clean all
RUN yum -y install mariadb mariadb-server
RUN chown -R mysql:mysql /var/lib/mysql
ADD /
RUN chmod 775 /
RUN /
EXPOSE 3306
CMD ["mysqld_safe"]
FROM centos:7:基于 centos:7 镜像构建。
RUN rm -rf /etc/yum.repos.d/*:删除 /etc/yum.repos.d/ 目录下的所有文件。
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo:从阿里云下载 CentOS 7 的 yum 源配置文件。
RUN yum clean all:清理 yum 缓存。
RUN yum -y install mariadb mariadb-server:安装 MariaDB(MySQL 的一个分支)。
RUN chown -R mysql:mysql /var/lib/mysql:将 /var/lib/mysql 目录的所有权更改为 mysql 用户和组。
ADD /:将本地的 脚本添加到容器的根目录。
RUN chmod 775 /:赋予 脚本执行权限。
RUN /:执行 脚本。
EXPOSE 3306:暴露容器的 3306 端口。
CMD ["mysqld_safe"]:设置容器启动时执行的命令为 mysqld_safe。
编写脚本
bash
复制
#!/bin/bash
mysql_install_db --user=mysql
sleep 3
mysqld_safe &
sleep 3
mysqladmin -u "root" password "123456"
mysql -uroot -p123456 -e "grant all privileges on *.* to 'root'@'%' identified by '123456';"
mysql -uroot -p123456 -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456';"
mysql -uroot -p123456 -e "flush privileges;"
mysql_install_db --user=mysql:初始化 MySQL 数据库。
sleep 3:等待 3 秒。
mysqld_safe &:启动 MySQL 服务。
mysqladmin -u "root" password "123456":设置 MySQL 的 root 用户密码为 123456。
mysql -uroot -p123456 -e "grant all privileges on *.* to 'root'@'%' identified by '123456';":授予 root 用户从任何主机访问数据库的权限。
mysql -uroot -p123456 -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456';":授予 root 用户从本地访问数据库的权限。
mysql -uroot -p123456 -e "flush privileges;":刷新权限。
生成镜像
bash
复制
docker build -t mymysql .
docker build -t mymysql .:根据当前目录下的 Dockerfile 构建一个名为 mymysql 的镜像。
四、启动容器
创建Docker网络
bash
复制
docker network create my_net
docker network create my_net:创建一个名为 my_net 的 Docker 网络。
启动PHP容器
bash
复制
docker run -id --net=my_net -v /web:/web --name php01 myphp
docker run -id --net=my_net -v /web:/web --name php01 myphp:启动一个名为 php01 的容器,使用 my_net 网络,并将本地的 /web 目录挂载到容器的 /web 目录。
启动Nginx容器
bash
复制
docker run -id --net=my_net
-v /web:/web
-v /opt/nginx/nginx.conf:/usr/local/nginx/conf/nginx.conf
-p 80:80 \
--name nginx01 mynginx
docker run -id --net=my_net -v /web:/web -v /opt/nginx/nginx.conf:/usr/local/nginx/conf/nginx.conf -p 80:80 --name nginx01 mynginx:启动一个名为 nginx01 的容器,使用 my_net 网络,挂载本地目录和配置文件,并将容器的 80 端口映射到主机的 80 端口。
启动MySQL容器
bash
复制
docker run -p 3306:3306 --name mysql01 -v /opt/mysql/my.cnf:/etc/my.cnf --net=my_net -d mymysql
docker run -p 3306:3306 --name mysql01 -v /opt/mysql/my.cnf:/etc/my.cnf --net=my_net -d mymysql:启动一个名为 mysql01 的容器,使用 my_net 网络,挂载本地配置文件,并将容器的 3306 端口映射到主机的 3306 端口。
五、测试
创建测试PHP文件
bash
复制
cd /web
vim aaa.php
cd /web:进入 /web 目录。
vim aaa.php:创建并编辑 aaa.php 文件,内容为 ,用于显示 PHP 信息。
创建测试数据库连接文件
bash
复制
cat bbb.php
cat bbb.php:查看 bbb.php 文件内容,内容为 ,用于测试 MySQL 连接。
六、部署网站
解压WordPress并复制到/web目录
bash
复制
tar zxvf wordpress-4.9.1-zh_CN.tar.gz
cp -rf wordpress/* /web/
chmod -R 777 /web/
tar zxvf wordpress-4.9.1-zh_CN.tar.gz:解压 WordPress 压缩包。
cp -rf wordpress/* /web/:将解压后的文件复制到 /web 目录。
chmod -R 777 /web/:赋予 /web 目录及其子文件所有权限。
进入MySQL容器并创建数据库
bash
复制
docker exec -it mysql01 /bin/bash
mysql -uroot -p123456
MariaDB [(none)]> create database wordpress;
docker exec -it mysql01 /bin/bash:进入 mysql01 容器的 Bash 终端。
mysql -uroot -p123456:使用 root 用户登录 MySQL。
MariaDB [(none)]> create database wordpress;:创建一个名为 wordpress 的数据库