docker 微服务实践

Docker 是一个容器工具,提供虚拟环境。站在 Docker 的角度,软件就是容器的组合:业务逻辑容器、数据库容器、储存容器、队列容器…Docker 使得软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来。微服务(microservices)的思想也是如此:软件把任务外包出去,让各种外部服务完成这些任务,软件本身只是底层服务的调度中心和组装层。

微服务很适合用 Docker 容器实现,每个容器承载一个服务。一台计算机同时运行多个容器,从而就能很轻松地模拟出复杂的微服务架构。

WordPress 是一个常用软件,只要两个容器就够了(业务容器 + 数据库容器)。这种"业务 + 数据库"的容器架构,具有通用性,许多应用程序都可以复用。

这里记录三种方法来搭建 WordPress 网站:

  • 自建 WordPress 容器
  • 采用官方的 WordPress 容器
  • 采用 Docker Compose 工具

1 自建 WordPress 容器搭建 WordPress 网站

1.1 新建 PHP 容器

首先,新建一个工作目录,并进入该目录。

mkdir docker-demo && cd docker-demo

然后,执行下面的命令。

docker container run \--rm \--name wordpress \--volume "$PWD/":/var/www/html \php:5.6-apache

上面的命令基于php的 image 文件新建一个容器,并且运行该容器。命令的三个参数含义如下。

  • --rm:停止运行后,自动删除容器文件。
    --name wordpress:容器的名字叫做wordpress。
    --volume "$PWD/":/var/www/html:将当前目录($PWD)映射到容器的/var/www/html(Apache 对外访问的默认目录)。因此,当前目录的任何修改,都会反映到容器里面,进而被外部访问到。

运行上面的命令以后,如果一切正常,命令行会提示容器对外的 IP 地址,记下这个地址,需要用它来访问容器。

打开浏览器,访问前面的 IP 地址,可以看到下面的提示:

Forbidden
You don't have permission to access / on this server.

这是因为容器的/var/www/html目录(也就是本机的docker-demo目录)下面什么也没有,无法提供可以访问的内容。

在本机的docker-demo目录下面,添加一个最简单的 PHP 文件index.php

<?php 
phpinfo();
?>

保存以后,浏览器刷新前面的 IP,应该就会看到phpinfo页面了。

1.2 拷贝 WordPress 安装包

首先,在docker-demo目录下,执行下面的命令,抓取并解压 WordPress 安装包。

wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
tar -xvf wordpress-4.9.4-zh_CN.tar.gz

解压以后,WordPress 的安装文件会在docker-demo/wordpress目录下。
这时浏览器访问http://ip/wordpress,就能看到 WordPress 的安装提示了。

1.3 官方的 MySQL 容器

WordPress 必须有数据库才能安装,所以必须新建 MySQL 容器。

打开一个新的命令行窗口,执行下面的命令。

docker container run \-d \--rm \--name wordpressdb \--env MYSQL_ROOT_PASSWORD=123456 \--env MYSQL_DATABASE=wordpress \mysql:5.7

上面的命令会基于 MySQL 的 image 文件(5.7版本)新建一个容器。该命令的五个命令行参数的含义如下:

  • -d:容器启动后,在后台运行。
  • --rm:容器终止运行后,自动删除容器文件。
  • --name wordpressdb:容器的名字叫做wordpressdb
  • --env MYSQL_ROOT_PASSWORD=123456:向容器进程传入一个环境变
  • MYSQL_ROOT_PASSWORD,该变量会被用作 MySQL 的根密码。
  • --env MYSQL_DATABASE=wordpress:向容器进程传入一个环境变量MYSQL_DATABASE,容器里面的 MySQL 会根据该变量创建一个同名数据库

运行上面的命令以后,正常情况下,命令行会显示一行字符串,这是容器的 ID,表示已经新建成功了。

这时,使用下面的命令查看正在运行的容器,你应该看到wordpress和wordpressdb两个容器正在运行。

docker container ls

其中,wordpressdb是后台运行的,前台看不见它的输出,必须使用下面的命令查看:

docker container logs wordpressdb
1·4 定制 PHP 容器

