抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >
Docker Microservices
Docker Microservices

站在 Docker 的角度,Software is the combination of Containers

  1. 业务逻辑容器
  2. 数据库容器
  3. 储存容器

Docker 使得软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来。

这正是微服务(microservices)的思想:

软件把任务外包出去,让各种外部服务完成这些任务,软件本身只是底层服务的调度中心和组装层。

如何在一台计算机上实现多个 Services,让它们互相配合,组合出一个 Application:

Docker Microservices
Docker Microservices

为了加深理解,采用三种方法,演示如何架设 WordPress 网站

方法 A:自建 WordPress 容器
方法 B:采用官方的 WordPress 容器
方法 C:采用 Docker Compose 工具

1. 自建 WordPress Container

方法 A:自建 WordPress Container

1.1 官方 PHP image

1
2
3
4
5
6
docker container run \
-p 8080:80 \
-it \
--rm \
--name wordpress \
--volume "$PWD/":/var/www/html php:5.6-apache

1.2 拷贝 WordPress 安装包

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

1.3 官方 MySQL Container

1
2
3
4
5
6
7
docker container run \
-d \
--rm \
--name wordpressdb \
--env MYSQL_ROOT_PASSWORD=123456 \
--env MYSQL_DATABASE=wordpress \
mysql:5.7

查看正在运行的容器

1
2
3
4
5
6
➜ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
228857116d2d mysql:5.7 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 3306/tcp, 33060/tcp wordpressdb
a4c7f3d045a3 php:5.6-apache "docker-php-entrypoi…" 23 minutes ago Up 23 minutes 0.0.0.0:8080->80/tcp wordpress
(anaconda3) (base)

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

1
docker container logs wordpressdb

1.4 定制 PHP Container

PHP 的官方 image 不带有mysql扩展,必须自己新建 image 文件

1
docker container stop wordpress

Create Dockerfile in docker-demo dir

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

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

1
docker build -t phpwithmysql .

1.5 WordpresspC 连接 MySQL

1
2
3
4
5
6
docker container run \
--rm \
--name wordpress \
--volume "$PWD/":/var/www/html \
--link wordpressdb:mysql \
phpwithmysql

WordPressC 要连到 wordpressdbC,冒号表示该 Container 的别名是 mysql .

wp
wp

看到以上界面,自建WPC 演示完毕。 关闭 Containers。

1
➜ docker container stop wordpress wordpressdb

2. Official WordPress Container

方法 B:官方 WordPress Container

2.1 mysql container

1
2
3
4
5
6
7
docker container run \
-d \
--rm \
--name wordpressdb \
--env MYSQL_ROOT_PASSWORD=123456 \
--env MYSQL_DATABASE=wordpress \
mysql:5.7

2.2 wordpress container

1
2
3
4
5
6
7
8
➜ docker container run \
-p 8080:80 \
-d \
--rm \
--name wordpress \
--env WORDPRESS_DB_PASSWORD=123456 \
--link wordpressdb:mysql \
wordpress

-p 127.0.0.1:8080:80:将容器的 80 端口 映射到 127.0.0.2 的 8080 端口

—volume “$PWD/wordpress”:/var/www/html:将容器的/var/www/html目录映射到当前目录的wordpress子目录

2.3 docker container ls

1
2
3
4
5
➜ docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99e93c4dfc7c wordpress "docker-entrypoint.s…" 2 seconds ago Up 1 second 80/tcp wordpress
373fcc5e1b94 mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp wordpressdb
(anaconda3) (base)

浏览器 http://localhost:8080 就能看到 WordPress 的安装提示.

2.4 stop containers

1
➜ docker container stop wordpress wordpressdb

3. Docker Compose Tool

Compose 一个工具软件, 可以管理多个 Docker 容器组成一个应用.

定义 docker-compose.yml,写好多容器的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器.

1
docker-compose --version

3.1 WordPress example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=wordpress
web:
image: wordpress
links:
- mysql
environment:
- WORDPRESS_DB_PASSWORD=123456
ports:
- "127.0.0.3:8080:80"
working_dir: /var/www/html
volumes:
- wordpress:/var/www/html

启动 2个 Container

1
docker-compose up

关闭 2个 Container

1
docker-compose stop

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

1
docker-compose rm

Reference