网站改版提交,技术支持 沧州网站建设,石家庄大型网站设计公司,做参茸产品的网站文章目录 1. 当前需求2. 前置准备3. 搭建过程3.1 创建自定义网络3.2 部署并配置nginx3.2.1 创建工作目录并上传相关软件包3.2.2 解压缩相关软件包3.2.3 编写Dockerfile文件3.2.4 编写nginx.conf文件3.2.5 创建nginx镜像3.2.6 运行容器 3.3 部署并配置mysql3.3.1 创建工作目录3.… 文章目录 1. 当前需求2. 前置准备3. 搭建过程3.1 创建自定义网络3.2 部署并配置nginx3.2.1 创建工作目录并上传相关软件包3.2.2 解压缩相关软件包3.2.3 编写Dockerfile文件3.2.4 编写nginx.conf文件3.2.5 创建nginx镜像3.2.6 运行容器 3.3 部署并配置mysql3.3.1 创建工作目录3.3.2 编写Dockerfie文件多阶段构建3.3.3 编写配置文件my.cnf3.3.4 创建镜像3.3.5 使用新的镜像运行容器并测试 3.4 部署并配置PHP3.4.1 创建工作目录并上传代码包3.4.2 编写相关配置文件3.4.3 编写Dockerfile文件3.4.4 创建php镜像3.4.5 运行容器 3.5 数据库授权3.6 运行Wordpress 1. 当前需求
需要使用Docker 技术在一台主机上创建LNMP服务并运行Wordpress网站平台。
然后对此服务进行相关的性能调优和管理工作
2. 前置准备
主机操作系统IP地址主要软件宿主机CentOS 7.3 x86_64192.168.67.100Docker 19.03Nginx容器172.18.0.10Mysql容器172.18.0.20PHP容器172.18.0.30
3. 搭建过程
3.1 创建自定义网络
#关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0#创建自定义网络
docker network create --subnet172.18.0.0/16 --opt com.docker.network.bridge.namedocker1 mynetwork3.2 部署并配置nginx
容器IP172.18.0.10
3.2.1 创建工作目录并上传相关软件包
mkdir /opt/nginx
cd /opt/nginx3.2.2 解压缩相关软件包
mkdir /opt/nginx/html
tar zxvf wordpress-4.9.4-zh_CN.tar.gz -C /opt/nginx/htmlrm -rf wordpress-4.9.4-zh_CN.tar.gz
#解压缩完成后删除安装包3.2.3 编写Dockerfile文件
vim DockerfileFROM centos:7 AS first
MAINTAINER this is nginx scj
ADD nginx-1.22.0.tar.gz /opt/
RUN yum -y install pcre-devel zlib-devel gcc gcc-c make \
useradd -M -s /sbin/nologin nginx \
cd /opt/nginx-1.22.0 \
./configure --prefix/usr/local/nginx --usernginx --groupnginx --with-http_stub_status_module \
make \
make install
ENV PATH /usr/local/nginx/sbin:$PATH
ADD nginx.conf /usr/local/nginx/conf/FROM centos:7
COPY --fromfirst /usr/local/nginx/ /usr/local/nginx/
RUN useradd -M -s /sbin/nologin nginxEXPOSE 80
EXPOSE 443CMD [/usr/local/nginx/sbin/nginx, -g, daemon off;]3.2.4 编写nginx.conf文件
vim nginx.conf#user nobody;
worker_processes auto;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {use epoll;worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format main $remote_addr - $remote_user [$time_local] $request # $status $body_bytes_sent $http_referer # $http_user_agent $http_x_forwarded_for;#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 80;server_name www.scj.com;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.php 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 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 html;fastcgi_pass 172.18.0.30:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;include fastcgi_params;}# deny access to .htaccess files, if Apaches document root# concurs with nginxs one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}3.2.5 创建nginx镜像
docker build -t nginx:lnmp .3.2.6 运行容器
#以nginx容器 在后台运行镜像
docker run -d --name nginx -p 80:80 -v /opt/nginx/html:/usr/local/nginx/html --net mynetwork --ip 172.18.0.10 nginx:lnmp- -d 表示以后台运行的方式启动容器。
- --name nginx 设置容器的名称为 nginx。
- -p 80:80 将主机的 80 端口映射到容器的 80 端口使得可以通过主机的 IP 地址访问 NGINX 服务器。
- -v /opt/nginx/html:/usr/local/nginx/html 将主机上的 /opt/nginx/html 目录与容器内的 /usr/local/nginx/html 目录进行挂载实现文件共享。
- --net mynetwork --ip 172.18.0.10 将容器连接到名为 mynetwork 的用户自定义网络并指定容器的 IP 地址为 172.18.0.10。
- nginx:lnmp 指定了要使用的 NGINX 服务器镜像和标签。3.3 部署并配置mysql
容器IP 为 172.168.0.20
多阶段构造
3.3.1 创建工作目录
mkdir /opt/mysqld
cd /opt/mysqld上传 mysql-boost-5.7.20.tar.gz 到 /opt/mysqld 目录中3.3.2 编写Dockerfie文件多阶段构建
vim Dockerfile# 第一阶段 - 构建阶段
FROM centos:7 AS builder
MAINTAINER this is mysql image scj
RUN yum -y install gcc gcc-c ncurses ncurses-devel bison cmake make
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
RUN cmake \
-DCMAKE_INSTALL_PREFIX/usr/local/mysql \
-DMYSQL_UNIX_ADDR/usr/local/mysql/mysql.sock \
-DSYSCONFDIR/etc \
-DSYSTEMD_PID_DIR/usr/local/mysql \
-DDEFAULT_CHARSETutf8 \
-DDEFAULT_COLLATIONutf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE1 \
-DWITH_ARCHIVE_STORAGE_ENGINE1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE1 \
-DMYSQL_DATADIR/usr/local/mysql/data \
-DWITH_BOOSTboost \
-DWITH_SYSTEMD1 make -j4 make install# 第二阶段 - 配置阶段
FROM centos:7 AS config
COPY --frombuilder /usr/local/mysql /usr/local/mysql
COPY my.cnf /etc/
ENV PATH/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
RUN useradd -M -s /sbin/nologin mysql \
chown mysql:mysql /etc/my.cnf \
chown -R mysql:mysql /usr/local/mysql/ \
/usr/local/mysql/bin/mysqld \
--initialize-insecure \
--usermysql \
--basedir/usr/local/mysql \
--datadir/usr/local/mysql/data
EXPOSE 3306
CMD [/usr/local/mysql/bin/mysqld]3.3.3 编写配置文件my.cnf
vim my.cnf[client]
port 3306
socket /usr/local/mysql/mysql.sock[mysql]
port 3306
socket /usr/local/mysql/mysql.sock[mysqld]
user mysql
basedir /usr/local/mysql
datadir /usr/local/mysql/data
port 3306
character_set_serverutf8
pid-file /usr/local/mysql/mysqld.pid
socket /usr/local/mysql/mysql.sock
server-id 1sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
3.3.4 创建镜像
docker build -t mysql:lnmp .
#名称:标签3.3.5 使用新的镜像运行容器并测试
docker run --namemysql -d --privileged -v /usr/local/mysql --net mynetwork --ip 172.18.0.20 mysql:lnmp- --namemysql指定容器的名称为mysql。
- -d以后台模式运行容器。
- --privileged在容器内部启用特权模式可以执行一些底层操作。
- -v /usr/local/mysql将宿主机的/usr/local/mysql目录挂载到容器的相应位置。
- --net mynetwork将容器连接到名为mynetwork的网络。3.4 部署并配置PHP
容器IP172.168.0.30
3.4.1 创建工作目录并上传代码包
mkdir /opt/php
cd /opt/php上传 php-7.1.10.tar.bz2 到 /opt/php 目录中3.4.2 编写相关配置文件
php-fpm.conf
www.conf
php.ini 3.4.3 编写Dockerfile文件
vim DockerfileFROM centos:7 AS first
MAINTAINER this is php image byyb 20231021
ADD php-7.1.10.tar.bz2 /opt/
RUN yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel \
gcc gcc-c make pcre-devel \
cd /opt/php-7.1.10/ \
./configure \
--prefix/usr/local/php \
--with-mysql-sock/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip make -j 2 make install \
cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini \
sed -i -e 939c date.timezone Asia/Shanghai -e 1170c mysqli.default_socket /usr/local/mysql/mysql.sock /usr/local/php/lib/php.ini \
cd /usr/local/php/etc/ \
cp php-fpm.conf.default php-fpm.conf \
sed -i 17 s/^;// php-fpm.conf \
cd /usr/local/php/etc/php-fpm.d/ \
cp www.conf.default www.conf \
sed -i -e 23c user nginx -e 24c group nginx -e 36c listen 172.18.0.30:9000 -e 62c listen.allowed_clients 172.18.0.10 www.confFROM centos:7
COPY --fromfirst /usr/local/php/ /usr/local/php/
RUN yum -y install gd \
libjpeg-devel \
libpng-devel \
freetype-devel \
libxml2-devel \
zlib-devel \
curl-devel \
openssl-devel \
useradd -M -s /sbin/nologin nginx \
rm -rf /var/cache/yum/*
EXPOSE 9000
CMD [/usr/local/php/sbin/php-fpm, -F]3.4.4 创建php镜像
docker build -t php:lnmp .3.4.5 运行容器
docker run --namephp -d -p 9000:9000 --volumes-from mysql --volumes-from nginx --net mynetwork --ip 172.18.0.30 php:lnmp3.5 数据库授权
docker exec -it mysql /bin/bashmysql
#登录数据库create database wordpress;grant all privileges on wordpress.* to wordpress% identified by 123456;
grant all privileges on *.* to root% identified by abc123;
flush privileges;3.6 运行Wordpress
浏览器访问
http://192.168.67.100/wordpress/index.php