Docker学习笔记19

这篇具有很好参考价值的文章主要介绍了Docker学习笔记19。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker Compose 作用:

在一个文件中定义复杂的容器应用之间的关系,用一个命令即可执行。

YAML:类似html、xml、标记语言。

YAML格式文件,资源清单文件

docker compose 命令使用yaml文件来启动容器。

        start & stop

        down & up (关闭删除容器和启动新容器)

docker compose 定义方法:

容器分三层:

        工程project一个目录;

        服务service用于定义容器资源(镜像、网络、依赖、数据卷、端口、容器)

        容器container,用于运行服务

步骤:

1. 创建一个目录(工程名称):

2. 创建一个docker compose.yaml文件,定义服务:

3. 可以docker-compose 命令启动服务:

docker-compose的部署:

curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose


# 检查docker-compose的版本:
dokcer-compose -v

说明:

1)安装的过程中,连接过程中可能会失败,可以多操作几次。

2)老师在视频中讲解的方法在pip install --upgrade pip 升级过程中失败。

使用docker-compose 部署应用案例:

使用haproxy实现web应用发布:

步骤:

第一步:创建一个文件夹(工程),并进入到工程目录:

mkdir docker-haproxy

cd docker-haproxy

第二步:定义web服务:

mkdir web

cd web



定义Dockerfile:

[root@node1 web]# cat Dockerfile
FROM python:2.7
WORKDIR /code
ADD . /code
EXPOSE 80
CMD python index.py

index.py文件:

#!/usr/bin/python
#coding=utf-8

import sys
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
import socket
import fcntl
import struct
import pickle
from datetime import datetime
from collections import OrderedDict

class HandlerClass(SimpleHTTPRequestHandler):
    def get_ip_address(self,ifname):
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        return socket.inet_ntoa(fcntl.ioctl(
            s.fileno(),
            0x8915, # SIOCGIFADDR
            struct.pack('256s', ifname[:15])
        )[20:24])
    def log_message(self, format, *args):
        if len(args) < 3 or "200" not in args[1]:
            return
        try:
            request = pickle.load(open("pickle_data.txt","r"))
        except:
            request=OrderedDict()
        time_now = datetime.now()
        ts = time_now.strftime('%Y-%m-%d %H:%M:%S')
        server = self.get_ip_address('eth0')
        host=self.address_string()
        addr_pair = (host,server)
        if addr_pair not in request:
            request[addr_pair]=[1,ts]
        else:
            num = request[addr_pair][0]+1
            del request[addr_pair]
            request[addr_pair]=[num,ts]
        file=open("index.html", "w")
        file.write("<!DOCTYPE html> <html> <body><center><h1><font color=\"blue\" face=\"Georgia, Arial\" size=8><em>HA</em></font> Webpage Visit Results</h1>
</center>");
        for pair in request:
            if pair[0] == host:
                guest = "LOCAL: "+pair[0]
            else:
                guest = pair[0]
            if (time_now-datetime.strptime(request[pair][1],'%Y-%m-%d
%H:%M:%S')).seconds < 3:
                file.write("<p style=\"font-size:150%\" >#"+ str(request[pair][1]) +":
<font color=\"red\">"+str(request[pair][0])+ "</font> requests " + "from &lt<font
color=\"blue\">"+guest+"</font>&gt to WebServer &lt<font color=\"blue\">"+pair[1]+"
</font>&gt</p>")
            else:
                file.write("<p style=\"font-size:150%\" >#"+ str(request[pair][1]) +":
<font color=\"maroon\">"+str(request[pair][0])+ "</font> requests " + "from &lt<font
color=\"navy\">"+guest+"</font>&gt to WebServer &lt<font color=\"navy\">"+pair[1]+"
</font>&gt</p>")
        file.write("</body> </html>");
        file.close()
        pickle.dump(request,open("pickle_data.txt","w"))

if __name__ == '__main__':
    try:
         ServerClass = BaseHTTPServer.HTTPServer
         Protocol = "HTTP/1.0"
         addr = len(sys.argv) < 2 and "0.0.0.0" or sys.argv[1]
         port = len(sys.argv) < 3 and 80 or int(sys.argv[2])
         HandlerClass.protocol_version = Protocol
         httpd = ServerClass((addr, port), HandlerClass)
         sa = httpd.socket.getsockname()
         print "Serving HTTP on", sa[0], "port", sa[1], "..."
         httpd.serve_forever()
    except:
         exit()

​

 index.html文件为空:

cat index.html

第三步:定义haproxy服务:

mkdir haproxy

cd haproxy

查看haproxy.cfg文件的内容:

global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice

defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms

listen stats
 bind *:70
 stats enable
 stats uri /

frontend balancer
 bind 0.0.0.0:80
 mode http
 default_backend web_backends

backend web_backends
 mode http
 option forwardfor
 balance roundrobin
 server weba weba:80 check
 server webb webb:80 check
 server webc webc:80 check
 option httpchk GET /
 http-check expect status 200

 说明:

1)log 是跟日志相关的

2)defaults:默认配置

3)listen stats:监听状态

4)frontend balancer:前端服务器

5)backend web_backends: 后端服务器

        轮询调度算法:roundrobin:

        check:check检查

说明:那这个haproxy的配置文件需要专门学习。

第四步:把web服务和haproxy整合,通过docker-compose.yaml整合以上服务:

vim docker-compose.yaml


weba:
build: ./web
expose:
  - 80
webb:
build: ./web
expose:
  - 80
webc:
build: ./web
expose:
  - 80
haproxy:
image: haproxy:latest
volumes:
  - ./haproxy:/haproxy-override
  - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
