Docker、pylibmc、内存缓存
Docker, pylibmc, memcached
我有使用 memcached 的项目。因此,当 docker 尝试 "pip install pylibmc" 时,库找不到 libmemcached,因为它尚未安装。我如何组织我的 docker-compose.yml,或者我可能必须对 docker 文件做些什么?
现在我的 docker-compose.yml 看起来像(我删除了 memcached 容器行):
version: '2'
services:
app:
build: .
volumes:
- ./app:/usr/src/app
- ./logs:/var/log
expose:
- "8000"
links:
- db:db
networks:
tickets-api:
ipv4_address: 172.25.0.100
extra_hosts:
- "db:172.25.0.102"
webserver:
image: nginx:latest
links:
- app
- db
volumes_from:
- app
volumes:
- ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
ports:
- "80:80"
networks:
tickets-api:
ipv4_address: 172.25.0.101
db:
restart: always
image: postgres
volumes:
- ./postgresql/pgdata:/pgdata
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- PGDATA=/pgdata
networks:
tickets-api:
ipv4_address: 172.25.0.102
networks:
tickets-api:
driver: bridge
ipam:
config:
- subnet: 172.25.0.0/24
你有两个选择。将其安装在您的应用程序容器中或将 memcached 安装为独立容器。
选项 1
您可以添加命令以在您应用的 Dockerfile
上安装 libmemcached
。
如果您正在使用某种基于 ubuntu 的图像或 alpine
只需添加
RUN apt-get update && apt-get install -y \
libmemcached11 \
libmemcachedutil2 \
libmemcached-dev \
libz-dev
那么,你可以pip install pylibmc
选项 2
您可以将 memcached 添加为单独的容器。只需添加您的 docker-compose
memcached:
image: memcached
ports:
- "11211:11211"
当然,您需要 link 您的应用程序容器与 memcached 容器。
解决此问题的最简单方法是更新应用程序 Dockerfile
并安装构建 python 包所需的开发依赖项。
在 ubuntu/debian 上可能是这样的:
apt-get install libmemcached-dev gcc python-dev
第二个(更有优势的)选项是在单独的容器中为这个包构建一个 wheel,然后安装 wheel 而不是源 tarball。这样您就不必安装任何其他软件包,并且您的最终图像会小得多。然而,它需要更多的工作来设置。
我有使用 memcached 的项目。因此,当 docker 尝试 "pip install pylibmc" 时,库找不到 libmemcached,因为它尚未安装。我如何组织我的 docker-compose.yml,或者我可能必须对 docker 文件做些什么?
现在我的 docker-compose.yml 看起来像(我删除了 memcached 容器行):
version: '2'
services:
app:
build: .
volumes:
- ./app:/usr/src/app
- ./logs:/var/log
expose:
- "8000"
links:
- db:db
networks:
tickets-api:
ipv4_address: 172.25.0.100
extra_hosts:
- "db:172.25.0.102"
webserver:
image: nginx:latest
links:
- app
- db
volumes_from:
- app
volumes:
- ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
ports:
- "80:80"
networks:
tickets-api:
ipv4_address: 172.25.0.101
db:
restart: always
image: postgres
volumes:
- ./postgresql/pgdata:/pgdata
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- PGDATA=/pgdata
networks:
tickets-api:
ipv4_address: 172.25.0.102
networks:
tickets-api:
driver: bridge
ipam:
config:
- subnet: 172.25.0.0/24
你有两个选择。将其安装在您的应用程序容器中或将 memcached 安装为独立容器。
选项 1
您可以添加命令以在您应用的 Dockerfile
上安装 libmemcached
。
如果您正在使用某种基于 ubuntu 的图像或 alpine
只需添加
RUN apt-get update && apt-get install -y \
libmemcached11 \
libmemcachedutil2 \
libmemcached-dev \
libz-dev
那么,你可以pip install pylibmc
选项 2
您可以将 memcached 添加为单独的容器。只需添加您的 docker-compose
memcached:
image: memcached
ports:
- "11211:11211"
当然,您需要 link 您的应用程序容器与 memcached 容器。
解决此问题的最简单方法是更新应用程序 Dockerfile
并安装构建 python 包所需的开发依赖项。
在 ubuntu/debian 上可能是这样的:
apt-get install libmemcached-dev gcc python-dev
第二个(更有优势的)选项是在单独的容器中为这个包构建一个 wheel,然后安装 wheel 而不是源 tarball。这样您就不必安装任何其他软件包,并且您的最终图像会小得多。然而,它需要更多的工作来设置。