现在 WordPress 容器和 MySQL 容器都已经有了。接下来,要把 WordPress 容器连接到 MySQL 容器了。但是,PHP 的官方 image 不带有mysql扩展,必须自己新建 image 文件。

首先,停掉 WordPress 容器。

docker container stop wordpress

停掉以后,由于--rm参数的作用,该容器文件会被自动删除。

然后,在docker-demo目录里面,新建一个Dockerfile文件,写入下面的内容。

FROM php:5.6-apache
RUN docker-php-ext-install mysqli
CMD apache2-foreground

上面代码的意思,就是在原来 PHP 的 image 基础上,安装mysqli的扩展。然后,启动 Apache。

基于这个 Dockerfile 文件,新建一个名为phpwithmysql的 image 文件。

docker build -t phpwithmysql .
1.5 Wordpress 容器连接 MySQL

现在基于 phpwithmysql image,重新新建一个 WordPress 容器。

docker container run \--rm \--name wordpress \--volume "$PWD/":/var/www/html \--link wordpressdb:mysql \phpwithmysql

跟上一次相比,上面的命令多了一个参数--link wordpressdb:mysql,表示 WordPress 容器要连到wordpressdb容器,冒号表示该容器的别名是mysql。

这时还要改一下wordpress目录的权限,让容器可以将配置信息写入这个目录(容器内部写入的/var/www/html目录,会映射到这个目录)。

chmod -R 777 wordpress

接着,回到浏览器的http://ip/wordpress页面,点击"现在就开始!"按钮,开始安装。WordPress 提示要输入数据库参数:

  • 数据库名:wordpress
  • 用户名:root
  • 密码:123456
  • 数据库主机:mysql
  • 表前缀:wp_(不变)

点击"下一步"按钮,等待 Wordpress 连接数据库成功,就可以安装了。至此,自建 WordPress 容器完毕,可以把正在运行的两个容器关闭了(容器文件会自动删除)。

2 采用官方的 WordPress 容器搭建 WordPress 网站

docker 提供了官方 WordPress image,可以直接用。

首先,新建并启动 MySQL 容器。

docker container run \-d \--rm \--name wordpressdb \--env MYSQL_ROOT_PASSWORD=123456 \--env MYSQL_DATABASE=wordpress \mysql:5.7

然后,基于官方的 WordPress image,新建并启动 WordPress 容器。

docker container run \-d \--rm \--name wordpress \--env WORDPRESS_DB_PASSWORD=123456 \--link wordpressdb:mysql \wordpress

上面命令指定wordpress容器在后台运行,导致前台看不见输出,使用下面的命令查出wordpress容器的 IP 地址。

docker container inspect wordpress

上面命令运行以后,会输出很多内容,找到IPAddress字段即可。浏览器访问ip,就会看到 WordPress 的安装提示。

到了这一步,官方 WordPress 容器的安装就已经成功了。但是,这种方法有两个很不方便的地方:

  • 每次新建容器,返回的 IP 地址不能保证相同,导致要更换 IP 地址访问 WordPress。
  • WordPress 安装在容器里面,本地无法修改文件。

解决这两个问题要新建容器的时候,加两个命令行参数。使用下面的命令新建并启动 WordPress 容器。

docker container run \-d \-p 127.0.0.2:8080:80 \--rm \--name wordpress \--env WORDPRESS_DB_PASSWORD=123456 \--link wordpressdb:mysql \--volume "$PWD/wordpress":/var/www/html \wordpress

跟前面相比,命令行参数多出了两个:

  • -p 127.0.0.2:8080:80:将容器的80端口映射到127.0.0.28080端口。
  • --volume "$PWD/wordpress":/var/www/html:将容器的/var/www/html目录映射到当前目录的wordpress子目录。

浏览器访问127.0.0.2:8080:80就能看到 WordPress 的安装提示了。而且,在wordpress子目录下的每次修改,都会反映到容器里面。

3 采用 Docker Compose 工具搭建 WordPress 网站

Docker 提供了一种更简单的方法,来管理多个容器的联动。

3.1 Docker Compose

Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。

# 启动所有服务
docker-compose up
# 关闭所有服务
docker-compose stop
3.2 Docker Compose 的安装