links:
  - weba
  - webb
  - webc
ports:
  - "80:80"
  - "70:70"
expose:
  - "80"
  - "70"

第五步:使用docker-compose 命令启动工程:

[root@node1 docker-haproxy]# pwd
/root/docker-haproxy
[root@node1 docker-haproxy]# docker-compose up
[root@node1 docker-haproxy]# docker-compose up
Starting docker-haproxy_webb_1 ... done
Starting docker-haproxy_webc_1 ... done
Starting docker-haproxy_weba_1 ... done
Starting docker-haproxy_haproxy_1 ... error

ERROR: for docker-haproxy_haproxy_1  Cannot start service haproxy: b'Cannot link to a non running container: /docker-haproxy_weba_1 AS /docker-haproxy_haproxy_1/docker-haproxy_weba_1'

ERROR: for haproxy  Cannot start service haproxy: b'Cannot link to a non running container: /docker-haproxy_weba_1 AS /docker-haproxy_haproxy_1/docker-haproxy_weba_1'
ERROR: Encountered errors while bringing up the project.

在这个过程中下载镜像比较慢。

另外,这里面有个报错,暂时还没能解决。可以先放放。

第六步:访问测试:

总结下,Haproxy,我这边还需要专门练习和掌握这块知识点。

70端口:访问的是haproxy的页面。

80端口:是web页面。

docker-compose down
docker-compose up -d

如果在前端,我们能看到运行的结果和报错。

如果在后端,只会显示容器运行的状态。文章来源地址https://www.toymoban.com/news/detail-527462.html

到了这里,关于Docker学习笔记19的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubantu docker学习笔记(九)容器监控 自带的监控+sysdig+scope+cAdvisor+prometheus

    监控,这一个词对于我们开发人员已经习以为常,我们通过对于内存、IO、CPU等性能的监控去判断当前运行状态的情况,容器作为一个已经打包好的虚拟环境亦是如此,特别是多个容器运行,需要收集docker各容器的运行状态和运行信息,本章将进行容器监控,第三方容器监控

    2024年02月06日
    浏览(57)
  • 【docker笔记】Docker容器数据卷

    卷就是目录或者文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性 卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除是删除其挂载的数据卷

    2024年02月02日
    浏览(43)
  • docker笔记9:Docker-compose容器编排

    目录 1.是什么? 2. 能干嘛? 3.去哪下? 4.安装步骤  ​编辑 5.卸载步骤   6.Compose核心概念  6.1概念 6.2 Compose常用命令   7.Compose编排微服务 7.1改造升级微服务工程docker_boot 7.2不用Compose 7.2.1 单独的mysql容器实例 7.3 swagger测试 7.4上面成功了,有哪些问题? 7.5 使用Compose  7.5.1

    2024年02月09日
    浏览(49)
  • 尚硅谷Docker实战教程-笔记06【Docker容器数据卷】

    尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】 视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】 尚硅谷Docker实战教程-笔记02【安装docker、镜像加速器配置

    2024年02月16日
    浏览(49)
  • Docker笔记 容器的数据卷

    大家好 我是积极向上的湘锅锅💪💪💪 思考: Docker容器删除后,在容器中产生的数据还在吗? 答案是不在了,数据存放在容器中,如果将容器删除,数据也会被一并删除 Docker容器和外部机器可以直接交换文件吗? 答案是不行,因为外部机器与docker内部之间是不互通的,但

    2024年02月15日
    浏览(40)
  • Docker容器常用命令笔记分享

    Docker是一个开源的应用容器引擎,可以让开发者将应用程序及其依赖打包成一个可移植的容器,然后发布到任何支持Docker的机器上,实现应用程序在不同环境中的一致性运行。相比传统的虚拟化技术,Docker具有更轻量级、更快速、更高效的特点。使用Docker可以方便地创建、部

    2024年03月17日
    浏览(50)
  • docker学习:docker容器管理

    Docker 是一种开源的容器化平台,可以帮助开发人员和系统管理员更轻松地创建、部署和运行应用程序。它利用 Linux容器技术,将应用程序及其依赖项打包成一个可移植的容器,以便在不同的环境中运行,从而实现应用程序的快速部署和可移植性。 1、直接拉取别人构建好的官

    2024年02月11日
    浏览(36)
  • docker学习16-Docker 容器设置时区

    最近遇到一个问题,在本机部署操作时,获取本机当前时间存到mysql数据库,时间是当前北京时间没问题。 但是用Docker 容器部署项目,发现时间少了8个小时,于是想到是docker容器的内部时区问题。 docker 容器一般是debian系统,默认是UTC标准时间 或者先删除localtime 再给软链接

    2024年02月13日
    浏览(46)
  • docker快速部署oracle19c、oracle12c,测试环境问题复现demo快速搭建笔记

    (复制sql,替换表名执行完毕后,再修改自己想要的字段即可) (复制sql,替换自己的表名) 一个oracle表示一个实例,一个实例可以配置多个服务,独立维护的oracle服务 一个服务内可以有多个表空间,默认表空间就有很多,比如常见的SYSTEM、TEMP、USERS 常见的默认角色: 1、

    2024年02月04日
    浏览(65)
  • (docker)mysql镜像拉取-创建容器-容器的使用【个人笔记】

    容器的第一次创建,需要先下载镜像,从 0、可以搜索镜像的版本 1、先拉取MySQL的镜像,默认拉取最新版,使用下面的命令拉取mysql镜像 也可以指定mysql的版本(我这里指定的是5.6版本) 2、在~(/root)目录下创建一个mysql的文件夹,用于保存mysql产生的数据,并进入mysql文件 在/

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包