小白学Docker之Compose

承接上篇文章:小白学Docker之基础篇,自学网站来源于https://docs.docker.com/get-started

系列文章:

概念

Compose是一个编排和运行多容器Docker应用的工具,主要是通过一个YAML文件进行服务配置。

使用Compose主要有三步:

  • 在每个应用环境中配置一个Dockerfile,定义单个应用的镜像
  • 使用docker-compose.yml来组装各个应用
  • 运行docker-compose up命令来运行整个应用

一个基本的docker-compose.yml可能长这个样子:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

基本案例

1. 编写web服务器脚本以及依赖

  • 创建示例文件夹
> mkdir composetest
> cd composetest

docker-compose-mkdir

  • 编写服务器脚本
> vim app.py

app.py的内容为:

import time

import redis
from flask import Flask


app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)
  • 创建依赖文件requirements.txt
> vim requirements.txt

内容为:

flask
redis

2. 创建一个Dockerfile,使用python来运行这个脚本

> vim Dockerfile

Dockerfile的内容为:

# 拉取python镜像
FROM python:3.4-alpine

# 拷贝当前目录到/code
ADD . /code

# 设置工作目录
WORKDIR /code

# 使用pip安装依赖
RUN pip install -r requirements.txt

# 启动脚本
CMD ["python", "app.py"]

3. 编写docker-compose.yml来编排应用

> vim docker-compose.yml

内容为:

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

web服务采用本地的Dockerfile进行构建,使用ports进行端口映射;redis服务直接默认从Docker Hub拉取镜像

4. 运行

运行命令docker-compose up来启动整个应用

docker-compose-up

之后在浏览器中输入http://localhost:5000就可以看到下面这句话:

Hello World! I have been seen 1 times.

如果看不到,可以尝试使用http://0.0.0.0:5000

另外如果你使用了Docker Machine开启了一台本地的主机, 你可以是使用docker-machine ip MACHINE_VM来查看你开启的主机的IP,然后使用http://MACHINE_VM_IP:5000在浏览器中打开

另开一个终端,输入如下命令

docker image ls

可以看到整个应用运行的容器

docker-image-ls

停止

CTRL + C

// or

docker-compose down

其他命令

# 后台运行
docker-compose up -d

# 查看当前运行的服务
docker-compose ps

# 单独运行一个服务,例如查看web服务的环境
docker-compose run web env

# 停止服务,如果你是使用的docker-compose up -d开启的服务
docker-compose stop

# 关闭服务并且移除容器,加上--volumes可以同时移除挂载在Redis容器上的目录
docker-compose down --volumes

docker-run-web

结合Swarms构建负载均衡应用(单台主机)

Docker SwarmDocker MachineDocker Compose号称Docker三剑客,SwarmMachine将在之后的章节讲到,这里先做示例

制作一个python镜像并发布

这里的镜像在app.py上面略微改动了一下,具体如下:

from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
           
    # 这里获取hostname,为了区分我们到底请求的是那台机器       
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

Dockerfile如下:

FROM python:2.7-slim
WORKDIR /app
ADD . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME World
CMD ["python", "app.py"]

制作镜像

docker build -t friendlyhello .

docker-build-friend

给镜像打TAG

docker tag friendlyhello rynxiao/get-started:service

发布镜像

> docker login
> docker push rynxiao/get-started:service

发布镜像之前需要在Docker Hub上注册一个账号,打TAG的时候一定要用自己的用户名,否则将会报下面的错误:

PS F:\docker\service> docker push ryn/get-started:service
The push refers to repository [docker.io/ryn/get-started]
7fd8355bf728: Preparing
fc6ecbc8862a: Preparing
88afc3a14faa: Preparing
94b0b6f67798: Preparing
e0c374004259: Preparing
56ee7573ea0f: Waiting
cfce7a8ae632: Waiting
denied: requested access to the resource is denied

push成功之后就可以看到自己上传的镜像了

