五一 大项目

news2024/11/19 16:30:22

Docker 中的 Nginx 服务为什么要启用 HTTPS

一安装容器

1 安装docker-20.10.17

 2 安装所需的依赖 

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3 添加Docker官方仓库

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 4 安装Docker CE 20.10.17

sudo yum install docker-ce-20.10.17 docker-ce-cli-20.10.17 containerd.io

 5 启动并开机自启Docker服务 

6 验证安装

systemctl enable --now docker
#
docker --version
#

 如何获取证书

  • 在阿里云、华为云、腾讯云等云服务商那里申请一年有效期的免费证书或者购买证书

  • 在本地使用 openssl、mkcert、cfssl、certbot(Let's Encrypt)的工具生成本地私钥证书

通过阿里云获取证书

www.aliyun.com

方法二 生成ca证书:

(1)创建ca私钥 


[root@localhost ~]# mkdir -p /lnmp/nginx/cert
[root@localhost ~]# cd /lnmp/nginx/cert
[root@localhost cert]# openssl genrsa -aes256 -out ca-key.pem 4096
Generating RSA private key, 4096 bit long modulus
...............................++
.......................................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:                #12345
Verifying - Enter pass phrase for ca-key.pem:    #12345



# openssl: OpenSSL 是一个开放源代码的加密工具包,提供了一系列加密算法和工具,用于安全通信、数据加密等操作。
# genrsa: 这个命令告诉 OpenSSL 生成一个 RSA 密钥对,包括公钥和私钥。
# -aes256: 这个选项指定生成的私钥要使用 AES 256 位加密算法进行加密。这样生成的私钥文件会被加密存储,需要输入密码才能解密使用。
# -out ca-key.pem: 这个选项指定生成的私钥保存到名为 ca-key.pem 的文件中。
# 4096: 这个参数指定生成的 RSA 密钥长度为 4096 位,这是一个比较安全的密钥长度。
使用 OpenSSL 生成一个带有 AES 256 位加密的 4096 位 RSA 私钥,并将其保存到名为 ca-key.pem 的文件中。生成的私钥文件将会被加密存储,需要输入密码才能解密和使用。


2)创建ca证书
[root@localhost cert]# openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem
Enter pass phrase for ca-key.pem:   # 输入12345



# openssl req: 这个命令告诉 OpenSSL 工具执行证书请求操作。
# -new: 这个选项表示生成一个新的证书请求。
# -x509: 这个选项指示生成自签名的 X.509 格式证书,而不是生成证书请求。
# -days 1000: 这个选项指定证书的有效期为 1000 天,即证书在签发后的有效期限。
# -key ca-key.pem: 这个选项指定使用之前生成的 ca-key.pem 文件中的私钥来签署证书。
# -sha256: 这个选项指定使用 SHA-256 算法来生成证书的摘要。
# -subj "/CN=*": 这个选项指定了证书的主题字段,其中 /CN=* 表示通用名称(Common Name)为通配符 *,表示这是一个通用的证书,而不是针对特定域名的。
# -out ca.pem: 这个选项指定生成的证书将保存到名为 ca.pem 的文件中。
使用 OpenSSL 工具生成一个自签名的 X.509 格式的数字证书,该证书的有效期为 1000 天,使用之前生成的私钥文件 ca-key.pem 进行签名,主题字段为通配符 *,并将生成的证书保存到名为 ca.pem 的文件中。

三 用 ca 证书签发 server 端证书

[root@localhost cert]# openssl genrsa -out server-key.pem 4096
Generating RSA private key, 4096 bit long modulus
.....................................................................................++
............................++
e is 65537 (0x10001)
[root@localhost cert]# 


