Docker-Compose编排LNMP并部署WordPress

前言

随着云计算和容器化技术的快速发展,使用 Docker Compose 编排 LNMP 环境已经成为快速部署 Web 应用程序的一种流行方式。LNMP 环境由 Linux、Nginx、MySQL 和 PHP 组成,为运行 Web 应用提供了稳定的基础。本文将介绍如何通过 Docker Compose 编排 LNMP 环境,并利用该环境顺利完成 WordPress 的部署和配置。

编写 Dockerfile 部署 LNMP 请参考:Docker构建LNMP部署WordPress-CSDN博客

目录

一、docker-compose 编排 lnmp

1. 环境准备

2. 准备 mysql 容器目录及相关文件

2.1 进入工作目录

2.2 编写 Dockerfile 文件

2.3 准备 my.cnf 文件

3. 准备 php 容器目录及相关文件

3.1 进入工作目录

3.2 编写 Dockerfile 文件

3.3 准备 php.ini、php-fpm.conf、www.conf 配置文件

3.3.1 php.ini

3.3.2 php-fpm.conf

3.3.3 www.conf

4. 编辑 docker-compose.yml 文件

5. 下载 Docker Compose 并安装

6. 查看工作目录清理历史数据

7. 启动服务

8. 进入容器登录 mysql 授权

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

10. 浏览器访问 wordpress

二、错误总结

1. php 无法获取指定镜像

2. 建议保证 nginx、mysql 服务优先启动于 php

3. 访问 wordpress/index.php 提示 File not found.

4. yum 安装依赖包失败

5. 其他建议


一、docker-compose 编排 lnmp

1. 环境准备

容器名宿主机系统/配置IP地址Docker版本基于镜像安装软件
nginxCentos 7.4;8C/8G172.19.8.1020.10.17centos:7Docker-NginxDocker-Wordpress
mysqlCentos 7.4;8C/8G172.19.8.2020.10.17centos:7Docker-Mysql
phpCentos 7.4;8C/8G172.19.8.3020.10.17centos:7Docker-php

nginx 容器构建请参考:Docker部署nginx并启用https加密连接-CSDN博客 

2. 准备 mysql 容器目录及相关文件

2.1 进入工作目录

[root@localhost ~]# cd /lnmp/
[root@localhost lnmp]# mkdir mysql
[root@localhost lnmp]# cd mysql/
[root@localhost mysql]# ls
mysql-boost-5.7.20.tar.gz       # 准备安装包

2.2 编写 Dockerfile 文件

[root@localhost mysql]# vim Dockerfile
FROM centos:7
MAINTAINER mysql image <fql>
RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/ # 将MySQL源代码包解压缩到镜像/usr/local/src/目录下
WORKDIR /usr/local/src/mysql-5.7.20/          # 设置工作目录为MySQL源代码包的目录
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 -j 8 && make install
ADD my.cnf /etc/
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH # 将MySQL的可执行文件路径添加到环境变量中
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 \    # 运行MySQL的初始化命令,初始化MySQL数据库
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
EXPOSE 3306
CMD ["/usr/local/mysql/bin/mysqld"]  # 启动MySQL数据库服务

2.3 准备 my.cnf 文件

[root@localhost mysql]# cat 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 = 1sql_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

3. 准备 php 容器目录及相关文件

3.1 进入工作目录

[root@localhost mysql]# cd ..
[root@localhost lnmp]# mkdir php
[root@localhost lnmp]# cd php/
[root@localhost php]# ls
php-7.1.10.tar.bz2       # 准备安装包

3.2 编写 Dockerfile 文件

[root@localhost php]# vim Dockerfile
FROM centos:7
MAINTAINER php image <fql>
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
RUN useradd -M -s /sbin/nologin nginx
ADD php-7.1.10.tar.bz2 /usr/local/src/ # 将php文件解压并复制到/usr/local/src/目录下
WORKDIR /usr/local/src/php-7.1.10      # 设置工作目录
RUN ./configure \                      # 配置PHP编译选项
--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 8 && make install
ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH # 将PHP可执行文件路径添加到系统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                                        # 暴露容器的9000端口,用于PHP-FPM服务
ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ] # 启动PHP-FPM服务并以守护进程方式运行