Mac 和 Windows 在安装 docker 的时候,会一起安装 docker compose。Linux(ubuntu) 系统下的安装(其他发行版参考官方文档):

# For non-Gnome Desktop environments, gnome-terminal must be installed:
sudo apt install gnome-terminal# 安装 Docker Desktop
# Set up Docker's apt repository
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update# Install the Docker packages
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 验证
sudo docker run hello-world
# 运行docker-desktop
systemctl --user start docker-desktop

安装完成后,运行下面的命令,查看docker compose版本

docker-compose --version
3.3 WordPress

在docker-demo目录下,新建docker-compose.yml文件,写入下面的内容:

mysql:image: mysql:5.7environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpress
web:image: wordpresslinks:- mysqlenvironment:- WORDPRESS_DB_PASSWORD=123456ports:- "127.0.0.3:8080:80"working_dir: /var/www/htmlvolumes:- wordpress:/var/www/html

上面代码中,两个顶层标签表示有两个容器mysql和web。
启动两个容器。

docker-compose up

浏览器访问 http://127.0.0.3:8080,应该就能看到 WordPress 的安装界面。

关闭两个容器。

docker-compose stop

关闭以后,这两个容器文件还是存在的,写在里面的数据不会丢失。下次启动的时候,还可以复用。下面的命令可以把这两个容器文件删除(容器必须已经停止运行)。

docker-compose rm
``

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

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

相关文章

Atlas800昇腾服务器(型号:3000)—驱动与固件安装(一)

服务器配置如下&#xff1a; CPU/NPU&#xff1a;鲲鹏 CPU&#xff08;ARM64&#xff09;A300I pro推理卡 系统&#xff1a;Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本&#xff1a; Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…

《环境感知:开启智能生活新视角》

《环境感知&#xff1a;开启智能生活新视角》 一、环境感知的定义与作用二、环境感知的技术与方法&#xff08;一&#xff09;传感器技术&#xff08;二&#xff09;数据融合技术&#xff08;三&#xff09;机器学习与深度学习技术 三、环境感知在不同领域的应用&#xff08;一…

Vue3学习:vite项目中图片不能显示,报错 require is not defined

今天做了一个案例“给你喜欢的人送花”&#xff0c;如果喜欢谁&#xff0c;就给谁送花&#xff0c;最多可以送5朵。运行效果如下。 这个项目是使用 npm create vitelatest 命令创建的。 包括2个组件&#xff1a; 根组件App.vue子组件HelloVote.vue。 目录结构如图所示&#x…

秋招面试题记录_半结构化面试

c八股(可能问的多一点) 1.简单说说C11语法特性 答&#xff1a; 1.auto以及decltype自动类型推导&#xff0c;避免手动声明复杂类型&#xff0c;减少冗长代码提升了可读性和安全性。 2.智能指针 自动释放内存 (具体说说) 有shared和unique 差异主要体现在所有权、内存开销、…

Java项目-基于springboot框架的校园在线拍卖系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

Java的walkFileTree方法用法【FileVisitor接口】

在Java旧版本中遍历文件系统只能通过File类通过递归来实现&#xff0c;但是这种方法不仅消耗资源大而且效率低。 NIO.2的Files工具类提供了两个静态工具方法walk()和walkFileTree()可用来高效并优雅地遍历文件系统。walkFileTree()功能更强&#xff0c;可自定义实现更多功能&am…

Git中Update和Pull的区别

在本文中&#xff0c;我们将介绍Git中的两个操作——”Update”和”Pull”&#xff0c;并解释它们之间的区别。 1、“Update”的含义和用法 “Update”是Git中用于更新本地仓库和工作区的操作。它的作用是将远程仓库中的最新变更同步到本地。当我们执行”Update”操作时&…

(二十)、从宿主机访问 k8s(minikube) 发布的 redis 服务

文章目录 1、环境准备2、具体操作2.1、启动 minikube (start/stop)2.2、准备 redis-deployment.yaml2.3、执行 redis-deployment.yaml2.3.1、查看 pod 信息和日志 2.4、检查部署和服务状态2.4.1、如果需要删除 3、查看 IP 的几个命令3.1、查看IP的几个命令3.2、解读3.3、宿主机…

Apache 出现 “403 forbidden“ 排查方法