e is 65537 (0x10001)
# openssl genrsa: 这个命令告诉 OpenSSL 工具生成一个 RSA 私钥。
# -out server-key.pem: 这个选项指定生成的私钥将保存到名为 server-key.pem 的文件中。
# 4096: 这个参数指定生成的 RSA 私钥的位数为 4096 位,这是一种常见的安全密钥长度,提供了较高的安全性。
使用 OpenSSL 工具生成一个 4096 位的 RSA 私钥,并将生成的私钥保存到名为 server-key.pem 的文件中。生成的私钥文件通常用于安全通信中,例如用于 HTTPS 连接中的服务器端认证。



(4)生成证书签名请求文件(csr文件)

[root@localhost cert]# openssl req -new -key server-key.pem -sha256 -subj "/CN=*" -out server.csr
[root@localhost cert]# 



# openssl req: 这个命令告诉 OpenSSL 工具执行证书请求操作。
# -new: 这个选项指示 OpenSSL 创建一个新的 CSR。
# -key server-key.pem: 这个选项指定要用于生成 CSR 的私钥文件,这里是 server-key.pem。
# -sha256: 这个选项指定要使用 SHA-256 算法进行摘要计算。
# -subj "/CN=*": 这个选项指定了 CSR 的主题信息,其中 /CN=* 表示 Common Name (通用名称)字段为通配符 *,通常用于生成通配符证书。
# -out server.csr: 这个选项指定生成的 CSR 将保存到名为 server.csr 的文件中。
使用 OpenSSL 工具基于指定的私钥文件 server-key.pem 创建一个新的 CSR,其中的 Common Name 字段为通配符 *,并使用 SHA-256 算法进行摘要计算,最后将生成的 CSR 保存到名为 server.csr 的文件中。CSR 通常用于向证书颁发机构(CA)申请数字证书。

(5)使用ca 证书与私钥证书签发服务端签名证书,输入 12345,(需要签名请求文件,ca 证书,ca 密钥)



[root@localhost cert]# 
[root@localhost cert]# openssl x509 -req -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -days 1000 -out server-cert.pem
Signature ok
subject=/CN=*
Getting CA Private Key
Enter pass phrase for ca-key.pem:


Enter pass phrase for ca-key.pem:
unable to load CA Private Key
140017779292064:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:592:
140017779292064:error:0906A065:PEM routines:PEM_do_header:bad decrypt:pem_lib.c:488:
[root@localhost cert]# ls
ca-key.pem  ca.pem  server-cert.pem  server.csr  server-key.pem
[root@localhost cert]# 
# openssl x509: 这个命令告诉 OpenSSL 工具执行证书相关的操作。
# -req: 这个选项表示输入的文件是一个证书请求 (CSR)。
# -sha256: 这个选项指定使用 SHA-256 算法进行摘要计算。
# -in server.csr: 这个选项指定要签署的证书请求文件为 server.csr。
# -CA ca.pem: 这个选项指定要用来签署证书的 CA (Certificate Authority) 的证书文件为 ca.pem。
# -CAkey ca-key.pem: 这个选项指定用于签署证书的 CA 的私钥文件为 ca-key.pem。
# -CAcreateserial: 这个选项告诉 OpenSSL 生成一个序列号文件,用于跟踪已签署证书的序列号。
# -days 1000: 这个选项指定生成的证书有效期为 1000 天。
# -out server-cert.pem: 这个选项指定生成的证书将保存到名为 server-cert.pem 的文件中。

在执行过程中的输出含义如下:
# Signature ok: 表示签名验证成功,证书签名操作正常。
# subject=/CN=*: 表示证书的主题信息为 Common Name (CN) 字段为通配符 *。
# Getting CA Private Key: 表示正在获取 CA 的私钥用于签署证书。
# Enter pass phrase for ca-key.pem: 提示输入 ca-key.pem 文件的密码短语,以便获取 CA 的私钥进行签署操作。
使用指定的 CA 证书和私钥对给定的证书请求进行签署,生成一个新的证书,并将该证书保存到名为 server-cert.pem 的文件中。

二 docker部署nginx并且实现https

1 准备证书

脚本内容 

[root@localhost opt]# vim certificate.sh 