3.3 准备 php.ini、php-fpm.conf、www.conf 配置文件

3.3.1 php.ini
[root@localhost php]# vim php.ini939 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]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = On
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket = /usr/local/mysql/mysql.sock
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[Assertion]
zend.assertions = 1
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[opcache]
[curl]
[openssl]
3.3.2 php-fpm.conf
[root@localhost php]# vim php-fpm.conf17 pid = run/php-fpm.pid        # 删除注释符号“;”
[root@localhost php]# egrep -v "^;" php-fpm.conf | egrep -v "^$"
[global]
pid = run/php-fpm.pid
include=/usr/local/php/etc/php-fpm.d/*.conf
3.3.3 www.conf
[root@localhost php]# vim www.conf23 user = nginx24 group = nginx36 listen = 172.19.0.30:9000  # 修改监听IP和端口为容器IP:9000端口
[root@localhost php]# egrep -v "^;" www.conf | egrep -v "^$"
[www]
user = nginx
group = nginx
listen = 172.19.0.30:9000
listen.allowed_clients = 127.0.0.1,172.19.0.10
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

4. 编辑 docker-compose.yml 文件

[root@localhost php]# cd ..
[root@localhost lnmp]# ls
mysql  nginx  php
[root@localhost lnmp]# vim docker-compose.yml
version: '2'
services:nginx:container_name: nginx01   # 指定容器的名称为nginx01hostname: nginx-host      # 容器的主机名为nginx-hostimage: nginx:lnmp         # 使用的镜像为nginx:lnmpbuild:                    # 构建上下文和Dockerfile的位置context: ./nginxdockerfile: Dockerfileports:             # 将宿主机的80端口映射到容器的80端口,将宿主机的443端口映射到容器的443端口- 80:80- 443:443volumes:           # 将/usr/local/nginx/html目录设为共享挂载点- /usr/local/nginx/htmlnetworks:          # 将该服务连接到名为lnmp的网络,并指定了容器的IPv4地址lnmp:ipv4_address: 172.19.0.10mysql: container_name: mysql01   # 容器的名称为mysql01hostname: mysql-host      # 容器的主机名为mysql-hostimage: mysql:lnmp         # 使用的镜像为mysql:lnmpprivileged: true          # 使容器内的root拥有真正的root权限build:                    # 构建上下文和Dockerfile的位置context: ./mysql        dockerfile: Dockerfileports:                    # 将宿主机的3306端口映射到容器的3306端口- 3306:3306volumes:                  # 创建容器共享挂载目录/usr/local/mysql - /usr/local/mysqlnetworks:lnmp:ipv4_address: 172.19.0.20php:container_name: php       # 容器的名称为phphostname: php-host        # 容器的主机名为php-hostimage: php:lnmp           # 使用的镜像为php:lnmpbuild:                    # 指定了构建上下文和Dockerfile的位置context: ./phpdockerfile: Dockerfileports:                    # 将宿主机的9000端口映射到容器的9000端口- 9000:9000depends_on:               # 声明了该服务依赖于nginx和mysql服务- nginx- mysqlvolumes_from:             # 从nginx和mysql服务中挂载卷- nginx- mysqlnetworks:lnmp:ipv4_address: 172.19.0.30
networks:                     # 定义了一个叫做lnmp的网络,使用了bridge驱动lnmp:driver: bridgeipam:config:                 # 指定了IP地址池的子网范围- subnet: 172.19.0.0/16

5. 下载 Docker Compose 并安装

[root@localhost ~]# 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文件
[root@localhost bin]# pwd
/usr/local/bin
[root@localhost bin]# ls
docker-compose
[root@localhost bin]# chmod +x /usr/local/bin/docker-compose
[root@localhost bin]# ll
总用量 10616
-rwxr-xr-x. 1 root root 10867152 5月   3 16:34 docker-compose
[root@localhost bin]# docker-compose --version  # 查看版本
docker-compose version 1.21.1, build 5a3f1a3

6. 查看工作目录清理历史数据

[root@localhost lnmp]# tree -L 3
.
├── docker-compose.yml
├── mysql
│   ├── Dockerfile
│   ├── my.cnf
│   └── mysql-boost-5.7.20.tar.gz
├── nginx
│   ├── cert
│   │   ├── ca-key.pem
│   │   ├── ca.pem
│   │   ├── ca.srl
│   │   ├── server-cert.pem
│   │   ├── server.csr
│   │   └── server-key.pem
│   ├── Dockerfile
│   ├── html
│   │   ├── index.html
│   │   └── wordpress
│   ├── nginx-1.24.0.tar.gz
│   ├── nginx.conf
│   └── wordpress-4.9.4-zh_CN.tar.gz
└── php├── Dockerfile├── php-7.1.10.tar.bz2├── php-fpm.conf├── php.ini└── www.conf
# 删除原镜像、容器、网络、数据卷:docker-compose  -f  docker-compose-yml  down
建议单独删,别把有用的文件一块删了:
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        centos    a5f6eea7f002   6 hours ago   623MB
nginx        latest    7383c266ef25   9 days ago    188MB
centos       7         eeb6ee3f44bd   2 years ago   204MB
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
dca9b540b422   nginx:centos   "/usr/local/nginx/sb…"   6 hours ago   Up 6 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   n1
[root@localhost ~]# docker rm -f dca9b540b422
dca9b540b422
[root@localhost ~]# docker rmi -f a5f6eea7f002
[root@localhost ~]# iptables -F
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# systemctl restart network

7. 启动服务

[root@localhost ~]# cd /lnmp/
[root@localhost lnmp]# ls
docker-compose.yml  mysql  nginx  php
[root@localhost lnmp]# docker-compose -f docker-compose.yml up -d
Creating mysql01 ... done
Creating nginx01 ... done
Creating php     ... done
[root@localhost lnmp]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
php          lnmp      2c776b3060db   About a minute ago   1.41GB
mysql        lnmp      291e964e74d3   8 minutes ago        10.1GB
nginx        lnmp      dc1695c1c244   26 minutes ago       651MB
nginx        latest    7383c266ef25   9 days ago           188MB
centos       7         eeb6ee3f44bd   2 years ago          204MB
[root@localhost lnmp]# docker ps -a
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                                                                      NAMES
2e2c69e85e86   php:lnmp     "/usr/local/php/sbin…"   15 seconds ago   Up 14 seconds   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp                                  php
bd45ba2ccaeb   mysql:lnmp   "/usr/local/mysql/bi…"   23 seconds ago   Up 15 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp                                  mysql01
6dc9248104d1   nginx:lnmp   "/usr/local/nginx/sb…"   23 seconds ago   Up 15 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx01

8. 进入容器登录 mysql 授权

[root@localhost lnmp]# docker exec -it mysql01 /bin/bash
[root@mysql-host mysql-5.7.20]# mysql
mysql> create database wordpress;
mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';
mysql> flush privileges;
mysql> exit
Bye
[root@mysql-host mysql-5.7.20]# exit

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

[root@localhost lnmp]# cd /lnmp/nginx/html/wordpress
[root@localhost 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@localhost wordpress]# cp wp-config-sample.php wp-config.php
[root@localhost wordpress]# vim wp-config.php
/** WordPress数据库的名称 */
define('DB_NAME', 'wordpress');
/** MySQL数据库用户名 */
define('DB_USER', 'wordpress');
/** MySQL数据库密码 */
define('DB_PASSWORD', '123456');
# 修改WordPress数据库信息

