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
- error: docker error client's docker version don't match server's docker version while running docker-compose
-
参考