CA_SUBJECT="/O=kgc/CN=ca.kgc.com"
SUBJECT="/C=CN/ST=js/L=nj/O=kgc/CN=www.kgc.com"
SERIAL=34
EXPIRE=202002
FILE=kgc.com

openssl req  -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 202002 -out ca.crt

openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key  -subj $SUBJECT -out ${FILE}.csr

openssl x509 -req -in ${FILE}.csr  -CA ca.crt -CAkey ca.key -set_serial $SERIAL  -days $EXPIRE -out ${FILE}.crt

chmod 600 ${FILE}.key ca.key
bash certificate.sh 
 
#执行该脚本后执行后会生成ca.crt  ca.key  certificate.sh  kgc.com.crt  kgc.com.csr  kgc.com.key 这几个文件,需要对其进行处理   
#  kgc.com.crt(购买者)   ca.crt(b颁发者)   www.kgc.com.key(验证钥匙)

2 导入文本 

cat kgc.com.crt ca.crt > www.kgc.com.crt

mv kgc.com.key www.kgc.com.key

3 在/mnt下创建一个cert的文件夹,用于存放证书文件

#在/mnt下创建一个cert的文件夹,用于存放证书文件
[root@localhost opt]#hostnamectl set-hostname mcb
[root@localhost opt]#su
[root@zzz opt]#mkdir /mnt/cert
[root@zzz opt]#mv /opt/www.kgc.com.crt /opt/www.kgc.com.key /mnt/cert
[root@zzz opt]#
[root@zzz opt]#ll /mnt/cert
[root@localhost opt]# ll
总用量 20
-rw-r--r--. 1 root root 1139 5月   5 16:30 ca.crt
-rw-------. 1 root root 1704 5月   5 16:30 ca.key
-rw-r--r--. 1 root root  463 5月   5 16:30 certificate.sh
-rw-r--r--. 1 root root 1062 5月   5 16:30 kgc.com.crt
-rw-r--r--. 1 root root  964 5月   5 16:30 kgc.com.csr
drwxr-xr-x. 2 root root    6 3月  26 2015 rh
[root@localhost opt]# ll /mnt/cert
总用量 8
-rw-r--r--. 1 root root 2201 5月   5 16:36 www.kgc.com.crt
-rw-------. 1 root root 1704 5月   5 16:30 www.kgc.com.key

4 准备nginx.conf 和 index.html文件

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
 
 
events {
    worker_connections 1024;
}
 
http {
    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  /var/log/nginx/access.log  main;
 
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;
 
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
 
 
    server {
        listen       80;
        listen 443 ssl;   
        ssl_certificate /mnt/www.kgc.com.crt;
        ssl_certificate_key /mnt/www.kgc.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
        server_name www.kgc.com;
        root     /usr/share/nginx/html;
 
 
        error_page 404 /404.html;
        location = /404.html {
        }
 
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
}

5 生成镜像

docker run -itd -p 8080:80 -p 3721:443 -v /mnt/nginx.conf:/etc/nginx/nginx.conf -v /mnt/index.html:/usr/share/nginx/html/index.html -v /mnt/cert/:/mnt/ --name nginx nginx:latest

6 浏览器验证结果

案例:

案例:

三 使用docker-compose编排Lnmp(dockerfile) 完成Wordpress

前言:Docker-Compose介绍

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件

等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服

务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-Compose

并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE

或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关

联的应用容器为一个项目(project)

Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要

所操作的平台支持Docker API, 就可以在其上利用Compose来进行编排管理。

1 环境准备

容器名容器ip地址docker版本镜像所需软件

nginx

192.168.11.720.10.17centos:7Docker-nginx DockerWordpress
mysql192.168.11.720.10.17Docker-php
php192.168.11.720.10.17Docker-php
2 准备容器目录及相关文件;关闭防火墙关闭防护;下载centos:7镜像
[root@mcb-11-7 ~]# systemctl stop firewalld
[root@mcb-11-7 ~]# setenforce 0
[root@mcb-11-7 ~]# mkdir -p /opt/compose_lnmp/nginx
[root@mcb-11-7 ~]# mkdir -p /opt/compose_lnmp/mysql
[root@mcb-11-7 ~]# mkdir -p /opt/compose_lnmp/php
[root@mcb-11-7 ~]# cd /opt/compose_lnmp/
[root@mcb-11-7 compose_lnmp]# ls
mysql  nginx  php
[root@mcb-11-7 ~]# docker load -i  centos
174f56854903: Loading layer  211.7MB/211.7MB
Loaded image: centos:7
[root@mcb-11-7 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       7         eeb6ee3f44bd   2 years ago   204MB

 3 Docker-Compose 编排nginx

①编写 Dockerfile 文件
FROM centos:7
MAINTAINER this is nginx image <mcb>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make -j2 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
ADD nginx.conf /usr/local/nginx/conf/
#ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html/
RUN chmod 777 -R /usr/local/nginx/html/
EXPOSE 80
EXPOSE 443
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]
② 修改nginx.conf配置文件

[root@mcb-11-7 nginx]# vim nginx.conf

③ 创建html文件夹,并解压wordpress

[root@mcb-11-7 nginx]# rz -E
rz waiting to receive.
[root@mcb-11-7 nginx]# rz -E
rz waiting to receive.
[root@mcb-11-7 nginx]# ls
Dockerfile  nginx-1.12.0.tar.gz  nginx.conf  wordpress-4.9.4-zh_CN.tar.gz
[root@mcb-11-7 nginx]# mkdir html
[root@mcb-11-7 nginx]# ls
Dockerfile  html  nginx-1.12.0.tar.gz  nginx.conf  wordpress-4.9.4-zh_CN.tar.gz
[root@mcb-11-7 nginx]# 
[root@mcb-11-7 nginx]# mv wordpress-4.9.4-zh_CN.tar.gz html
[root@mcb-11-7 nginx]# cd html/
[root@mcb-11-7 html]# ls
wordpress-4.9.4-zh_CN.tar.gz
[root@mcb-11-7 html]# tar xf wordpress-4.9.4-zh_CN.tar.gz 
[root@mcb-11-7 html]# cd wordpress/
[root@mcb-11-7 wordpress]# ls
index.php        wp-admin              wp-content         wp-load.php      wp-signup.php
license.txt      wp-blog-header.php    wp-cron.php        wp-login.php     wp-trackback.php
readme.html      wp-comments-post.php  wp-includes        wp-mail.php      xmlrpc.php
wp-activate.php  wp-config-sample.php  wp-links-opml.php  wp-settings.php
[root@mcb-11-7 wordpress]# cd ..
[root@mcb-11-7 html]# ls
wordpress  wordpress-4.9.4-zh_CN.tar.gz
[root@mcb-11-7 html]# 

4 Docker-Compose 编排mysql

① 切换工作目录
② 编写 Dockerfile 文件

[root@mcb-11-7 mysql]# vim Dockerfile

FROM centos:7
MAINTAINER this is mysql image <lyh1>
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_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make -j4 && make install
ADD my.cnf /etc/
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
RUN useradd -M -s /sbin/nologin  mysql
RUN chown mysql:mysql /etc/my.cnf
RUN chown -R mysql:mysql /usr/local/mysql/
RUN /usr/local/mysql/bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data && cp/usr/local/mysql/usr/lib/systemd/system/sqld.service /usr/lib/systemd/system/
EXPOSE 3306
CMD ["/usr/local/mysql/bin/mysqld"]
注意:空格  datadir=/usr/local/mysql/data&&cp /usr/local/mysql/usr/lib/systemd/system/sqld.service /usr/lib/systemd/system/
③ 准备my.cnf文件

root@mcb-11-7 mysql]# vim my.cnf