10. 浏览器访问 wordpress

 访问http://192.168.190.108/wordpress/index.php

二、错误总结

1. php 无法获取指定镜像

WARNING: Image for service mysql was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Pulling php (php:lnmp)...
ERROR: manifest for php:lnmp not found: manifest unknown: manifest unknown
[root@localhost lnmp]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

排错:检查docker-compose.yml文件

    build:                    # 指定了构建上下文和Dockerfile的位置context: ./phpdockerfile: Dockerfile
原因是缺少build

2. 建议保证 nginx、mysql 服务优先启动于 php

    depends_on:               # 声明了该服务依赖于nginx和mysql服务- nginx- mysql

3. 访问 wordpress/index.php 提示 File not found.

① 查看 Dockerfile 指定映射路径是否正确,一开始路径写成yum安装的share了

② 查看 Dockerfile 指定映射路径权限问题,777没毛病

③ 另外:最坑的

ADD html/ /usr/local/nginx/html/  
居然不能把本地的 html/里面内容  拷贝到容器/usr/local/nginx/html/COPY html/ /usr/local/nginx/html/ 
尝试了修改为COPY;或者尝试直接ADD解压压缩包到容器;或者尝试在compose里面加valuesvolumes:           # 将本地目录./lnmp/nginx/html/挂载到容器内的/usr/local/nginx/html目录- ./lnmp/nginx/html/:/usr/local/nginx/html
最后发现Dockerfile与composed定义的有冲突,修改为- /usr/local/nginx/html

