首页 » SEO优化 » docker封装php网页技巧_教你用 docker 搞个网站

docker封装php网页技巧_教你用 docker 搞个网站

访客 2024-11-12 0

扫一扫用手机浏览

文章目录 [+]

但是,许多人并不清楚 Docker 到底是什么,要办理什么问题,好处又在哪里?本文就来详细阐明,帮助大家理解它,还带有大略易懂的实例,教你如何将它用于日常开拓。

一、环境配置的难题

软件开拓最大的麻烦事之一,便是环境配置。
用户打算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?

docker封装php网页技巧_教你用 docker 搞个网站

用户必须担保两件事:操作系统的设置,各种库和组件的安装。
只有它们都精确,软件才能运行。
举例来说,安装一个 Python 运用,打算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。

docker封装php网页技巧_教你用 docker 搞个网站
(图片来自网络侵删)

如果某些老旧的模块与当前环境不兼容,那就麻烦了。
开拓者常常会说:"它在我的机器可以跑了"(It works on my machine),言下之意便是,其他机器很可能跑不了。

环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。
很多人想到,能不能从根本上办理问题,软件可以带环境安装?也便是说,安装的时候,把原始环境千篇一律地复制过来。

二、虚拟机

虚拟机(virtual machine)便是带环境安装的一种办理方案。
它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。
运用程序对此毫无感知,由于虚拟机看上去跟真实系统千篇一律,而对付底层系统来说,虚拟机便是一个普通文件,不须要了就删掉,对其他部分毫无影响。

虽然用户可以通过虚拟机还原软件的原始环境。
但是,这个方案有几个缺陷。

(1)资源占用多

虚拟机会独占一部分内存和硬盘空间。
它运行的时候,其他程序就不能利用这些资源了。
哪怕虚拟机里面的运用程序,真正利用的内存只有 1MB,虚拟机依然须要几百 MB 的内存才能运行。

(2)冗余步骤多

虚拟机是完全的操作系统,一些系统级别的操作步骤,每每无法跳过,比如用户登录。

(3)启动慢

启动操作系统须要多久,启动虚拟机就须要多久。
可能要等几分钟,运用程序才能真正运行。

三、Linux 容器

由于虚拟机存在这些缺陷,Linux 发展出了另一种虚拟化技能:Linux 容器(Linux Containers,缩写为 LXC)。

Linux 容器不是仿照一个完全的操作系统,而是对进程进行隔离。
或者说,在正常进程的表面套了一个保护层。
对付容器里面的进程来说,它打仗到的各种资源都是虚拟的,从而实现与底层系统的隔离。

由于容器是进程级别的,比较虚拟机有很多上风。

(1)启动快

容器里面的运用,直接便是底层系统的一个进程,而不是虚拟机内部的进程。
以是,启动容器相称于启动本机的一个进程,而不是启动一个操作系统,速率就快很多。

(2)资源占用少

容器只占用须要的资源,不占用那些没有用到的资源;虚拟机由于是完全的操作系统,不可避免要占用所有资源。
其余,多个容器可以共享资源,虚拟机都是独享资源。

(3)体积小

容器只要包含用到的组件即可,而虚拟机是全体操作系统的打包,以是容器文件比虚拟机文件要小很多。

总之,容器有点像轻量级的虚拟机,能够供应虚拟化的环境,但是本钱开销小得多。

四、Docker 是什么?

Docker 属于 Linux 容器的一种封装,供应大略易用的容器利用接口。
它是目前最盛行的 Linux 容器办理方案。

Docker 将运用程序与该程序的依赖,打包在一个文件里面。
运行这个文件,就会天生一个虚拟容器。
程序在这个虚拟容器里运行,就彷佛在真实的物理机上运行一样。
有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相称大略,用户可以方便地创建和利用容器,把自己的运用放入容器。
容器还可以进行版本管理、复制、分享、修正,就像管理普通的代码一样。

五、Docker 的用场

Docker 的紧张用场,目前有三大类。

(1)供应一次性的环境。
比如,本地测试他人的软件、持续集成的时候供应单元测试和构建的环境。

(2)供应弹性的云做事。
由于 Docker 容器可以随开随关,很适宜动态扩容和缩容。

(3)组建微做事架构。
通过多个容器,一台机器可以跑多个做事,因此在本机就可以仿照出微做事架构。

六、Docker 的安装

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
企业版包含了一些收费做事,个人开拓者一样平常用不到。
下面的先容都针对社区版。

Docker CE 的安装请参考官方文档。

Mac

Windows

Ubuntu

Debian

CentOS

