美文网首页
Centos下的纯命令记录Docker学习(8)-docker

Centos下的纯命令记录Docker学习(8)-docker

作者: 小钟钟同学 | 来源:发表于2020-11-05 14:30 被阅读0次

    作用

    docker compose 是基于python开发的,用于Docker的服务编排工具,在构建基于Docker的复杂应用的时候通过Compose编写docker-compose.yml一个配置文件来管理多个Docker容器,或对容器集群的管理和编排,非常适合组合使用多个容器进行开发的场景。

    Dockerfile 用来构建 Docker 镜像,那么 docker-compose 则是用来创建容器。 docker-compose一般是主要用于我们在构建 Docker Run 的一些了的命令封装执行等的问题。

    作用示例说明

    通常我们的一个完整的项目其实是需要整合几个服务的节点包括App服务,数据库服务,还有缓存服务等,我们再进行项目初期的开发的时候,我们为了开发环境的方便的测试,其实可以编排好我们的服务节点,把所有的服务都整合到一个容器内运行,这样也方便我们的开发环境的迁移和构建,不需要话费太多的时间再环境的搭建上。
    当然线上生产环境,肯定是不推荐这么搞得,毕竟,本身Docker存在的目的就是为了服务独立和环境隔离!

    测试环境搭建:


    image.png

    线上环境的话肯定都是独立的容器

    image.png

    安装

    1下载安装:
    
    [root@localhost ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   423  100   423    0     0    221      0  0:00:01  0:00:01 --:--:--   221
    100 15.4M  100 15.4M    0     0  4427k      0  0:00:03  0:00:03 --:--:-- 10.0M
    
    2:给权限
    [root@localhost ~]# chmod +x /usr/local/bin/docker-compose
    
    可以给软件接
    创建软链:
     [root@localhost ~]#  ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
    
    3:查看版本信息
    [root@localhost ~]# docker-compose version
    docker-compose version 1.24.0, build 0aa59064
    docker-py version: 3.7.2
    CPython version: 3.6.8
    OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018
    
    
    [root@localhost ~]# docker-compose -v
    docker-compose version 1.24.0, build 0aa59064
    [root@localhost ~]#
    
    
    
    

    实践1

    扩展使用docker-compose.yml来部署运行Flaskweb

    上一节:https://www.jianshu.com/p/5fa896ac3add
    基于上节的Flaskweb部署的情况下我们的使用docker-compose.yml来进行更优雅的部署。

    步骤

    • 1)进入到我们的宿主节点的上传的目录环境下,创建和编写docker-compose.yaml文件(记得同步到我们的虚拟机里面)
    image.png

    查看已有的镜像

    
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    flask_web_stj       latest              1410b6bc6d9d        21 hours ago        913MB
    newmynginx          latest              cd903b9a327f        24 hours ago        146MB
    python              3.6                 1297140c6dd2        33 hours ago        874MB
    tomcat              latest              891fcd9c5b3a        3 weeks ago         647MB
    nginx               latest              f35646e83998        3 weeks ago         133MB
    redis               4.0.14              191c4017dcdd        6 months ago        89.3MB
    hell02              latest              bf756fb1ae65        10 months ago       13.3kB
    centos              centos7.1.1503      e1430271e2f9        20 months ago       212MB
    ubuntu              15.10               9b9cb95443b5        4 years ago         137MB
    [root@localhost ~]#
    
    

    查看当前已存在的容器信息

    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
    9b8ca21c49e2        flask_web_stj       "gunicorn main:app -…"   21 hours ago        Exited (0) About an hour ago                       flask02
    4cfef408a947        flask_web_stj       "gunicorn main:app -…"   21 hours ago        Exited (0) About an hour ago                       flask01
    cb252d0bb06e        newmynginx          "/docker-entrypoint.…"   24 hours ago        Exited (0) About an hour ago                       daorunginx
    26c93b36d5e3        f35646e83998        "/docker-entrypoint.…"   24 hours ago        Exited (0) 24 hours ago                            funny_shamir
    8bd4c69fec01        191c4017dcdd        "docker-entrypoint.s…"   25 hours ago        Exited (0) About an hour ago                       myredis
    a90e1eb657cb        nginx               "/docker-entrypoint.…"   28 hours ago        Exited (0) 25 hours ago                            gifted_ride
    27dec980370f        e1430271e2f9        "/bin/bash"              2 days ago          Exited (137) 25 hours ago                          vigorous_varahamihira
    3b8b439a5155        e1430271e2f9        "/bin/bash"              2 days ago          Exited (0) 2 days ago                              thirsty_easley
    0590fcd8ef46        e1430271e2f9        "/bin/bash"              2 days ago          Exited (0) 2 days ago                              amazing_liskov
    60e127550b03        9b9cb95443b5        "/bin/bash"              2 days ago          Exited (0) 2 days ago                              cool_fermi
    ba9eda20f5eb        9b9cb95443b5        "/bin/bash"              2 days ago          Exited (130) 2 days ago                            peaceful_tesla
    c6aa103b9b79        9b9cb95443b5        "/bin/bash"              2 days ago          Exited (127) 2 days ago                            eloquent_kowalevski
    509bd82ac9b4        9b9cb95443b5        "/bin/bash"              2 days ago          Exited (0) 2 days ago                              wonderful_merkle
    6199fa3fd9d1        9b9cb95443b5        "/bin/bash"              2 days ago          Exited (130) 2 days ago                            determined_austin
    d85396b481fe        9b9cb95443b5        "/bin/bash"              2 days ago          Exited (0) 2 days ago                              jolly_hypatia
    7271d413dfee        hell02              "/hello"                 2 weeks ago         Exited (0) 2 weeks ago                             heuristic_kowalevski
    c9374334c848        hell02              "/hello"                 2 weeks ago         Exited (0) 2 weeks ago                             quizzical_euclid
    f1b40b91bb48        ubuntu:15.10        "/bin/sh -c 'while t…"   2 weeks ago         Exited (137) 2 weeks ago                           great_tereshkova
    a2cc1c83603a        ubuntu:15.10        "/bin/bash"              2 weeks ago         Exited (0) 2 weeks ago                             elated_cartwright
    0a22083fa318        ubuntu:15.10        "/bin/bash"              2 weeks ago         Exited (127) 2 weeks ago                           epic_galileo
    e0069b97f043        ubuntu:15.10        "/bin/echo 'Hello wo…"   2 weeks ago         Exited (0) 2 weeks ago                             intelligent_lamport
    209fc9dd3324        bf756fb1ae65        "/hello"                 2 weeks ago         Exited (0) 2 weeks ago                             flamboyant_knuth
    d6087f654d9e        bf756fb1ae65        "/hello"                 2 weeks ago         Exited (0) 2 weeks ago                             practical_wozniak
    [root@localhost ~]#
    
    

    先删除已存在的容器名称或下面使用新的

    • 2)编写docker-compose.yaml内容(文件名称固定)
    version: "3.3"
    services:
        flask_web_stj_01:
            image: flask_web_stj:latest
            build: .
            container_name: flask_new01
            restart: always
            ports:
                - "1245:80"
        flask_web_stj_02:
            image: flask_web_stj:latest
            build: .
              container_name: flask_new02
              restart: always
              ports:
              - "1246:80"
    

    配置文件说明

    version:docker-compose的版本
    services:需要管理的服务
    flask_web_stj_01:FlaskApp服务应用的节点名称
    image:flask_web_stj_01服务来源镜像
    build:如果镜像不存在,当前位置构建镜像。存在则跳过
    container_name:启动的容器名称
    restart:容器启动属性, always一直重启
    ports:端口映射
    
    • 3)上传docker-compose.yaml同步更新到我的虚拟机的项目目录下


      image.png
    • 4)控制台执行命令docker-compose up -d启动容器
      提示错误

    [root@localhost web_statistics]# docker-compose up -d
    ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
      in "./docker-compose.yaml", line 13, column 25
    [root@localhost web_statistics]#
    
    
    image.png

    修改配置

    version: "3.3"
    services:
        flask_web_stj_01:
            image: flask_web_stj:latest
            build: .
            container_name: flask_new01
            restart: always
            ports:
                - "1245:80"
    

    在单纯的运行一个服务没问题!

    [root@localhost web_statistics]# docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED              STATUS              PORTS                  NAMES
    f4221a15a76f        flask_web_stj:latest   "gunicorn main:app -…"   About a minute ago   Up About a minute   0.0.0.0:1245->80/tcp   flask_new01
    [root@localhost web_statistics]#
    停止和删除容器,方便下次的启动
    [root@localhost web_statistics]# docker stop flask_new01
    flask_new01
    [root@localhost web_statistics]# docker rm flask_new01
    flask_new01
    [root@localhost web_statistics]#
    
    

    核对格式问题


    image.png

    修正格式后:


    image.png

    再次的启动

    非后台启动:
    
    
    [root@localhost web_statistics]# docker-compose up
    Starting flask_new01 ... done
    Starting flask_new02 ... done
    Attaching to flask_new02, flask_new01
    flask_new02         | [2020-11-05 06:41:08 +0000] [1] [INFO] Starting gunicorn 20.0.4
    flask_new02         | [2020-11-05 06:41:08 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
    flask_new02         | [2020-11-05 06:41:08 +0000] [1] [INFO] Using worker: gevent
    flask_new02         | [2020-11-05 06:41:08 +0000] [8] [INFO] Booting worker with pid: 8
    flask_new01         | [2020-11-05 06:41:08 +0000] [1] [INFO] Starting gunicorn 20.0.4
    flask_new01         | [2020-11-05 06:41:08 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
    flask_new01         | [2020-11-05 06:41:08 +0000] [1] [INFO] Using worker: gevent
    flask_new01         | [2020-11-05 06:41:08 +0000] [8] [INFO] Booting worker with pid: 8
    flask_new02         | [2020-11-05 06:41:08 +0000] [9] [INFO] Booting worker with pid: 9
    flask_new02         | [2020-11-05 06:41:08 +0000] [10] [INFO] Booting worker with pid: 10
    flask_new01         | [2020-11-05 06:41:08 +0000] [9] [INFO] Booting worker with pid: 9
    flask_new01         | [2020-11-05 06:41:08 +0000] [10] [INFO] Booting worker with pid: 10
    flask_new02         | [2020-11-05 06:41:08 +0000] [11] [INFO] Booting worker with pid: 11
    flask_new02         | [2020-11-05 06:41:08 +0000] [12] [INFO] Booting worker with pid: 12
    flask_new01         | [2020-11-05 06:41:08 +0000] [11] [INFO] Booting worker with pid: 11
    
    
    [root@localhost web_statistics]# docker-compose up -d
    Creating flask_new01 ... done
    Creating flask_new02 ... done
    [root@localhost web_statistics]#
    
    [root@localhost web_statistics]# docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                  NAMES
    e64670bf0546        flask_web_stj:latest   "gunicorn main:app -…"   19 seconds ago      Up 17 seconds       0.0.0.0:1245->80/tcp   flask_new01
    792a8edb7c20        flask_web_stj:latest   "gunicorn main:app -…"   19 seconds ago      Up 18 seconds       0.0.0.0:1246->80/tcp   flask_new02
    [root@localhost web_statistics]#
    和多次执行
    
    [root@localhost web_statistics]# docker-compose up -d
    Starting flask_new01 ... done
    Starting flask_new02 ... done
    [root@localhost web_statistics]# docker-compose up -d
    flask_new01 is up-to-date
    flask_new02 is up-to-date
    [root@localhost web_statistics]#
    
    

    docker-compose 的命令

    [root@localhost web_statistics]#  docker-compose
    Define and run multi-container applications with Docker.
    
    Usage:
      docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
      docker-compose -h|--help
    
    Options:
      -f, --file FILE             Specify an alternate compose file
                                  (default: docker-compose.yml)
      -p, --project-name NAME     Specify an alternate project name
                                  (default: directory name)
      --verbose                   Show more output
      --log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
      --no-ansi                   Do not print ANSI control characters
      -v, --version               Print version and exit
      -H, --host HOST             Daemon socket to connect to
    
      --tls                       Use TLS; implied by --tlsverify
      --tlscacert CA_PATH         Trust certs signed only by this CA
      --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
      --tlskey TLS_KEY_PATH       Path to TLS key file
      --tlsverify                 Use TLS and verify the remote
      --skip-hostname-check       Don't check the daemon's hostname against the
                                  name specified in the client certificate
      --project-directory PATH    Specify an alternate working directory
                                  (default: the path of the Compose file)
      --compatibility             If set, Compose will attempt to convert keys
                                  in v3 files to their non-Swarm equivalent
    
    Commands:
      build              Build or rebuild services
      bundle             Generate a Docker bundle from the Compose file
      config             Validate and view the Compose file
      create             Create services
      down               Stop and remove containers, networks, images, and volumes
      events             Receive real time events from containers
      exec               Execute a command in a running container
      help               Get help on a command
      images             List images
      kill               Kill containers
      logs               View output from containers
      pause              Pause services
      port               Print the public port for a port binding
      ps                 List containers
      pull               Pull service images
      push               Push service images
      restart            Restart services
      rm                 Remove stopped containers
      run                Run a one-off command
      scale              Set number of containers for a service
      start              Start services
      stop               Stop services
      top                Display the running processes
      unpause            Unpause services
      up                 Create and start containers
      version            Show the Docker-Compose version information
    [root@localhost web_statistics]#
    

    扩展学习

    ## 启动服务
    
    ```
    docker-compose -f docker-compose.yml up -d
    
    ```
    
    ## 停止服务
    
    ```
    docker-compose -f docker-compose.yml stop
    
    ```
    
    ## 停止并删除服务
    
    ```
    docker-compose -f docker-compose.yml down
    ```
    
    
    PS:容器的日志的查看
    [root@localhost web_statistics]# docker logs  -f flask_new01 (持续的观察日志的请求)
    或
    [root@localhost web_statistics]# docker logs flask_new01
    [2020-11-05 06:28:17 +0000] [1] [INFO] Starting gunicorn 20.0.4
    [2020-11-05 06:28:17 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
    [2020-11-05 06:28:17 +0000] [1] [INFO] Using worker: gevent
    [2020-11-05 06:28:17 +0000] [8] [INFO] Booting worker with pid: 8
    [2020-11-05 06:28:17 +0000] [9] [INFO] Booting worker with pid: 9
    [2020-11-05 06:28:17 +0000] [10] [INFO] Booting worker with pid: 10
    [2020-11-05 06:28:17 +0000] [11] [INFO] Booting worker with pid: 11
    [2020-11-05 06:28:18 +0000] [12] [INFO] Booting worker with pid: 12
    [2020-11-05 06:40:52 +0000] [1] [INFO] Handling signal: term
    [2020-11-05 06:40:52 +0000] [10] [INFO] Worker exiting (pid: 10)
    [2020-11-05 06:40:52 +0000] [8] [INFO] Worker exiting (pid: 8)
    [2020-11-05 06:40:52 +0000] [9] [INFO] Worker exiting (pid: 9)
    [2020-11-05 06:40:52 +0000] [11] [INFO] Worker exiting (pid: 11)
    [2020-11-05 06:40:52 +0000] [12] [INFO] Worker exiting (pid: 12)
    [2020-11-05 06:40:53 +0000] [1] [INFO] Shutting down: Master
    [2020-11-05 06:41:08 +0000] [1] [INFO] Starting gunicorn 20.0.4
    [2020-11-05 06:41:08 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
    [2020-11-05 06:41:08 +0000] [1] [INFO] Using worker: gevent
    [2020-11-05 06:41:08 +0000] [8] [INFO] Booting worker with pid: 8
    [2020-11-05 06:41:08 +0000] [9] [INFO] Booting worker with pid: 9
    [2020-11-05 06:41:08 +0000] [10] [INFO] Booting worker with pid: 10
    [2020-11-05 06:41:08 +0000] [11] [INFO] Booting worker with pid: 11
    [2020-11-05 06:41:08 +0000] [12] [INFO] Booting worker with pid: 12
    [2020-11-05 06:41:11 +0000] [1] [INFO] Handling signal: term
    [2020-11-05 06:41:12 +0000] [8] [INFO] Worker exiting (pid: 8)
    [2020-11-05 06:41:12 +0000] [10] [INFO] Worker exiting (pid: 10)
    [2020-11-05 06:41:12 +0000] [9] [INFO] Worker exiting (pid: 9)
    [2020-11-05 06:41:12 +0000] [11] [INFO] Worker exiting (pid: 11)
    [2020-11-05 06:41:12 +0000] [12] [INFO] Worker exiting (pid: 12)
    [2020-11-05 06:41:13 +0000] [1] [INFO] Shutting down: Master
    [2020-11-05 06:41:19 +0000] [1] [INFO] Starting gunicorn 20.0.4
    [2020-11-05 06:41:19 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
    [2020-11-05 06:41:19 +0000] [1] [INFO] Using worker: gevent
    [2020-11-05 06:41:19 +0000] [8] [INFO] Booting worker with pid: 8
    [2020-11-05 06:41:19 +0000] [9] [INFO] Booting worker with pid: 9
    [2020-11-05 06:41:19 +0000] [10] [INFO] Booting worker with pid: 10
    [2020-11-05 06:41:19 +0000] [11] [INFO] Booting worker with pid: 11
    [2020-11-05 06:41:19 +0000] [12] [INFO] Booting worker with pid: 12
    [2020-11-05 07:11:04 +0000] [1] [INFO] Handling signal: term
    [2020-11-05 07:11:05 +0000] [8] [INFO] Worker exiting (pid: 8)
    [2020-11-05 07:11:05 +0000] [9] [INFO] Worker exiting (pid: 9)
    [2020-11-05 07:11:05 +0000] [10] [INFO] Worker exiting (pid: 10)
    [2020-11-05 07:11:05 +0000] [11] [INFO] Worker exiting (pid: 11)
    [2020-11-05 07:11:05 +0000] [12] [INFO] Worker exiting (pid: 12)
    [2020-11-05 07:11:06 +0000] [1] [INFO] Shutting down: Master
    [2020-11-05 07:11:28 +0000] [1] [INFO] Starting gunicorn 20.0.4
    [2020-11-05 07:11:28 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
    [2020-11-05 07:11:28 +0000] [1] [INFO] Using worker: gevent
    [2020-11-05 07:11:28 +0000] [8] [INFO] Booting worker with pid: 8
    [2020-11-05 07:11:28 +0000] [9] [INFO] Booting worker with pid: 9
    [2020-11-05 07:11:28 +0000] [11] [INFO] Booting worker with pid: 11
    [2020-11-05 07:11:28 +0000] [10] [INFO] Booting worker with pid: 10
    [2020-11-05 07:11:28 +0000] [12] [INFO] Booting worker with pid: 12
    [root@localhost web_statistics]#
    
    

    实践2:

    完整的搭载nginx+redis+postgersql+flaskapp实践(分开容器)

    番外

    安装完成docker,宿主主机会分配一个docker的网卡,然后docker的网卡通过nat方式转发到不同的容器上。
    不同的容器通信的方式都是基本通过IP+端口之间的相互访问。


    image.png

    要实现相关的容器之间的通信,不需要知悉容器内部的分配的IP信息。

    通过查看Host查看容器的IP信息

    
    [root@localhost web_statistics]# docker run -id nginx
    d61ace7a9ee90a7d47200fe0d079e16bbe3e66a08d5e68ea49cef9a843884431
    [root@localhost web_statistics]# docker exec -it nginx bash
    Error: No such container: nginx
    [root@localhost web_statistics]# docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                  NAMES
    d61ace7a9ee9        nginx                  "/docker-entrypoint.…"   48 seconds ago      Up 47 seconds       80/tcp                 nervous_goldwasser
    e64670bf0546        flask_web_stj:latest   "gunicorn main:app -…"   About an hour ago   Up 46 minutes       0.0.0.0:1245->80/tcp   flask_new01
    792a8edb7c20        flask_web_stj:latest   "gunicorn main:app -…"   About an hour ago   Up 46 minutes       0.0.0.0:1246->80/tcp   flask_new02
    [root@localhost web_statistics]# docker exec -it
    "docker exec" requires at least 2 arguments.
    See 'docker exec --help'.
    
    Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
    Run a command in a running container
    [root@localhost web_statistics]# docker exec -it d61ace7a9ee9
    "docker exec" requires at least 2 arguments.
    See 'docker exec --help'.
    
    Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
    Run a command in a running container
    [root@localhost web_statistics]# docker exec -it d61ace7a9ee9 bash
    root@d61ace7a9ee9:/# cat /etc/hosts
    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.17.0.2      d61ace7a9ee9
    root@d61ace7a9ee9:/#
    
    

    关键信息:

    172.17.0.2      d61ace7a9ee9
    root@d61ace7a9ee9:/#
    

    通信基础之 -- link

    容器和容器的之间的访问,通过再对于的容器HOST内建立对于的映射来进行通信。

    实验

    通过一个centos容器访问一个nginx容器。

      1. 测试运行一个nginx 容器
    [root@localhost ~]# docker run -d -p 80:80 --name ceshinginx nginx
    e3661843c89c1943c33c8fb35f34392b4b3984ca12de4b74f0da77af354f2d5f
    [root@localhost ~]#
    
    
    测试访问:
    
    [root@localhost ~]# curl 127.0.0.1
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    [root@localhost ~]#
    
    
      1. 运行一个centos 容器
    
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    flask_web_stj       latest              1410b6bc6d9d        23 hours ago        913MB
    newmynginx          latest              cd903b9a327f        26 hours ago        146MB
    python              3.6                 1297140c6dd2        35 hours ago        874MB
    tomcat              latest              891fcd9c5b3a        3 weeks ago         647MB
    nginx               latest              f35646e83998        3 weeks ago         133MB
    redis               4.0.14              191c4017dcdd        6 months ago        89.3MB
    hell02              latest              bf756fb1ae65        10 months ago       13.3kB
    centos              centos7.1.1503      e1430271e2f9        20 months ago       212MB
    ubuntu              15.10               9b9cb95443b5        4 years ago         137MB
    [root@localhost ~]# docker run -dit --link ceshinginx:ceshinginx e1430271e2f9
    41197fed636aee9f729e7217298257c906b0a50658db36dd262693648b98b0a5
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                  NAMES
    41197fed636a        e1430271e2f9           "/bin/bash"              28 seconds ago      Up 27 seconds                              sharp_lichterman
    e3661843c89c        nginx                  "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp     ceshinginx
    e64670bf0546        flask_web_stj:latest   "gunicorn main:app -…"   2 hours ago         Up About an hour    0.0.0.0:1245->80/tcp   flask_new01
    792a8edb7c20        flask_web_stj:latest   "gunicorn main:app -…"   2 hours ago         Up About an hour    0.0.0.0:1246->80/tcp   flask_new02
    [root@localhost ~]# docker exec -it 41197fed636a /bin/bash
    
    使用ceshinginx连接的对应的容器
    
    [root@41197fed636a /]# curl http://ceshinginx
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    [root@41197fed636a /]#
    
    
    
    
      1. 查看 ceshinginx 对于映射的域名(-- link )
    
    [root@41197fed636a /]# cat /etc/hosts
    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.17.0.2      ceshinginx e3661843c89c
    172.17.0.3      41197fed636a
    [root@41197fed636a /]#
    
    

    nginx+redis+postgersql+flaskapp实践(分开容器)实践

    说明:


    image.png
    • 1)拉取 postgersql镜像
      1. 拉取 nginx镜像
      1. 拉取redis镜像
    • 4) 制作flaskapp镜像

    分解步骤篇

    一、postgersql 容器的启动

    1:拉取镜像

    
    [root@localhost ~]# docker pull postgres:9.4
    

    2:启动镜像并挂载数据

    [root@localhost ~]# docker run --name web_statistics_pg -v /data/web_statistics/pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:9.4
    993156e83c4bf545b2a1d091903256ec955da33bfce9fe5ae9029e0b9aa77817
    [root@localhost ~]#
    

    PS补充

    对与已经使用docker run --name web_statistics_pg 启动的若的容器的重新启动问题
    The container name "/web_statistics_pg" is already in use by containe
    

    解决方案:

    (1)更改启动容器名字, 比如说 docker run -it --name=mycentos2 centos:7 /bin/bash, 可以解决问题.
    (2)将原来的容器删除
    (3)docker restart 容器ID 或 容器名称 重启该container容器。
    

    3: 测试数据库的链接情况


    image.png

    4: (可选性)查看外部挂载的数据

    [root@localhost ~]# cd /data/web_statistics/pgdata
    [root@localhost pgdata]# ls
    base    pg_clog      pg_hba.conf    pg_logical    pg_notify    pg_serial     pg_stat      pg_subtrans  pg_twophase  pg_xlog               postgresql.conf  postmaster.pid
    global  pg_dynshmem  pg_ident.conf  pg_multixact  pg_replslot  pg_snapshots  pg_stat_tmp  pg_tblspc    PG_VERSION   postgresql.auto.conf  postmaster.opts
    [root@localhost pgdata]#
    
    

    5: 使用nacicat创建数据库

    image.png

    6: 进入容器内查看具体信息(通过简写的ID 993)

    
    [root@localhost pgdata]# docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
    993156e83c4b        postgres:9.4           "docker-entrypoint.s…"   6 days ago          Up 9 minutes        0.0.0.0:5432->5432/tcp   web_statistics_pg
    e64670bf0546        flask_web_stj:latest   "gunicorn main:app -…"   6 days ago          Up 31 minutes       0.0.0.0:1245->80/tcp     flask_new01
    792a8edb7c20        flask_web_stj:latest   "gunicorn main:app -…"   6 days ago          Up 31 minutes       0.0.0.0:1246->80/tcp     flask_new02
    [root@localhost pgdata]# docker exec -it 993 bash
    root@993156e83c4b:/#
    
    
    
    

    7: 链接数据库查看表数据信息

    root@993156e83c4b:/# psql -U postgres
    psql (9.4.26)
    Type "help" for help.
    
    postgres=# \l
                                     List of databases
        Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
    ------------+----------+----------+------------+------------+-----------------------
     postgres   | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
     template0  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
                |          |          |            |            | postgres=CTc/postgres
     template1  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
                |          |          |            |            | postgres=CTc/postgres
     测试数据库 | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
    (4 rows)
    
    postgres=#
    

    补充PostgreSQL场景的进入命令之后的一些操作

    ---------------
    接入PostgreSQL数据库: psql -h IP地址 -p 端口 -U 数据库名
    
    之后会要求输入数据库密码
    
    二、访问数据库
    
    1、列举数据库:\l
    2、选择数据库:\c 数据库名
    3、查看该某个库中的所有表:\dt
    4、切换数据库:\c interface
    5、查看某个库中的某个表结构:\d 表名
    6、查看某个库中某个表的记录:select * from apps limit 1;
    7、显示字符集:\encoding
    8、退出psgl:\q
    
    二、redis 容器的启动

    1:拉取镜像

    
    [root@localhost ~]# docker pull redis:4.0.14 
    [root@localhost pgdata]# docker images
    \REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    flask_web_stj       latest              1410b6bc6d9d        7 days ago          913MB
    newmynginx          latest              cd903b9a327f        7 days ago          146MB
    python              3.6                 1297140c6dd2        8 days ago          874MB
    tomcat              latest              891fcd9c5b3a        4 weeks ago         647MB
    nginx               latest              f35646e83998        4 weeks ago         133MB
    redis               4.0.14              191c4017dcdd        6 months ago        89.3MB
    postgres            9.4                 ed5a45034282        9 months ago        251MB
    

    2:配置对于的redis.conf文件用于挂载同步到容器内部

    
    [root@localhost web_statistics]# ll
    total 32
    -rw-r--r--.  1 root              root   372 Nov  5 14:27 docker-compose.yaml
    -rw-r--r--.  1 root              root   253 Nov  4 16:29 Dockerfile
    -rw-r--r--.  1 root              root   235 Nov  4 16:47 gunicorn.conf.py
    -rw-r--r--.  1 root              root 10502 Nov  4 16:29 main.py
    drwxr-xr-x.  3 root              root   169 Nov  4 16:29 models
    drwx------. 18 systemd-bus-proxy root  4096 Nov 12 10:27 pgdata
    -rw-r--r--.  1 root              root   274 Nov  4 16:29 requirements.txt
    [root@localhost web_statistics]# cd pgdata/
    [root@localhost pgdata]# cd ..
    [root@localhost web_statistics]# touch redis.conf
    [root@localhost web_statistics]# ls
    docker-compose.yaml  Dockerfile  gunicorn.conf.py  main.py  models  pgdata  redis.conf  requirements.txt
    [root@localhost web_statistics]#
    
    

    3:修改redis配置选项主要修改的地方有:
    参考之前的安装:https://www.jianshu.com/p/c450612c6295

    配置远程访问(生产环境请勿开启)
    bind 127.0.0.1 ---->bind 0.0.0.0 
    
    protected-mode no #默认yes,开启保护模式,限制为本地访问
    
    daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
    
    databases 16 #数据库个数(可选)
    
    appendonly yes #redis持久化(可选)
    
    requirepass  密码 #配置redis访问密码
    

    4:创建redis可持久化数据的存放外部目录,用于数据持久化存储:

    
    [root@localhost web_statistics]# mkdir redisdata
    [root@localhost web_statistics]# ll
    total 32
    -rw-r--r--.  1 root              root   372 Nov  5 14:27 docker-compose.yaml
    -rw-r--r--.  1 root              root   253 Nov  4 16:29 Dockerfile
    -rw-r--r--.  1 root              root   235 Nov  4 16:47 gunicorn.conf.py
    -rw-r--r--.  1 root              root 10502 Nov  4 16:29 main.py
    drwxr-xr-x.  3 root              root   169 Nov  4 16:29 models
    drwx------. 18 systemd-bus-proxy root  4096 Nov 12 10:27 pgdata
    -rw-r--r--.  1 root              root     0 Nov 12 10:58 redis.conf
    drwxr-xr-x.  2 root              root     6 Nov 12 10:59 redisdata
    -rw-r--r--.  1 root              root   274 Nov  4 16:29 requirements.txt
    [root@localhost web_statistics]#
    
    
    image.png

    5:启动redis 容器

    docker run -p 6379:6379 --name web_staredis_redis -v /data/web_statistics/redis.conf:/etc/redis/redis.conf -v /data/web_statistics/redisdata:/data -d redis:4.0.14 redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456

    
    [root@localhost web_statistics]# docker run -p 6379:6379 --name web_staredis_redis -v /data/web_statistics/redis.conf:/etc/redis/redis.conf -v /data/web_statistics/redisdata:/data -d redis:4.0.14 redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456
    
    不指定密码的话默认不需要密码--requirepass 123456
    
    

    错误异常:

    [root@localhost web_statistics]# docker run -p 6379:6379 --name web_staredis_redis -v /data/web_statistics/redis.conf:/etc/redis/redis.conf -v /data/web_statistics/redisdata:/data -d redis:4.0.14 redis-server /etc/redis/redis.conf --appendonly yes
    docker: Error response from daemon: Conflict. The container name "/web_staredis_redis" is already in use by container "a6575e591f13d718be79dc860ab61cb1476a06a7bc3a64b5f8bf34e63b3ca844". You have to remove (or rename) that container to be able to reuse that name.
    See 'docker run --help'.
    [root@localhost web_statistics]# docker restart web_staredis_redis
    web_staredis_redis
    [root@localhost web_statistics]# docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
    993156e83c4b        postgres:9.4           "docker-entrypoint.s…"   6 days ago          Up 53 minutes       0.0.0.0:5432->5432/tcp   web_statistics_pg
    e64670bf0546        flask_web_stj:latest   "gunicorn main:app -…"   6 days ago          Up About an hour    0.0.0.0:1245->80/tcp     flask_new01
    792a8edb7c20        flask_web_stj:latest   "gunicorn main:app -…"   6 days ago          Up About an hour    0.0.0.0:1246->80/tcp     flask_new02
    [root@localhost web_statistics]#
    

    发现容器没有启动,需要查看容器的启动的日志信息

    
    [root@localhost ~]# docker logs -f -t --tail 100 web_staredis_redis
    2020-11-12T03:17:34.061055854Z 1:C 12 Nov 03:17:34.052 # Can't chdir to '/usr/local/redis/data': No such file or directory
    2020-11-12T03:20:33.072935555Z 1:C 12 Nov 03:20:33.067 # Can't chdir to '/usr/local/redis/data': No such file or directory
    [root@localhost ~]#
    
    

    提示错误的异常:检测redis.conf的配置文件信息

    
    [root@localhost web_statistics]# docker logs -ft web_staredis_redis
    2020-11-12T04:48:30.753000868Z 1:C 12 Nov 04:48:30.749 # Can't chdir to '/usr/local/redis/data': No such file or directory
    [root@localhost web_statistics]# ^C
    [root@localhost web_statistics]#
    
    image.png

    修改为:

    dir  ./ #输入本地redis数据库存放文件夹(可选)
    

    重新的启动再查看日志:

    
    [root@localhost web_statistics]# docker run -p 6379:6379 --name web_staredis_redis -v /data/web_statistics/redis.conf:/etc/redis/redis.conf -v /data/web_statistics/redisdata:/data -d redis:4.0.14 redis-server /etc/redis/redis.conf --appendonly yes
    895b8d1ed815cf86a49502770fcc64ae19ad4983bab76cea5b6468ff65923b56
    [root@localhost web_statistics]#
    日志内容:
    
    [root@localhost web_statistics]# docker logs -ft web_staredis_redis
    2020-11-12T04:55:23.202270517Z 1:C 12 Nov 04:55:23.199 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    2020-11-12T04:55:23.202290927Z 1:C 12 Nov 04:55:23.199 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=1, just started
    2020-11-12T04:55:23.202294330Z 1:C 12 Nov 04:55:23.199 # Configuration loaded
    2020-11-12T04:55:23.202296738Z 1:M 12 Nov 04:55:23.201 * Running mode=standalone, port=6379.
    2020-11-12T04:55:23.202298865Z 1:M 12 Nov 04:55:23.201 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    2020-11-12T04:55:23.202306490Z 1:M 12 Nov 04:55:23.201 # Server initialized
    2020-11-12T04:55:23.202308781Z 1:M 12 Nov 04:55:23.201 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
    2020-11-12T04:55:23.202311189Z 1:M 12 Nov 04:55:23.201 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
    2020-11-12T04:55:23.202314377Z 1:M 12 Nov 04:55:23.201 * Ready to accept connections
    再查看镜像信息
    
    [root@localhost web_statistics]# docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED              STATUS              PORTS                    NAMES
    895b8d1ed815        redis:4.0.14           "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:6379->6379/tcp   web_staredis_redis
    993156e83c4b        postgres:9.4           "docker-entrypoint.s…"   6 days ago           Up 2 hours          0.0.0.0:5432->5432/tcp   web_statistics_pg
    e64670bf0546        flask_web_stj:latest   "gunicorn main:app -…"   6 days ago           Up 3 hours          0.0.0.0:1245->80/tcp     flask_new01
    792a8edb7c20        flask_web_stj:latest   "gunicorn main:app -…"   6 days ago           Up 3 hours          0.0.0.0:1246->80/tcp     flask_new02
    [root@localhost web_statistics]#
    
    
    三、nginx 容器的启动

    1: 查看已存在的镜像没有的话 则从新拉取

    
    [root@localhost web_statistics]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    flask_web_stj       latest              1410b6bc6d9d        7 days ago          913MB
    newmynginx          latest              cd903b9a327f        7 days ago          146MB
    python              3.6                 1297140c6dd2        8 days ago          874MB
    tomcat              latest              891fcd9c5b3a        4 weeks ago         647MB
    nginx               latest              f35646e83998        4 weeks ago         133MB
    redis               4.0.14              191c4017dcdd        6 months ago        89.3MB
    postgres            9.4                 ed5a45034282        9 months ago        251MB
    hell02              latest              bf756fb1ae65        10 months ago       13.3kB
    centos              centos7.1.1503      e1430271e2f9        20 months ago       212MB
    ubuntu              15.10               9b9cb95443b5        4 years ago         137MB
    [root@localhost web_statistics]#
    
    

    2:nginx.conf(nginx_web_statistics_api.conf) 配置文件的编写,用于反向到flask

    upstream web_statistics_api {
        server 127.0.0.1:1245 weight=1 max_fails=0 fail_timeout=12s;
        server 127.0.0.1:1246 weight=1 max_fails=0 fail_timeout=12s;
    }
    
    server {
        listen 80;
        server_name 192.168.219.130; # 这是HOST机器的外部域名,用地址也行
    
        location / {
            proxy_pass http://web_statistics_api ; # 这里是指向 gunicorn host 的服务地址
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
      }
    
    image.png
    image.png

    3:挂载配置文件到容器内部,并启动容器

    docker run --name nginx_flask_api -v /data/web_statistics/nginx_web_statistics_api.conf:/etc/nginx/conf.d/default.conf -d nginx
    

    查看容器没正常启动,查看日志:

    
    [root@localhost web_statistics]# docker logs -ft nginx_flask_api
    2020-11-12T05:13:04.143913388Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
    2020-11-12T05:13:04.143964086Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
    2020-11-12T05:13:04.153475026Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
    2020-11-12T05:13:04.162648668Z 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
    2020-11-12T05:13:04.174473655Z 10-listen-on-ipv6-by-default.sh: error: /etc/nginx/conf.d/default.conf differs from the packaged version
    2020-11-12T05:13:04.174807502Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
    2020-11-12T05:13:04.179840033Z /docker-entrypoint.sh: Configuration complete; ready for start up
    2020-11-12T05:13:04.204432876Z 2020/11/12 05:13:04 [emerg] 1#1: unexpected end of file, expecting ";" or "}" in /etc/nginx/conf.d/default.conf:1058
    2020-11-12T05:13:04.204451325Z nginx: [emerg] unexpected end of file, expecting ";" or "}" in /etc/nginx/conf.d/default.conf:1058
    [root@localhost web_statistics]#
    
    修改配置文件后
    
    [root@localhost web_statistics]# docker run --name nginx_flask_api -v /data/web_statistics/nginx_web_statistics_api.conf:/etc/nginx/conf.d/default.conf -d nginx
    5e823f5e6f1486c3f39f8c5c7a540210b142ce13959e13d65a3354effb5f6d7c
    [root@localhost web_statistics]#
    再看日志
    [root@localhost web_statistics]# docker logs -ft nginx_flask_api
    2020-11-12T05:17:33.097731784Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
    2020-11-12T05:17:33.097755572Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
    2020-11-12T05:17:33.104457769Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
    2020-11-12T05:17:33.110354247Z 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
    2020-11-12T05:17:33.113142158Z 10-listen-on-ipv6-by-default.sh: error: /etc/nginx/conf.d/default.conf differs from the packaged version
    2020-11-12T05:17:33.114474992Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
    2020-11-12T05:17:33.124894602Z /docker-entrypoint.sh: Configuration complete; ready for start up
    
    查看运行中的容器:
    [root@localhost web_statistics]# docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
    5e823f5e6f14        nginx                  "/docker-entrypoint.…"   40 seconds ago      Up 39 seconds       80/tcp                   nginx_flask_api
    895b8d1ed815        redis:4.0.14           "docker-entrypoint.s…"   22 minutes ago      Up 22 minutes       0.0.0.0:6379->6379/tcp   web_staredis_redis
    993156e83c4b        postgres:9.4           "docker-entrypoint.s…"   6 days ago          Up 3 hours          0.0.0.0:5432->5432/tcp   web_statistics_pg
    e64670bf0546        flask_web_stj:latest   "gunicorn main:app -…"   6 days ago          Up 3 hours          0.0.0.0:1245->80/tcp     flask_new01
    792a8edb7c20        flask_web_stj:latest   "gunicorn main:app -…"   6 days ago          Up 3 hours          0.0.0.0:1246->80/tcp     flask_new02
    [root@localhost web_statistics]#
    
    

    指定启动的nginx端口映射

    [root@localhost web_statistics]# docker run --name nginx_flask_api -p 80:80 -v /data/web_statistics/nginx_web_statistics_api.conf:/etc/nginx/conf.d/default.conf -d nginx
    c4672ebaf6ad0be4522cc4654f93c9d4a51b64850a8b1182236c47a9966f9633
    [root@localhost web_statistics]# docker rm nginx_flask_api^C
    [root@localhost web_statistics]# docker ps
    
    
    四、测试验证流程

    1:访问nginx


    image.png

    502错误。错误无法访问的上游服务。

    2:查看nginx配置文件:

    upstream web_statistics_api {
        server 127.0.0.1:1245 weight=1 max_fails=0 fail_timeout=12s;
        server 127.0.0.1:1246 weight=1 max_fails=0 fail_timeout=12s;
    }
    
    server {
        listen 80;
        server_name 192.168.219.130; # 这是HOST机器的外部域名,用地址也行
    
        location / {
            proxy_pass http://web_statistics_api ; # 这里是指向 gunicorn host 的服务地址
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

    更新配置无果:

    root@c4672ebaf6ad:/# nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    root@c4672ebaf6ad:/# nginx -s reload
    2020/11/12 05:31:07 [notice] 34#34: signal process started
    root@c4672ebaf6ad:/#
    
    PS:修改外部挂载的nginx文件,如果配置文件有更新的话,内部的nginx需要生效的话 ,需要进行
    nginx -s reload
    
    

    问题定位。nginx,不能访问内部的flask端口,需要访问宿主的端口:

    nginx容器内部访问应该 也是flask容器内部的地址,直接访问flask外部的地址是无法访问的,需要用link进行串联
    
    进入nginx容器内部,尝试访问外部的flask接口
    [root@localhost web_statistics]# docker exec -it nginx_flask_api /bin/bash
    root@a2a95e5d943b:/# nginx -s reload
    2020/11/12 05:37:11 [notice] 41#41: signal process started
    root@a2a95e5d943b:/# curl
    curl: try 'curl --help' or 'curl --manual' for more information
    root@a2a95e5d943b:/# curl 127.0.0.1
    curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused
    root@a2a95e5d943b:/# curl 127.0.0.1:8081
    <html>
    <head><title>502 Bad Gateway</title></head>
    <body>
    <center><h1>502 Bad Gateway</h1></center>
    <hr><center>nginx/1.19.3</center>
    </body>
    </html>
    访问nginx配置的端口
    root@a2a95e5d943b:/# curl 127.0.0.1:1245
    curl: (7) Failed to connect to 127.0.0.1 port 1245: Connection refused
    访问外部的宿主的端口
    root@a2a95e5d943b:/# curl 192.168.219.130:1245
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
    <title>400 Bad Request</title>
    <h1>Bad Request</h1>
    <p>The browser (or proxy) sent a request that this server could not understand.</p>
    
    

    3:修改nginx配置文件,且重载:

    upstream web_statistics_api {
        server 192.168.219.130:1245 weight=1 max_fails=0 fail_timeout=12s;
        server 192.168.219.130:1246 weight=1 max_fails=0 fail_timeout=12s;
    }
    
    server {
        listen 80;
        server_name 192.168.219.130; # 这是HOST机器的外部域名,用地址也行
    
        location / {
            proxy_pass http://web_statistics_api ; # 这里是指向 gunicorn host 的服务地址
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

    重载nginx

    root@a2a95e5d943b:/# nginx -s reload
    2020/11/12 08:31:01 [notice] 53#53: signal process started
    root@a2a95e5d943b:/#
    

    4:再次访问


    image.png

    5:结果已经说明从nginx层访问到了flask层

    docker compose 编排整合

    fpnr_docker-compose.yaml 文件编写

    version: "3.3"
    services:
        flask_web_stj_nginx:
            container_name: nginx_flask_api_yaml
            restart: always
            image: nginx
            volumes:
               - /data/web_statistics/nginx_web_statistics_api.conf:/etc/nginx/conf.d/default.conf
            ports:
               - "80:80"
        
        flask_web_stj_pgdb:
            container_name: web_statistics_pg_yaml
            restart: always
            image: postgres:9.4
            volumes:
               - /data/web_statistics/pgdata:/var/lib/postgresql/data
            ports:
               - "5432:5432"
        
        flask_web_stj_redis:
            container_name: web_staredis_redis_yaml
            restart: always
            image: redis:4.0.14
            volumes:
               - /data/web_statistics/redis.conf:/etc/redis/redis.conf 
               - /data/web_statistics/redisdata:/data
            command: redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456
            ports:
               - "6379:6379"
        
        flask_web_stj_01:
            image: flask_web_stj:latest
            build: .
            container_name: flask_new01_yaml
            restart: always
            ports:
                - "1255:80"
        flask_web_stj_02:
            image: flask_web_stj:latest
            build: .
            container_name: flask_new02_yaml
            restart: always
            ports:
                - "1256:80"
    
    
    image.png

    指定文件启动服务

    docker-compose -f fpnr_docker-compose.yaml up -d
    

    扩展学习

    ## 启动服务
    
    ```
    docker-compose -f docker-compose.yml up -d
    
    ```
    
    ## 停止服务
    
    ```
    docker-compose -f docker-compose.yml stop
    
    ```
    
    ## 停止并删除服务
    
    ```
    docker-compose -f docker-compose.yml down
    ```
    
    

    异常排查

    
    [root@localhost web_statistics]# docker-compose -f fpnr_docker-compose.yaml up -d
    Recreating flask_new01 ...
    Recreating flask_new02 ...
    Creating web_statistics_pg_yaml ...
    Creating web_staredis_redis_yaml ...
    Creating nginx_flask_api_yaml    ... error
    
    Creating web_staredis_redis_yaml ... error
    dcf96703431f0f9108f932eb8eb1b568df0568a866779ba2a0d08ead0a322): Bind for 0.0.0.0:80 failed: port is already allocated
    Creating web_statistics_pg_yaml  ... error
    Recreating flask_new01           ... done
    Recreating flask_new02           ... done
    
    ERROR: for web_statistics_pg_yaml  Cannot start service flask_web_stj_pgdb: driver failed programming external connectivity on endpoint web_statistics_pg_yaml (86f30ff09f92619081f41dd140f326e7208abfc8d35007943a8fcfaee2d65022): Bind for 0.0.0.0:5432 failed: port is already allocated
    
    ERROR: for flask_web_stj_nginx  Cannot start service flask_web_stj_nginx: driver failed programming external connectivity on endpoint nginx_flask_api_yaml (c47dcf96703431f0f9108f932eb8eb1b568df0568a866779ba2a0d08ead0a322): Bind for 0.0.0.0:80 failed: port is already allocated
    
    ERROR: for flask_web_stj_redis  Cannot start service flask_web_stj_redis: driver failed programming external connectivity on endpoint web_staredis_redis_yaml (5301b336f4ac40ba428c068bd06d2c706ed4cab6e19ed3c36b8194cb9f8f4f09): Bind for 0.0.0.0:6379 failed: port is already allocated
    
    ERROR: for flask_web_stj_pgdb  Cannot start service flask_web_stj_pgdb: driver failed programming external connectivity on endpoint web_statistics_pg_yaml (86f30ff09f92619081f41dd140f326e7208abfc8d35007943a8fcfaee2d65022): Bind for 0.0.0.0:5432 failed: port is already allocated
    ERROR: Encountered errors while bringing up the project.
    [root@localhost web_statistics]#
    
    

    暂停以前一些容器的运行和端口的占用

    
    [root@localhost web_statistics]# docker stop nginx_flask_api
    nginx_flask_api
    [root@localhost web_statistics]# docker stop  web_staredis_redis
    web_staredis_redis
    [root@localhost web_statistics]# docker stop  web_statistics_pg
    web_statistics_pg
    [root@localhost web_statistics]# docker stop  flask_new02_yaml
    flask_new02_yaml
    [root@localhost web_statistics]# docker stop  flask_new01_yaml
    flask_new01_yaml
    [root@localhost web_statistics]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@localhost web_statistics]#
    
    

    重新再跑一次

    
    [root@localhost web_statistics]# docker-compose -f fpnr_docker-compose.yaml up -d
    Starting web_statistics_pg_yaml  ... done
    Starting flask_new01_yaml        ... done
    Starting web_staredis_redis_yaml ... done
    Starting flask_new02_yaml        ... done
    Starting nginx_flask_api_yaml    ... done
    [root@localhost web_statistics]#
    
    
    [root@localhost web_statistics]# docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
    049838d17129        flask_web_stj:latest   "gunicorn main:app -…"   3 minutes ago       Up 24 seconds       0.0.0.0:1256->80/tcp     flask_new02_yaml
    89e76e82744c        flask_web_stj:latest   "gunicorn main:app -…"   3 minutes ago       Up 24 seconds       0.0.0.0:1255->80/tcp     flask_new01_yaml
    d2b810aa864e        redis:4.0.14           "docker-entrypoint.s…"   3 minutes ago       Up 24 seconds       0.0.0.0:6379->6379/tcp   web_staredis_redis_yaml
    1ea8940f57f9        postgres:9.4           "docker-entrypoint.s…"   3 minutes ago       Up 24 seconds       0.0.0.0:5432->5432/tcp   web_statistics_pg_yaml
    f55811e5e3f2        nginx                  "/docker-entrypoint.…"   3 minutes ago       Up 25 seconds       0.0.0.0:80->80/tcp       nginx_flask_api_yaml
    [root@localhost web_statistics]#
    
    

    停止所有的服务:

    
    [root@localhost web_statistics]# docker-compose -f fpnr_docker-compose.yaml stop
    Stopping flask_new02_yaml        ... done
    Stopping flask_new01_yaml        ... done
    Stopping web_staredis_redis_yaml ... done
    Stopping web_statistics_pg_yaml  ... done
    Stopping nginx_flask_api_yaml    ... done
    [root@localhost web_statistics]#
    
    

    再次访问接口:

    image.png

    相关文章

      网友评论

          本文标题:Centos下的纯命令记录Docker学习(8)-docker

          本文链接:https://www.haomeiwen.com/subject/pcgovktx.html