4. yum 安装依赖包失败

Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum makecache
# 如果遇到类似dns问题,可修改dns、替换阿里源尝试解决
vim /etc/sysctl.conf
net.ipv4.ip_forward=1sysctl -p
systemctl restart network
systemctl restart docker

5. 其他建议

  • 建议多核编译,提高效率
  • 出现故障可分开排查,比如nginx有问题,可以删掉compose其他容器服务配置,单独检查,避免多次编译

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

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

相关文章

Pytorch: nn.Embedding

文章目录 1. 本质2. 用Embedding产生一个10 x 5 的随机词典3. 用这个词典编码两个简单单词4. Embedding的词典是可以学习的5. 例子完整代码 1. 本质 P y t o r c h \mathrm{Pytorch} Pytorch 的 E m b e d d i n g \mathrm{Embedding} Embedding 模块是一个简单的查找表&#…

1.Spring Security介绍

spring security 功能 1.认证authentication&#xff0c;系统认为用户是否登录。 2.授权authorization&#xff0c;判断用户是否有权限去做某些事情。 spring security的缺点是重量级的。 还有另外一个安全认证权限框架是Apache下轻量级权限控制框架Shrio框架。 shiro的缺…

Stable Diffusion Windows部署教程

文章目录 1、准备2、Anaconda安装3、git安装4、开始部署 1、准备 官网需要翻墙软件最少6G内存&#xff0c;显卡在2060以上 2、Anaconda安装 这是一个运行python的环境管理工具进入官网点击download下载打开文件一路到 Advanced Options&#xff0c;勾选第一项注册到环境变量…

C++设计模式-结构型设计模式

写少量的代码来应对未来需求的变化。 单例模式 定义 保证一个类仅有一个实例&#xff0c;并提供一个该实例的全局访问点。——《设计模式》GoF 解决问题 稳定点&#xff1a; 类只有一个实例&#xff0c;提供全局的访问点&#xff08;抽象&#xff09; 变化点&#xff1a…

仿知乎网站问答源码,开源版

仿知乎网站问答源码&#xff0c;开源版 需要一定动手能力 发文章&#xff0c;发视频&#xff0c;发想法&#xff0c;提问回答&#xff0c;注册登录 开发环境 使用技术&#xff1a;springbootthymeleafRedis&#xff1b; 开发环境&#xff1a;tomcat8.0&#xff0c;jdk8.0, ID…

怎么用CAPL与Python交互

怎么用CAPL与其他应用程序交互 怎么用CAPL与Python交互 怎么用CAPL与Python交互 怎么用CAPL与其他应用程序交互前言1、CAPL怎么调Python&#xff1f;1.1CAPL调Python的命令1.2CAPL调用Python实例 2、怎么把python运行的结果返回给CAPL2.1通过环境变量 3、CAPL调Python的输入参…

使用 Docker-Compose 部署 ZooKeeper + Kafka + Kafka-UI

使用 Docker-Compose 部署 Kafka + ZooKeeper 1. 无密码验证部署1.1 启动 ZooKeeper1.2 查看 zookeeper 状态1.3 启动 Kafka1.4 Kafka 配置文件1.4 使用命令操作 Kafak 生产、消费1.4.1 创建topic1.4.2 查看某个 topic1.4.3 获取所有 topic1.4.4 删除 topic1.4.4 发送消息1.4.5…

我们的手机是如何连接上网的?骨干网又是什么?