Fedora

其他 Linux 发行版

安装完成后,运行下面的命令,验证是否安装成功。

$ docker version# 或者$ docker info

Docker 须要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组。

$ sudo usermod -aG docker $USER

Docker 是做事器----客户端架构。
命令走运行docker命令的时候,须要本机有 Docker 做事。
如果这项做事没有启动,可以用下面的命令启动。

# service 命令的用法$ sudo service docker start# systemctl 命令的用法$ sudo systemctl start docker

六、image 文件

Docker 把运用程序及其依赖,打包在 image 文件里面。
只有通过这个文件,才能天生 Docker 容器。
image 文件可以看作是容器的模板。
Docker 根据 image 文件天生容器的实例。
同一个 image 文件,可以天生多个同时运行的容器实例。

image 是二进制文件。
实际开拓中,一个 image 文件每每通过继续另一个 image 文件,加上一些个性化设置而天生。
举例来说,你可以在 Ubuntu 的 image 根本上,往里面加入 Apache 做事器,形成你的 image。

# 列出本机的所有 image 文件。
$ docker image ls# 删除 image 文件$ docker image rm [imageName]

image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,还是可以利用。
一样平常来说,为了节省韶光,我们该当只管即便利用别人制作好的 image 文件,而不是自己制作。
纵然要定制,也该当基于别人的 image 文件进行加工,而不是从零开始制作。

为了方便共享,image 文件制作完成后,可以上传到网上的仓库。
Docker 的官方仓库 Docker Hub 是最主要、最常用的 image 仓库。
此外,***自己制作的 image 文件也是可以的。

七、实例:hello world

下面,我们通过最大略的 image 文件"hello world",感想熏染一下 Docker。

首先,运行下面的命令,将 image 文件从仓库抓取到本地。

$ docker image pull library/hello-world

上面代码中,docker image pull是抓取 image 文件的命令。
library/hello-world是 image 文件在仓库里面的位置,个中library是 image 文件所在的组,hello-world是 image 文件的名字。

由于 Docker 官方供应的 image 文件,都放在library组里面,以是它的是默认组,可以省略。
因此,上面的命令可以写成下面这样。

$ docker image pull hello-world

抓取成功往后,就可以在本机看到这个 image 文件了。

$ docker image ls

现在,运行这个 image 文件。

$ docker container run hello-world

docker container run命令会从 image 文件,天生一个正在运行的容器实例。

把稳,docker container run命令具有自动抓取 image 文件的功能。
如果创造本地没有指定的 image 文件,就会从仓库自动抓取。
因此,前面的docker image pull命令并不是必需的步骤。

如果运行成功,你会在屏幕上读到下面的输出。

$ docker container run hello-worldHello from Docker!This message shows that your installation appears to be working correctly.... ...

输出这段提示往后,hello world就会停滞运行,容器自动终止。

有些容器不会自动终止,由于供应的是做事。
比如,安装运行 Ubuntu 的 image,就可以在命令行体验 Ubuntu 系统。

$ docker container run -it ubuntu bash

对付那些不会自动终止的容器,必须利用docker container kill 命令手动终止。

$ docker container kill [containID]

八、容器文件

image 文件天生的容器实例,本身也是一个文件,称为容器文件。
也便是说,一旦容器天生,就会同时存在两个文件:image 文件和容器文件。
而且关闭容器并不会删除容器文件,只是容器停滞运行而已。

# 列出本机正在运行的容器$ docker container ls# 列出本机所有容器,包括终止运行的容器$ docker container ls --all

上面命令的输出结果之中,包括容器的 ID。
很多地方都须要供应这个 ID,比如上一节终止容器运行的docker container kill命令。

终止运行的容器文件,依然会霸占硬盘空间,可以利用docker container rm命令删除。

$ docker container rm [containerID]

运行上面的命令之后,再利用docker container ls --all命令,就会创造被删除的容器文件已经消逝了。

九、Dockerfile 文件

学会利用 image 文件往后,接下来的问题便是,如何可以天生 image 文件?如果你要推广自己的软件,势必要自己制作 image 文件。

这就须要用到 Dockerfile 文件。
它是一个文本文件,用来配置 image。
Docker 根据 该文件天生二进制的 image 文件。

下面通过一个实例,演示如何编写 Dockerfile 文件。

十、实例:制作自己的 Docker 容器

下面我以 koa-demos 项目为例,先容怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 Koa 框架。

作为准备事情,请先下载源码。

$ git clone https://github.com/ruanyf/koa-demos.git$ cd koa-demos

编写 Dockerfile 文件

