Docker Compose practice

Docker Compose

  • 什么是 Docker-Compose
    Compose 可以让用户在集群中部署分布式应用。简单的说,Docker Compose 属于一个“应用层”的服务,
    用户可以定义哪个容器组运行哪个应用,它支持动态改变应用,并在需要时扩展。

  • 使用Docker-Compose的过程
    首先,通过Dockerfile定义应用程序的环境,以便在任何地方方便重复使用;
    然后,通过docker-compose.yml描述应用的各种服务,以便于它们能在一个独立的环境中联合运行;
    最后,通过执行 docker-compose up便能执行整个应用。

  • Docker-Compose 在Django项目中的应用

    • 在Django项目的根目录下创建Dockerfile
    FROM python:2.7
    MAINTAINER Andy andy@xx.com
    ENV PYTHONUNBUFFERED 1
    RUN mkdir /tmscode
    WORKDIR /tmscode
    ADD requirements.txt /tmscode/
    RUN pip install -r requirements.txt
    ADD . /tmscode
    
    • 创建requirement.txt
    Django==1.9
    fabric
    MySQL-python
    
    • 在项目根目录中创建docker-compose.yml
    db:
        image: mysql
        environment:
            - MYSQL_ROOT_PASSWORD=passwd
            - MYSQL_USER=user
            - MYSQL_PASSWORD=passwd
            - MYSQL_DATABASE=testdb
    web:
        build: .
        command: python manage.py runserver 0.0.0.0:8667
        volumes:
            - .:/tmscode
        ports:
            - "8667:8667"
        links:
            - db
    
    • 修改setting
    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
            'NAME': 'tmsApp',
            'USER': 'tmsAdmin',
            'PASSWORD': 'bhu890-=',
            'HOST': 'db',
            'PORT': '3306',
        }
    }
    

    Notes: 如果没有设置HOST 和 PORT, 当应用容器连接数据库容器时候会连接到本地数据库,而出现类似“can not connect to local Mysql”错误

  • 常见命令

    • 查看镜像
    docker images
    
    • 查看运行容器并进入容器
    docker ps
    docker exec -it <container_name> bash
    
    • 将镜像打包成 tar 包
    docker save -o docker-tms-image.tar.gz tms_web
    
    • 从一个tar 包中加载镜像
    docker load -i docker-tms-image.tar.gz
    
  • 常见问题

    • error: docker error client's docker version don't match server's docker version while running docker-compose
      (client and server don't have same version)
      solution: remove the docker-compose, don't use "pip install -U docker-compose",
      use :
    curl -L http://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-               compose
    chmod +x /usr/local/bin/docker-compose
    
    • error: pip version is 1.5.4, but need 8.0.0, use pip install --upgrade pip doesn't work
      solution: use get-pip.py
    python get-pip.py
    
    • 创建MySQL容器时,如有需要修改数据库的配置,例如修改字符集为utf8格式:
    MYSQL_CHARACTER_SET: Character set for MYSQL_DATABASE.
    MYSQL_COLLATE: Collate for MYSQL_DATABASE.
    GRANT_HOSTNAME: Hostname used on GRANT for MYSQL_DATABASE
    
  • 参考

原文地址:https://www.cnblogs.com/zeweiwu/p/5158898.html