什么是骨干网&#xff08;Backbone Network&#xff09; 几台计算机连接起来&#xff0c;互相可以看到其他人的文件&#xff0c;这叫局域网。整个城市的计算机都连接起来&#xff0c;就是城域网。把城市之间连接起来的网就叫骨干网。 这些骨干网是国家批准的可以直接和国外连…

环形列表 题目分析

一、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二、思路 1.使用快慢指针&#xff0c;快指针一次走两步&#xff0c;慢指针一次走一步&#xff0c;二者相对速度为1 2.当慢指针刚好进入环时&#xff0c;设二者的相对距离为N 3.如果链表中存在环&#xff…

Colab - Introduction to Object Detection using TensorFlow Hub

Colab - Introduction to Object Detection using TensorFlow Hub 1. 源由2. TensorFlow Hub3. 目标检测3.1 举例 - EfficientDet/D4 COCO 20173.2 下载示例图像3.2.1 显示部分样本3.2.2 定义一个将类别ID映射到类别名称和颜色的字典 3.3 加载模型3.4 单张照片执行推理3.4.1 推…

Python基础详解一

一&#xff0c;print打印 print("hello word") print(hello word) 双引号和单引号都可以 二&#xff0c;数据类型 Python中常用的有6种值的类型 输出类型信息 print(type(11)) print(type("22")) print(type(22.2)) <class int> <class str&…

C#图像:2.图像处理

类库项目ImageProcessingLibrary代码 里面是几种图像处理函数&#xff0c;可以生成DLL文件被其他&#xff08;下面&#xff09;项目添加引用 using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.…

IoTDB 入门教程——导读

文章目录 一、基础篇二、实战篇三、企业篇四、问题篇 Apache IoTDB&#xff08;物联网数据库&#xff09;是一体化收集、存储、管理与分析物联网时序数据的软件系统。 Apache IoTDB 采用轻量式架构&#xff0c;具有高性能和丰富的功能&#xff0c;并与Apache Hadoop、Spark和Fl…

n-Track Studio Suite for Mac激活版:打造您的专属音频工作室

n-Track Studio Suite for Mac是一款功能强大的数字音频工作站软件&#xff0c;让您在家中就能享受到专业录音棚的待遇。无论是录制人声、乐器还是MIDI序列&#xff0c;都能轻松应对。 n-Track Studio Suite for Mac激活版下载 这款软件拥有实时音高校准、时间拉伸和自动补足功…

深度学习500问——Chapter08:目标检测(7)

文章目录 8.3.8 RFBNet 8.3.9 M2Det 8.3.8 RFBNet RFBNet有哪些创新点 1. 提出RF block&#xff08;RFB&#xff09;模块 RFBNet主要想利用一些技巧使得轻量级模型在速度和精度上达到很好的trade-off的检测器。灵感来自人类视觉的感受野结构Receptive Fields&#xff08;RFs…

为什么要备份数据?我经历的数据灾难

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 &#xff08;注&#xff1a;这…

快速构建vscode pytest 开发测试环境

如果不想用 heavy 的pycharm vscode 也是1个很好的选择 安装python SDK pacman -S python [gatemanmanjaro-x13 tmp]$ pacman -Q python python 3.11.8-1安装Vscode 很多中方法 yay -S visual-studio-code-bin [gatemanmanjaro-x13 tmp]$ pacman -Q | grep -i visual visua…

JVM-02

字节码文件是一种特殊的文件格式&#xff0c;它包含了将源代码转换为机器可执行代码所需的指令集。字节码文件通常是由编译器将源代码编译为字节码的中间表示形式。 在Java中&#xff0c;字节码文件的扩展名为.class&#xff0c;它存储了编译后的Java代码。这些字节码文件可以在…

[Java EE] 多线程(七): 锁策略

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (90平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

基于MQTT通信开发的失物招领小程序

项目架构设计 这个项目采用前后端分离的方式&#xff0c;重新设计了两条链路来支撑程序的信息获取和传递 前端的小程序页面再启动页面渲染时&#xff0c;直接通过DBAPI从后端数据库获取信息&#xff0c;直接渲染在小程序中项目中给DBAPI的定位是快速从后端获取信息&#xff0…