首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容。

.gitnode_modulesnpm-debug.log

上面代码表示,这三个路径要打消,不要打包进入 image 文件。
如果你没有路径要打消,这个文件可以不新建。

然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容。

FROM node:8.4COPY . /appWORKDIR /appRUN npm install --registry=https://registry.npm.taobao.orgEXPOSE 3000

上面代码一共五行,含义如下。

FROM node:8.4:该 image 文件继续官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。

COPY . /app:将当前目录下的所有文件(除了.dockerignore打消的路径),都拷贝进入 image 文件的/app目录。

WORKDIR /app:指定接下来的事情路径为/app。

RUN npm install:在/app目录下,运行npm install命令安装依赖。
把稳,安装后所有的依赖,都将打包进入 image 文件。

EXPOSE 3000:将容器 3000 端口暴露出来, 许可外部连接这个端口。

创建 image 文件

有了 Dockerfile 文件往后,就可以利用docker image build命令创建 image 文件了。

$ docker image build -t koa-demo .# 或者$ docker image build -t koa-demo:0.0.1 .

上面代码中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。
如果不指定,默认的标签便是latest。
末了的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。

如果运行成功,就可以看到新天生的 image 文件koa-demo了。

$ docker image ls

天生容器

docker container run命令会从 image 文件天生容器。

$ docker container run -p 8000:3000 -it koa-demo /bin/bash# 或者$ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash

上面命令的各个参数含义如下:

-p参数:容器的 3000 端口映射到本机的 8000 端口。

-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。

koa-demo:0.0.1:image 文件的名字(如果有标签,还须要供应标签,默认是 latest 标签)。

/bin/bash:容器启动往后,内部第一个实行的命令。
这里是启动 Bash,担保用户可以利用 Shell。

如果统统正常,运行上面的命令往后,就会返回一个命令行提示符。

root@66d80f4aaf1e:/app#

这表示你已经在容器里面了,返回的提示符便是容器内部的 Shell 提示符。
实行下面的命令。

root@66d80f4aaf1e:/app# node demos/01.js

这时,Koa 框架已经运行起来了。
打开本机的浏览器,访问 http://127.0.0.1:8000,网页显示"Not Found",这是由于这个 demo 没有写路由。

这个例子中,Node 进程运行在 Docker 容器的虚拟环境里面,进程打仗到的文件系统和网络接口都是虚拟的,与本机的文件系统和网络接口是隔离的,因此须要定义容器与物理机的端口映射(map)。

现在,在容器的命令行,按下 Ctrl + c 停滞 Node 进程,然后按下 Ctrl + d (或者输入 exit)退出容器。
此外,也可以用docker container kill终止容器运行。

# 在本机的另一个终端窗口,查出容器的 ID$ docker container ls# 停滞指定的容器运行$ docker container kill [containerID]

容器停滞运行之后,并不会消逝,用下面的命令删除容器文件。

# 查出容器的 ID$ docker container ls --all# 删除指定的容器文件$ docker container rm [containerID]

也可以利用docker container run命令的--rm参数,在容器终止运行后自动删除容器文件。

$ docker container run --rm -p 8000:3000 -it koa-demo /bin/bash

CMD 命令

上一节的例子里面,容器启动往后,须要手动输入命令node demos/01.js。
我们可以把这个命令写在 Dockerfile 里面,这样容器启动往后,这个命令就已经实行了,不用再手动输入了。

FROM node:8.4COPY . /appWORKDIR /appRUN npm install --registry=https://registry.npm.taobao.orgEXPOSE 3000CMD node demos/01.js

上面的 Dockerfile 里面,多了末了一行CMD node demos/01.js,它表示容器启动后自动实行node demos/01.js。

你可能会问,RUN命令与CMD命令的差异在哪里?大略说,RUN命令在 image 文件的构建阶段实行,实行结果都会打包进入 image 文件;CMD命令则是在容器启动后实行。
其余,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。

把稳,指定了CMD命令往后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。
现在,启动容器可以利用下面的命令。

$ docker container run --rm -p 8000:3000 -it koa-demo:0.0.1

发布 image 文件

容器运行成功后,就确认了 image 文件的有效性。
这时,我们就可以考虑把 image 文件分享到网上,让其他人利用。

首先,去 hub.docker.com 或 cloud.docker.com 注册一个账户。
然后,用下面的命令登录。

$ docker login

接着,为本地的 image 标注用户名和版本。

$ docker image tag [imageName] [username]/[repository]:[tag]# 实例$ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1

也可以不标注用户名,重新构建一下 image 文件。

