docker nginx部署web应用_通读深入浅出Docker ——使用Docker Compose部署应用

多数的现在应用通过多个更小的服务互相协同来组成一个完整可用的应用。比如一个简单的示例应用可能由如下4个服务组成。

1. web前端。

2. 订单管理。

3. 品类管理。

4. 后台数据库。

部署和管理繁多的服务是困难的,这正是Docker Compose要解决的问题。

安装docker-compose很简单,在ubuntu上用这条命令就好。

sudo apt install docker-compose

Docker Compose使用YAML文件来定义多服务应用。Docker Compose默认使用文件名为docker-compose.yml,当然用户也可以使用-f参数指定具体文件。

示例简介

接下来讲一个Compose文件的示例,它定义了一个包含两个服务(web-fe和redis)的小型Flask应用。这是一个能够对访问者进行计数并将其保存到Redis的简单的Web服务。本例中将其命名为counter-app,并将其作为后续内容的示例应用程序。

先看下其docker-compose.yml的内容

91938561cbd0163969d07f840bb3818a.png

可以看到它包含4个一级key:version、services、networks、volumes。

version是必须指定的,而且总是位于文件的第一行。它定义了Compose文件格式的版本。

services用于定义不同的应用服务。这里定义了两个服务,一个名为web-fe的Web前端服务以及一个名为redis的内存数据库服务。Docker Compose会将每个服务部署在各自的容器中。

networks用于指引Docker创建新的网络。默认情况下,Docker Compose会创建bridge网络。这是一种单主机网络,只能够实现同一主机上容器的连接。

volumes用于指引Docker来创建新的卷。

很明显services是其中最关键的key,本例中定义了两个服务,下面单独分析下。

services:

  web-fe:

#二级key,定义web-fe服务

    build: .

#指定Docker基于当前目录下的Dockerfile中定义的指令来构建一个新镜像。该镜像会被用于启动该服务的容器。

    command: python app.py

#指定Docker在容器中执行名为app.py的Python脚本作为主程序。

    ports:

#指定Docker将容器内(-target)的5000端口映射到主机(published)的5000端口。

      - target: 5000

        published: 5000

    networks:

#使得Docker可以将服务连接到指定网络上,这里用了networks一级key中定义的网络。

      - counter-net

    volumes:

#指定Docker将counter-vol卷(source:)挂载到容器内的/code(target:)。counter-vol卷应该是已存在的,或者是在文件下方的volumes一级key中定义的。

      - type: volume

        source: counter-vol

        target: /code

  redis:

    image: "redis:alpine"

基于redis:alpine镜像启动一个独立的名为redis的容器。这个镜像会被从Docker Hub上拉取下来。

    networks:

      counter-net:

Dockerfile文件用于创建上面提到的web-fe镜像, 从其内容可以看到,它先下载python:3.4-alpine基础镜像,然后将app复制到镜像中,把code目录设置为工作目录,安装依赖,最后设置app.py为默认启动命令。

b97e47b90fb86f15585513bb70ceee3d.png

app.py 是真正运行的应用程序,它使用了名为flask的web微框架。

5b0f8d8349e374c58951c0ccf2381c1e.png

示例启动

之后执行docker-compose up &将应用启动起来。

然后用docker image ls可以看到在部署过程中构建或拉取的3个镜像。

REPOSITORY                TAG               

counterappmaster_web-fe   latest              

redis                     alpine              

python                    3.4-alpine         

772ac9622c34ce9a68562b8cccd814fb.png

再用docker container ls看到两个容器。

c59b6cc61069db0133a280d293c3fc4e.png

counterappmaster_web-fe 容器中运行的是应用的web前端。其执行的是app.py。

下面两个命令可以看到名为counterappmaster_counter-net的网络和名为counterappmaster_counter-vol的卷。

43367d05bcc118f10f87fa61e86bb3fe.png

应用部署成功以后,可以用IE访问主机的5000端口查看运行效果。

4434d41041e996aa40194be5a670636d.png

单机浏览器的刷新按钮,访问计数会增加。

52f38d32c597f53ed1656618fc5ad2cd.png

同时终端窗口会有相应日志打印。

d4093481d53f897f717a812f4efa5386.png

示例停止

docker-compose down命令可以停止应用。

32a4dff0e23625a901088dbe78288d4c.png

打印中的第1、2行开始尝试关闭两个服务。

由3~7行可知,stop指令会发送SIGTERM信号。信号会被发送到每个容器PID为1的进程。然后可以看到redis容器自行关闭。

随后web-fe服务也被成功停止。随后可以看到已经停止的服务和网络都被删除。

但是名为counterappmaster_counter-vol的卷并不会被删除,因为卷是用于数据的长期持久化存储的。因此卷的生命周期与相应的容器是完全解耦的。

8e2f468bb2e2aa224cf830374427b925.png

其他几个有用的命令

docker-compose up -d 

后台启动应用

docker-compose ps

查看应用的状态

docker-compose top

列出各个容器内运行的进程,其中的PID编号是在Docker主机上的进程ID

docker-compose stop

停止应用,但不会删除资源

docker-compose restart

重新启动应用

这几条命令的效果如下

cb3f84e12d950c828187e1db54232c8a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值