[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
 
[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash
 
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
 
sql_mode=NO_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

5 Docker-Compose 编排php

① 切换工作目录
② 编写 Dockerfile 文件

[root@mcb-11-7 php]# vim Dockerfile

FROM centos:7
MAINTAINER this is php image <mcb3>
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 && useradd -M -s /sbin/nologin nginx
ADD php-7.1.10.tar.bz2 /usr/local/src/
WORKDIR /usr/local/src/php-7.1.10
RUN ./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 -j2 && make install
ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
ADD php.ini /usr/local/php/lib/
ADD php-fpm.conf /usr/local/php/etc/
ADD www.conf /usr/local/php/etc/php-fpm.d/
EXPOSE 9000
ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]
 ③准备 php.ini、php-fpm.conf、www.conf 配置文件

修改php.ini

[root@mcb-11-7 php]# vim php.ini

[root@mcb-11-7 php]# vim php.ini
 939 date.timezone = Asia/Shanghai  # 取消注释,修改
1170 mysqli.default_socket = /usr/local/mysql/mysql.sock
# MySQL数据库的默认socket文件路径,用于PHP连接MySQL数据库时寻找MySQL服务器的通信端口
[root@localhost php]# egrep -v "^;" php.ini | egrep -v "^$"
# 显示php.ini文件中的非注释和非空行内容,即显示出配置文件中的有效配置项

修改php-fmp.conf 

[root@mcb-11-7 php]# vim php-fpm.conf

 修改www.conf

 6 下载 Docker Compose 并安装

curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
 
# `uname -s`-`uname -m`也可以写成$(uname -s) 和 $(uname -m):分别会自动替换为你的系统类型(如:Linux)和机器架构(如:x86_64),确保你下载的是适合你系统的版本。
# curl -L:这部分表示使用curl命令进行下载,并且使用-L参数来跟随重定向
# -o /usr/local/bin/docker-compose: 表示将下载的文件保存为/usr/local/bin目录下的docker-compose文件
 
 
 
#安装
chmod +x /usr/local/bin/docker-compose
 
#查看版本
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
 
# `uname -s`-`uname -m`也可以写成$(uname -s) 和 $(uname -m):分别会自动替换为你的系统类型(如:Linux)和机器架构(如:x86_64),确保你下载的是适合你系统的版本。
# curl -L:这部分表示使用curl命令进行下载,并且使用-L参数来跟随重定向
# -o /usr/local/bin/docker-compose: 表示将下载的文件保存为/usr/local/bin目录下的docker-compose文件
 
 
 
#安装
chmod +x /usr/local/bin/docker-compose
 
#查看版本
docker-compose --version

7 编写docker-compose.yml文件 

[root@mcb-11-7 bin]# vim docker-compose.yml

若粘不进去:set paste

#定义docker-compose版本,可以是2 或 3
version: '3'
services:
  nginx:
    container_name: nginx
    hostname: nginx
    build:
      context: /opt/compose_lnmp/nginx/
      dockerfile: Dockerfile
    ports:
      - 80:80
      - 443:443
    #设置数据卷挂载
    volumes:
      - /opt/compose_lnmp/nginx/html:/usr/local/nginx/html
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
 
  mysql:
    container_name: mysql
    build:
      context: /opt/compose_lnmp/mysql
      dockerfile: Dockerfile
    ports:
      - 3306:3306
    networks:
      lnmp:
        ipv4_address: 172.18.0.20
volumes:
      - db-data:/usr/local/mysql
    privileged: true
 
  php:
    container_name: php
    build:
      context: /opt/compose_lnmp/php
      dockerfile: Dockerfile
    ports:
      - 9000:9000
    networks:
      lnmp:
        ipv4_address: 172.18.0.30
    volumes:
      - db-data:/usr/local/mysql
      - ./nginx/html:/usr/local/nginx/html
    depends_on:
      - nginx
      - mysql
 
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16
 
volumes:
  db-data:
8 启动服务

9 查看镜像和容器

10 进入容器登录 mysql 授权

11 创建一个新的配置文件 wp-config.php

 

12 浏览器访问 wordpress

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1663814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux安装配置Docker保姆级教程

Docker到底是什么? Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱机制&#xff0c;相互之间…

【MySQL的内置函数】

文章目录 一、日期函数1.current_date()2.current_time()3.current_timestamp4. date_add 穿越未来5.date_sub 回到过去6.datediff案例 二、字符串函数2.1charset2.2 concat ——拼接字符串2.3 ucase——转化成大写2.4 lcase——转化成小写2.5 left&#xff08;&#xff09;2.6…

vue3 element plus el-date-picker组件在日期上做标识

1.先看效果图,带红点的就是我要做标识的日期 2.直接把代码拿出来就可以用 (1)html部分 <el-date-pickerv-model"startTime"type"datetime"placeholder"选择开始日期"format"YYYY-MM-DD HH:mm"value-format"YYYY-MM-DD HH:mm…

测试新人常问:如何开始自动化测试,必须知道的10点!

随着互联网技术的发展&#xff0c;无论哪个公司&#xff0c;哪个团队都在谈论自动化测试、动手实现自动化测试&#xff0c;从而让测试显得更加“高大上”。 那么是不是所有的业务都适合自动化&#xff1f;是不是自动化做的越多&#xff0c;效果越好呢&#xff1f;下面就自己一…

物联网平台之单体架构

介绍本文主要介绍平台的单体架构&#xff0c;包括各个组件之间的数据流描述以及所做的一些架构选择。在单体架构模式下&#xff0c;所有 ThingsKit 组件都在单个 Java 虚拟机 (JVM) 中启动&#xff0c;并共享相同的操作系统资源。由于 ThingsKit 是用 Java 编写的&#xff0c;因…

企业大文件传输之安全数据传输的重要性

企业数据安全性的维护直接关系到企业的市场竞争力乃至其生存的根基。数据的保护不仅涉及到保护企业的商业秘密&#xff0c;也关乎到客户隐私的保护&#xff0c;更触及到国家安全的敏感层面。因此&#xff0c;保障数据在传输过程中的安全&#xff0c;成为了每个企业和组织必须面…

【湿地探秘】守护蓝色星球的绿色之肾

在地球的广阔画卷中&#xff0c;湿地犹如镶嵌其中的翡翠&#xff0c;不仅孕育着丰富的生物多样性&#xff0c;更是自然界不可或缺的调节器。今天&#xff0c;让我们一同深入了解湿地的基本概念、我国湿地的概貌、湿地的多样类型&#xff0c;以及保护湿地对于人类和地球的深远意…

2024.5.8 关于 SpringCloud —— Ribbon 的基本认知

目录 Ribbon 负载均衡原理 工作流程 Ribbon 负载均衡规则 Ribbon 负载均衡自定义化 代码方式修改规则 配置文件方式修改规则 小总结 Ribbon 设定饥饿加载 Ribbon 负载均衡原理 工作流程 order-service 使用 RestTemplate 发送请求&#xff0c;随后该请求将会被 Ribbon 所…

探针流量检测与回溯分析,解密AnaTraf网络流量分析仪的神奇魅力

目录 导言 概述 流量检测探针 流量回溯分析 网络故障解决案例 了解更多 导言 在当今互联网时代&#xff0c;网络性能监测与诊断成为企业发展的关键。为了解决网络故障和提升网络性能&#xff0c;AnaTraf网络流量分析仪应运而生。本文将详细介绍AnaTraf的功能和优势&#…

Python 框架安全:SSTI 模板注入漏洞测试.

什么是 SSTI 模板注入 SSTI (Server-Side Template Injection) 是一种Web应用程序安全漏洞&#xff0c;它发生在应用程序使用模板引擎渲染用户输入时。当应用程序将用户输入直接插入到模板中而不进行充分的过滤和验证时&#xff0c;就可能导致SSTI漏洞。攻击者可以利用这个漏洞…

制造业数字化转型解决方案及应用(125页PPT)

一、资料介绍 《制造业数字化转型解决方案及应用》是一份内容丰富、深入剖析制造业数字化转型的125页PPT资料。这份资料以“智能制造、制造业数字化转型、制造业数字化转型案例”为关键词&#xff0c;全面展现了制造业数字化转型的核心理念、解决方案以及实际应用案例。 关注…

Vue3 - 前端项目代码防止被调试/被爬,阻止浏览器F12开发者工具

项目背景 大家都知道浏览器的开发者工具能干啥&#xff0c;正经的用法&#xff1a;开发时调试代码逻辑&#xff0c;修改布局样式&#xff1b;不正经的用法&#xff1a;改改元素骗骗人&#xff0c;找找网站接口写爬虫&#xff0c;逆向js破解加密等等&#xff0c;所以说前端不安…

MySQL数据库的安装和部署

1.数据库的相关介绍 关系型数据库管理系统&#xff1a;&#xff08;英文简称&#xff1a;RDBMS&#xff09; 为我们提供了一种存储数据的特定格式&#xff0c;所谓的数据格式就是表&#xff0c; 在数据库中一张表就称为是一种关系. 在关系型数据库中表由两部分组成&#xf…

油泼辣子在食品类别可以申请成商标不!

前阵韩国人在美国申请“chili crunch”油泼辣子作为商标&#xff0c;还准备禁止华人餐馆使用投诉侵权并索赔&#xff0c;普推知产老杨在USPTO上面检索发现&#xff0c;这个人申请的主要是30类方便食品的调味品&#xff0c;商标分类是全球通用的。 商标名称不能申请本类所属的通…

详解Python测试框架Pytest的参数化

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 上篇博文介绍过&#xff0c;Pytest是目前比较成熟功能齐全的测试框架&#xff0c;使用率肯定也不…

ECharts系列:基本使用及配置项

目录 基本使用 配置项的写法与位置 配置项option包含属性 各个配置项属性大全 基本使用 在阅读本篇文章时请参考ECharts官网地址中的内容配合了解 首先我们知道ECharts图表中有许多类型&#xff0c;如折线图、柱状图、饼形图等&#xff0c;下面我以折线图为例讲解ECharts图…

[AutoSar]lauterbach_001_ORTI_CPUload_Trace

目录 关键词平台说明一、ORTI概述二、ORTI文件的生成三、ORTI文件的导入四、Trace 功能4.1 Trace 功能菜单介绍4.2 Trace功能的配置4.3 Trace MCDS 设置4.4 Task Switches断点的设置4.5 Trace 数据的录取4.6 CPU 负载和Task调度的查看 关键词 嵌入式、C语言、autosar、OS、BSW…

让AI触手可及丨2024高通美格智能边缘智能技术进化日隆重举行

5月9日&#xff0c;高通技术公司携手美格智能联合举办了主题为“让智能计算无处不在&#xff0c;2024高通&美格智能边缘智能技术进化日”在深圳隆重举行。大会现场&#xff0c;智能物联网行业合作伙伴齐聚一堂&#xff0c;多位行业资深专家围绕AI与通讯、智能计算、边缘大模…

Redis 基础之常用数据类型及命令

常用数据类型及命令 String&#xff08;字符串&#xff09;Hash&#xff08;哈希&#xff09;List&#xff08;列表&#xff09;Set&#xff08;集合&#xff09;zset ( sorted set&#xff1a;有序集合 )Redis setbit 命令HyperLogLogs ( 基数统计 ) Redis 比 Memcached 更优秀…

命名规范总结Java

小驼峰命名 主要用于变量和方法的命名&#xff0c;当标识符是一个单词时首字母小写&#xff0c;当标识符为多个单词时第一个单词首字母小写&#xff0c;其他单词首字母大写 大驼峰命名 主要用于类(Class)名等。标识符各个单词首字母大写。 全部大写命名 常量名 全部小写命…