$ docker image build -t [username]/[repository]:[tag] .

末了,发布 image 文件。

$ docker image push [username]/[repository]:[tag]

发布成功往后,登录 hub.docker.com,就可以看到已经发布的 image 文件。

十一、其他有用的命令

docker 的紧张用法便是上面这些,此外还有几个命令,也非常有用。

(1)docker container start

前面的docker container run命令是新建容器,每运行一次,就会新建一个容器。
同样的命令运行两次,就会天生两个千篇一律的容器文件。
如果希望重复利用容器,就要利用docker container start命令,它用来启动已经天生、已经停滞运行的容器文件。

$ docker container start [containerID]

(2)docker container stop

前面的docker container kill命令终止容器运行,相称于向容器里面的主进程发出 SIGKILL 旗子暗记。
而docker container stop命令也是用来终止容器运行,相称于向容器里面的主进程发出 SIGTERM 旗子暗记,然后过一段韶光再发出 SIGKILL 旗子暗记。

$ docker container stop [containerID]

这两个旗子暗记的差别是,运用程序收到 SIGTERM 旗子暗记往后,可以自行进行扫尾清理事情,但也可以不理会这个旗子暗记。
如果收到 SIGKILL 旗子暗记,就会强行立即终止,那些正在进行中的操作会全部丢失。

(3)docker container logs

docker container logs命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。
如果docker run命令运行容器的时候,没有利用-it参数,就要用这个命令查看输出。

$ docker container logs [containerID]

(4)docker container exec

docker container exec命令用于进入一个正在运行的 docker 容器。
如果docker run命令运行容器的时候,没有利用-it参数,就要用这个命令进入容器。
一旦进入了容器,就可以在容器的 Shell 实行命令了。

$ docker container exec -it [containerID] /bin/bash

(5)docker container cp

docker container cp命令用于从正在运行的 Docker 容器里面,将文件拷贝到本机。
下面是拷贝到当前目录的写法。

$ docker container cp [containID]:[/path/to/file] .

Docker 是一个容器工具,供应虚拟环境。
很多人认为,它改变了我们对软件的认识。

站在 Docker 的角度,软件便是容器的组合:业务逻辑容器、数据库容器、储存容器、行列步队容器......Docker 使得软件可以拆分成多少个标准化容器,然后像搭积木一样组合起来。

这正是微做事(microservices)的思想:软件把任务外包出去,让各种外部做事完成这些任务,软件本身只是底层做事的调度中央和组装层。

微做事很适宜用 Docker 容器实现,每个容器承载一个做事。
一台打算机同时运行多个容器,从而就能很轻松地仿照出繁芜的微做事架构。

下面我们先容一下如何在一台打算机上实现多个做事,让它们相互合营,组合出一个运用程序。

我选择的示例软件是 WordPress。
它是一个常用软件,全天下用户听说超过几千万。
同时它又非常大略,只要两个容器就够了(业务容器 + 数据库容器),很适宜传授教化。
而且,这种"业务 + 数据库"的容器架构,具有通用性,许多运用程序都可以复用。

为了加深读者理解,本文采取三种方法,演示如何架设 WordPress 网站。

方法 A:自建 WordPress 容器

方法 B:采取官方的 WordPress 容器

方法 C:采取 Docker Compose 工具

十二、预备事情:image 仓库的镜像网址

本教程须要从仓库下载 image 文件,但是海内访问 Docker 的官方仓库很慢,还常常断线,以是要把仓库网址改成海内的镜像站。
这里推举利用官方镜像 registry.docker-cn.com 。
下面是我的 Debian 系统的默认仓库修正方法,其他系统的修正方法参考官方文档。

打开/etc/default/docker文件(须要sudo权限),在文件的底部加上一行。

DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"

然后,重启 Docker 做事。

$ sudo service docker restart

现在就会自动从镜像仓库下载 image 文件了。

十三、方法 A:自建 WordPress 容器

前面说过,本文会用三种方法演示 WordPress 的安装。
第一种方法便是自建 WordPress 容器。

官方 的 PHP image

首先,新建一个事情目录,并进入该目录。

$ mkdir docker-demo && cd docker-demo

然后,实行下面的命令。

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

上面的命令基于php的 image 文件新建一个容器,并且运行该容器。
php的标签是5.6-apache,解释装的是 PHP 5.6,并且自带 Apache 做事器。
该命令的三个参数含义如下。

--rm:停滞运行后,自动删除容器文件。

--name wordpress:容器的名字叫做wordpress。

--volume "$PWD/":/var/www/html:将当前目录($PWD)映射到容器的/var/www/html(Apache 对外访问的默认目录)。
因此,当前目录的任何修正,都会反响到容器里面,进而被外部访问到。

运行上面的命令往后,如果统统正常,命令行会提示容器对外的 IP 地址,请记下这个地址,我们要用它来访问容器。
我分配到的 IP 地址是 172.17.0.2。

打开浏览器,访问 172.17.0.2,你会看到下面的提示。

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

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

请在本机的docker-demo目录下面,添加一个最大略的 PHP 文件index.php。

<?php phpinfo();?>

保存往后,浏览器刷新172.17.0.2,该当就会看到熟习的phpinfo页面了。

拷贝 WordPress 安装包

既然本地的docker-demo目录可以映射到容器里面,那么把 WordPress 安装包拷贝到docker-demo目录下,不就可以通过容器访问到 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://172.17.0.2/wordpress,就能看到 WordPress 的安装提示了。

官方的 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 会根据该变量创建一个同名数据库(本例是WordPress)。

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

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

$ docker container ls

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

$ docker container logs wordpressdb

定制 PHP 容器

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

首先,停掉 WordPress 容器。

$ docker container stop wordpress

停掉往后,由于--rm参数的浸染,该容器文件会被自动删除。

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

FROM php:5.6-apacheRUN docker-php-ext-install mysqliCMD apache2-foreground

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

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

$ docker build -t phpwithmysql .

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://172.17.0.2/wordpress页面,点击"现在就开始!
"按钮,开始安装。

WordPress 提示要输入数据库参数。
输入的参数如下。

数据库名:wordpress

用户名:root

密码:123456

数据库主机:mysql

表前缀:wp_(不变)

点击"下一步"按钮,如果 Wordpress 连接数据库成功,就会涌现下面的页面,这就表示可以安装了。

至此,自建 WordPress 容器的演示完毕,可以把正在运行的两个容器关闭了(容器文件会自动删除)。

$ docker container stop wordpress wordpressdb

十四、方法 B: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_DB_PASSWORD是 MySQL 容器的根密码。

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

$ docker container inspect wordpress

上面命令运行往后,会输出很多内容,找到IPAddress字段即可。
我的机器返回的 IP 地址是172.17.0.3。

浏览器访问172.17.0.3,就会看到 WordPress 的安装提示。

WordPress 容器的定制

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

每次新建容器,返回的 IP 地址不能担保相同,导致要改换 IP 地址访问 WordPress。

WordPress 安装在容器里面,本地无法修正文件。

办理这两个问题很随意马虎,只要新建容器的时候,加两个命令行参数就可以了。

先把刚才启动的 WordPress 容器终止(容器文件会自动删除)。

$ docker container stop 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.2的8080端口。

--volume "$PWD/wordpress":/var/www/html:将容器的/var/www/html目录映射到当前目录的wordpress子目录。

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

末了,终止这两个容器(容器文件会自动删除)。

$ docker container stop wordpress wordpressdb

十五、方法 C:Docker Compose 工具

上面的方法 B 已经挺大略了,但是必须自己分别启动两个容器,启动的时候,还要在命令行供应容器之间的连接信息。
因此,Docker 供应了一种更大略的方法,来管理多个容器的联动。

Docker Compose 简介

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

# 启动所有做事$ docker-compose up# 关闭所有做事$ docker-compose stop

Docker Compose 的安装

Mac 和 Windows 在安装 docker 的时候,会一起安装 docker compose。
Linux 系统下的安装参考官方文档。

安装完成后,运行下面的命令。

$ docker-compose --version

WordPress 示例

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

mysql:image: mysql:5.7environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpressweb: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

标签:

相关文章

QQ聊天恶搞代码技术背后的趣味与风险

人们的生活越来越离不开社交软件。在我国,QQ作为一款历史悠久、用户众多的社交平台,深受广大网民喜爱。在QQ聊天的过程中,恶搞代码的...

SEO优化 2025-03-02 阅读1 评论0

Python代码截屏技术与应用的完美融合

计算机屏幕截图已经成为人们日常生活中不可或缺的一部分。无论是分享工作成果、记录游戏瞬间,还是保存网页信息,屏幕截图都发挥着重要作用...

SEO优化 2025-03-02 阅读1 评论0

QQ无限刷礼物代码技术突破还是道德沦丧

社交平台逐渐成为人们生活中不可或缺的一部分。QQ作为我国最具影响力的社交软件之一,其丰富的功能吸引了大量用户。近期有关QQ无限刷礼...

SEO优化 2025-03-02 阅读1 评论0