Dokcer应用部署(搭建Wordpress网站)
实现多个容器之间的协同,搭建Wordpress网站,要用到3个容器,Wordpress、MariaDB和Nginx
拉取镜像
使用docker pull
拉取3个镜像:
$ sudo docker pull wordpress:5
$ sudo docker pull mariadb:10
$ sudo docker pull nginx:alpine
这张图可以描绘网站的架构图:
MariaDB作为网站的关系型数据库,使用3306端口
Wordpress是中间的应用服务器,使用MariaDB来存储数据,使用80端口
Nginx是反向代理,对外暴露80端口,将请求转发给Wordpress
启动MariaDB
先使用如下命令运行MariaDB,须要配置几个环境变量,用--env参数来制定启动时的数据库、用户名和密码
$ sudo docker run -d --rm \
> --env MARIADB_DATABASE=db \
> --env MARIADB_USER=wp \
> --env MARIADB_PASSWORD=123 \
> --env MARIADB_ROOT_PASSWORD=123 \
> mariadb:10
a06fa412c71f18ddc2ed1f982fdc08f93bebe030a46d313d8fd30aa5cb522f6c
启动之后,可以使用docker exec
命令,执行数据库的客户端工具mysql,验证其是否正常运行:
$ sudo docker exec -it 83b mysql -u wp -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.8.3-MariaDB-1:10.8.3+maria~jammy mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| db |
| information_schema |
+--------------------+
2 rows in set (0.001 sec)
MariaDB [(none)]>
如上所示,成功执行了一条语句
查看MariaDB的IP地址:
$ sudo docker inspect 83b | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
启动Wordpress
接下来启动Wordpress,同样要用--env参数来指定一些环境变量:
$ sudo docker run -d --rm \
> --env WORDPRESS_DB_HOST=172.17.0.2 \
> --env WORDPRESS_DB_USER=wp \
> --env WORDPRESS_DB_PASSWORD=123 \
> --env WORDPRESS_DB_NAME=db \
> wordpress:5
1a1cc76293c8224afb8a82d3c6bbfec560f7b4a413d8789de82f95f06df81471
WORDPRESS_DB_HOST
必须是MariaDB的IP地址,否则无法连接到数据库,这里没有为WordPress使用-p映射端口号,之后将部署一个Nginx反向代理,将请求转发给WordPress的端口号,配置Nginx的反向代理必须知道WordPress的IP地址,同样可以用docker inspect
命令查看:
$ sudo docker inspect a47 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
启动Nginx
Wordpress和MariaDB虽然使用了80和3306端口,但被容器隔离,外界不可见,使用Nginx进行端口映射,才能够外界80端口收发数据
在当前宿主机的工作目录下编辑一个Nginx配置文件wp.conf:
server {
listen 80;
default_type text/html;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_pass http://172.17.0.3;
}
}
运行Nginx容器,并进行端口映射和目录挂载:
$ sudo docker run -d --rm \
> -p 80:80 \
> -v `pwd`/wp.conf:/etc/nginx/conf.d/default.conf \
> nginx:alpine
b1847e563c5d05408ff61036eaad20eaf5c57ff1eee74e6d4f6bc4a380bd1fd3
使用docker ps
查看3个进程的情况:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1847e563c5d nginx:alpine "/docker-entrypoint.…" 59 seconds ago Up 58 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp happy_murdock
1a1cc76293c8 wordpress:5 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 80/tcp stoic_ellis
a06fa412c71f mariadb:10 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 3306/tcp heuristic_wiles
浏览器访问80端口,来到了wordpress的安装页面: