zoukankan      html  css  js  c++  java
  • docker 使用指南

    Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application’s services. Then, using a single command, you create and start all the services from your configuration.

    Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等,就拿官网的 Python 例子来说,功能很简单,利用 redis 的 incr 的功能对页面的访问量进行统计。

    docker-compose 的安装可以参考官网,如果安装了 Docker for Mac 或者 Docker for windows 则直接就存在了。

    创建项目目录:

    $ mkdir composetest
    $ cd composetest

    创建 Python 的程序 app.py ,功能就是利用 redis 的 incr 方法进行访问计数。

     from flask import Flask
     from redis import Redis
    
     app = Flask(__name__)
     redis = Redis(host='redis', port=6379)
    
     @app.route('/')
     def hello():
         redis.incr('hits')
         return 'Hello World! I have been seen %s times.' % redis.get('hits')
    
     if __name__ == "__main__":
         app.run(host="0.0.0.0", debug=True)

    由于 Python 依赖的 flaskredis 组件都需要另外安装,比如使用 pip来安装,单独设置一文件 requirements.txt,内容如下:

    flask
    redis

    创建 service 依赖的第一个 image,app.py 程序的运行环境,利用 Dockerfile 来制作,内容如下:

     FROM python:2.7 #基于 python:2.7 镜像
     ADD . /code  #将本地目录中的内容添加到 container 的 /code 目录下
     WORKDIR /code  #设置程序工作目录为 /code
     RUN pip install -r requirements.txt   #运行安装命令
     CMD python app.py  #启动程序

    Dockerfile 创建好就可以制作镜像了,运行docker build -t compose/python_app . ,成功后通过docker images查看即能看到:

    docker images                                   
    REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
    compose/python_app     latest              a92fed00abd        59 minutes ago      680.4 MB

    接下来制作 docker-compose 需要的配置文件 docker-compose.yml, version 要选择 2 ,1的版本很古老了,配置中可以看到创建了 2 个 service,web 和 redis ,各自有依赖的镜像,其中web 开放 container 的5000端口,并与 host 的5000端口应对,方便通过 localhost:5000 来访问, volumes 即将本地目录中的文件加载到容器的 /code 中,depends_on 表名 services web 是依赖另一个 service redis的,完整的配置如下:

      version: '2'
        services:
          web:
            image: compose/python_app
            ports:
             - "5000:5000"
            volumes:
             - .:/code
            depends_on:
             - redis
          redis:
            image: redis

    前提都搞定了,就差最后一步启动了,命令 docker-compose up ,成功后如下:

    Attaching to composetestbypython_redis_1
    redis_1  | 1:C 04 Nov 10:35:17.448 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
    redis_1  |                 _._
    redis_1  |            _.-``__ ''-._
    redis_1  |       _.-``    `.  `_.  ''-._           Redis 3.2.5 (00000000/0) 64 bit
    redis_1  |   .-`` .-```.  ```/    _.,_ ''-._
    redis_1  |  (    '      ,       .-`  | `,    )     Running in standalone mode
    redis_1  |  |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
    redis_1  |  |    `-._   `._    /     _.-'    |     PID: 1
    redis_1  |   `-._    `-._  `-./  _.-'    _.-'
    redis_1  |  |`-._`-._    `-.__.-'    _.-'_.-'|
    redis_1  |  |    `-._`-._        _.-'_.-'    |           http://redis.io
    redis_1  |   `-._    `-._`-.__.-'_.-'    _.-'
    redis_1  |  |`-._`-._    `-.__.-'    _.-'_.-'|
    redis_1  |  |    `-._`-._        _.-'_.-'    |
    redis_1  |   `-._    `-._`-.__.-'_.-'    _.-'
    redis_1  |       `-._    `-.__.-'    _.-'
    redis_1  |           `-._        _.-'
    redis_1  |               `-.__.-'
    redis_1  |
    redis_1  | 1:M 04 Nov 10:35:17.450 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    redis_1  | 1:M 04 Nov 10:35:17.450 # Server started, Redis version 3.2.5
    redis_1  | 1:M 04 Nov 10:35:17.451 # 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.
    redis_1  | 1:M 04 Nov 10:35:17.451 # 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.
    redis_1  | 1:M 04 Nov 10:35:17.451 * The server is now ready to accept connections on port 6379

    此时通过compose 的 ps 命令也能看到 docker-compose ps :

    docker-compose ps                                                                       
              Name                          Command               State           Ports
    ---------------------------------------------------------------------------------------------
    composetestbypython_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
    composetestbypython_web_1     /bin/sh -c python app.py         Up      0.0.0.0:5000->5000/tcp

    ok ,在浏览器中访问 http://localhost:5000 就能看到最终的样子啦。

    {% qnimg docker/2016-11-04-22-40-11.jpg title: alt: 'class:' %}

    docker-compose 还有很多实用的命令,比如 logs、build、start、stop 等,可以通过 docker-compose --help来查看:

    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
      -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 (for example if your docker host
                                  is an IP address)
    
    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
      kill               Kill containers
      logs               View output from containers
      pause              Pause services
      port               Print the public port for a port binding
      ps                 List containers
      pull               Pulls 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
      unpause            Unpause services
      up                 Create and start containers
      version            Show the Docker-Compose version information

    更多 docker-compose 例子参考官网 doc 文档 :

  • 相关阅读:
    12 【结构型】 浅谈享元模式的理解与使用
    11【结构型】浅谈 外观模式 理解与使用~
    【Maven基础入门】02 了解POM文件构建
    【Maven基础入门】01 Maven的安装与环境变量的配置
    02【创建型】原型模式
    01【创建型】单例模式
    10 浅谈 装饰器模式的理解与使用
    Java JDK1.8源码学习之路 2 String
    Java JDK1.8源码学习之路 1 Object
    ApachShiro 一个系统 两套验证方法-(后台管理员登录、前台App用户登录)同一接口实现、源码分析
  • 原文地址:https://www.cnblogs.com/bigben0123/p/7592453.html
Copyright © 2011-2022 走看看