Docker microservices   2019-10-14


Docker Microservices

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

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

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

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

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

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

Docker Microservices

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

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

1. 自建 WordPress Container

方法 A:自建 WordPress Container

1.1 官方 PHP image

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

1.2 拷贝 WordPress 安装包

$ 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

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

查看正在运行的容器

➜ 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是后台运行的,前台看不见它的输出,必须使用下面的命令查看

docker container logs wordpressdb

1.4 定制 PHP Container

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

docker container stop wordpress

Create Dockerfile in docker-demo dir

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

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

docker build -t phpwithmysql .

1.5 WordpresspC 连接 MySQL

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

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

wp

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

➜ docker container stop wordpress wordpressdb

2. Official WordPress Container

方法 B:官方 WordPress Container

2.1 mysql container

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

2.2 wordpress container

➜ 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

➜ 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

➜ docker container stop wordpress wordpressdb

3. Docker Compose Tool

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

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

docker-compose --version

3.1 WordPress example

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

docker-compose up

关闭 2个 Container

docker-compose stop

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

docker-compose rm

Reference


分享到:


  如果您觉得这篇文章对您的学习很有帮助, 请您也分享它, 让它能再次帮助到更多的需要学习的人. 您的支持将鼓励我继续创作 !
本文基于署名4.0国际许可协议发布,转载请保留本文署名和文章链接。 如您有任何授权方面的协商,请邮件联系我。

Contents

  1. 1. 自建 WordPress Container
    1. 1.1 官方 PHP image
    2. 1.2 拷贝 WordPress 安装包
    3. 1.3 官方 MySQL Container
    4. 1.4 定制 PHP Container
    5. 1.5 WordpresspC 连接 MySQL
  2. 2. Official WordPress Container
    1. 2.1 mysql container
    2. 2.2 wordpress container
    3. 2.3 docker container ls
    4. 2.4 stop containers
  3. 3. Docker Compose Tool
    1. 3.1 WordPress example
  4. Reference