1、检查运行 Apache 进程的用户没有对目录具备读取权限 如果该用户没有对 Directory 指定的目录具备适当的读取权限&#xff0c;就会导致 403 错误。 ​​例如&#xff1a;使用用户apache启动Apache进程&#xff0c;但是apache用户对 Directory 指定的目录没有读取权限 2、检查…

k8s的部署和安装

k8s的部署和安装 一、Kubernets简介及部署方法 1.1 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个阶段&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参…

Python基础09_类和对象(下)迭代器和生成器函数式编程

一、类和对象(下) 1、封装 封装是指隐藏类的实现细节&#xff0c;让使用者不用关心这些细节; 封装的目的是让使用者通过尽可能少的方法(或属性)操作对象 Python的封装是假的&#xff08;模拟的&#xff09;封装 私有属性和方法 python类中以双下划线(__)开头&#xff0c;不…

AI 通俗理解强人工智能和弱人工智能

强人工智能&#xff08;Strong AI&#xff09;和弱人工智能&#xff08;Weak AI&#xff09;是两种不同类型的人工智能系统&#xff0c;它们的目标、能力和应用范围有很大的区别。 生活化例子 想象你有两个助手&#xff1a; 弱人工智能助手&#xff1a;你让它查资料、翻译、…

HarmonyOS Next模拟器异常问题及解决方法

1、问题1&#xff1a;Failed to get the device apiVersion. 解决方法&#xff1a;关闭模拟器清除用户数据重启

电子商务网站维护技巧:保持WordPress、主题和插件的更新

在这个快节奏的数字时代&#xff0c;维护一个电子商务网站的首要任务之一是保持WordPress、主题和插件的最新状态。过时的软件不仅可能导致功能故障&#xff0c;还可能带来安全风险。本文将深入探讨如何有效地更新和维护您的WordPress网站&#xff0c;以确保其安全性和性能。 …

【天池比赛】【零基础入门金融风控 Task2赛题理解】【2.3.6】

【天池比赛】【零基础入门金融风控 Task2赛题理解】【2.3.1-2.3.5】 2.3.6 变量分布可视化 2.3.6.1 单一变量分布可视化 对于 pandas.core.series.Series 类型的变量&#xff1a; index&#xff1a;含义&#xff1a;它表示 Series 对象的索引&#xff0c;也就是每个数据点对…

Docker-Consul概述以及集群环境搭建

文章目录 一、Docker consul概述二、consul 部署1.consul服务器2.registrator服务器&#xff08;客户端&#xff09;2.consul-template&#xff08;在consul服务器&#xff09;3.consul 多节点 一、Docker consul概述 容器服务更新与发现&#xff1a;先发现再更新&#xff0c;…

Leetcode 347 Top K Frequent Elements

题意&#xff1a; 求前k个出现频率最高的元素 首先得到一个频率图这是肯定的&#xff0c;下一步要考虑建立一个堆&#xff0c;堆中保存着前k个频率最大的数字&#xff0c;这个怎么做&#xff0c;可以用customized cmp来做&#xff0c;把数字存进去完事儿。注意这里不用 保存所有…

FFmpeg 4.3 音视频-多路H265监控录放C++开发三 :安装QT5.14.2, 并将QT集成 到 VS2019中。

一&#xff0c;安装QT&#xff0c; 重点&#xff1a;在安装QT的时候要安装msvc201x版本的组件&#xff0c; 二 &#xff0c; 安装 qt-vs-tools Index of /development_releases/vsaddin/2.8.1 三&#xff0c;需要安装过 windows10 SDK&#xff0c;一般我们在安装vs2019的时候就…

【MR开发】在Pico设备上接入MRTK3(三)——在Unity中运行MRTK示例

在前面的文档中&#xff0c;介绍了如何在Unity工程中配置号MRTK和Pico SDK 【MR开发】在Pico设备上接入MRTK3&#xff08;一&#xff09;在Unity中导入MRTK3依赖【MR开发】在Pico设备上接入MRTK3&#xff08;二&#xff09;在Unity中配置Pico SDK 本文将介绍如何运行一个简单…

Docker 安装sql server 登陆失败

错误&#xff1a; Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate]. Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish co…