docker-push

PS: 如果运行不成功,可以暂时用我的镜像

编写docker-compose.yml文件

version: "3"
services:
  web:
    image: rynxiao/get-started:service
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "80:80"
    networks:
      - webnet
networks:
  webnet:

docker-compose.yml主要做了以下几件事:

  • 拉取自己制作的镜像

  • 运行5个web服务的实例,限制每个服务运行10%CPU以及50M内存

  • 失败后自动重启

  • 端口映射

  • 规定web容器以一个叫做webnet的负载均衡网络来共享80端口(好吧,我这里有点晕)

运行APP

docker swarm init

关于swarm,将在后面会讲到,楼主在这里也只是有一个概念。anyway, just follow at first. 总之如果这里不运行这句命令,将会报一个this node is not a swarm manager的错误

运行docker stack deploy来部署服务,首先给应用命名:

docker stack deploy -c docker-compose.yml getstartedlab

这样就在一台主机上运行了一个名叫getstartedlab_web的服务,这个服务包括5个web容器实例(Task),每个实例共享80端口。我们可以查看这个服务:

// service
docker service ls

// tasks
docker service ps getstartedlab_web

docker-stack

之后,我们在浏览器中打开http://localhost,多刷新几次,会看到每次的hostname都有变化,和container id对应

docker-compose-browser

如果你想增加实例数,只需要在docker-compose.yml中修改replicas的数量,然后直接运行docker stack deploy -c docker-compose.yml getstartedlab即可,不需要摧毁stack和容器。

关闭应用和swarm

# Take the app down with docker stack rm:
docker stack rm getstartedlab

# Take down the swarm.
docker swarm leave --force

docker-stack-rm

参考链接

转载于:https://www.cnblogs.com/rynxiao/p/8434275.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习DockerDocker Compose可以帮助您更好地管理和部署容器化应用程序。Docker是一种开源的容器化平台,它可以让开发人员和运维人员更方便地构建、打包和发布应用程序。而Docker Compose是一个用于定义和运行多个容器的工具,它可以使得多个容器之间的协作更加简单和高效。 要学习DockerDocker Compose,您可以按照以下步骤进行: 1. 首先,您需要安装Docker引用。您可以按照Docker官方文档的指南,根据您的操作系统选择正确的安装方法。对于CentOS系统,您可以通过使用以下命令来安装Docker引用: ``` sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io ``` 2. 安装完成后,您可以验证Docker的安装是否成功。运行以下命令来检查Docker版本: ``` docker --version ``` 3. 接下来,您可以学习如何使用Docker来构建和管理容器化应用程序。您可以阅读Docker的官方文档,学习Docker的基本概念、命令和操作。您可以了解如何创建、运行和停止容器,以及如何构建和推送镜像。 4. 一旦您熟悉了Docker的基本操作,您可以继续学习Docker Compose引用。Docker Compose是一个用于定义和运行多个容器的工具。您可以使用一个单独的YAML文件来定义应用程序的多个服务和它们之间的关系。Docker Compose可以帮助您快速地启动、停止和管理多个容器。 5. 对于学习Docker Compose,您可以阅读Docker的官方文档,了解如何编写Docker Compose文件,定义各个服务的配置和依赖关系。您还可以了解如何使用Docker Compose命令来启动、停止和管理多个容器。 总结起来,要学习DockerDocker Compose,您可以按照以下步骤进行: 1. 安装Docker,并验证安装是否成功。 2. 学习Docker的基本操作,包括容器的创建、运行和停止,以及镜像的构建和推送。 3. 学习Docker Compose,了解如何编写Docker Compose文件,定义多个服务的配置和依赖关系。 4. 使用Docker Compose命令来启动、停止和管理多个容器。 希望这些信息对您有所帮助,祝您学习愉快!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [dockerdocker-compose命令学习](https://blog.csdn.net/qq_29277155/article/details/124409801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值