一、制作镜像
1、Dockerfile
cat Dockerfile
FROM python:3.7-alpine
MAINTAINER yangyuhang@qq.com
RUN echo "http://mirrors.aliyun.com/alpine/v3.11/main" > /etc/apk/repositories && \
echo "http://mirrors.aliyun.com/alpine/v3.11/community" >> /etc/apk/repositories
RUN apk update && \
apk add --no-cache gcc g++ python python-dev py-pip mysql-dev linux-headers libffi-dev openssl-dev
RUN pip install devpi-server devpi-web devpi-client -i https://mirrors.aliyun.com/pypi/simple/ && \
mkdir /devpi
EXPOSE 3141
ADD run.sh /
CMD ["/bin/sh","run.sh"]
2、启动脚本-run.sh
cat run.sh
#!/bin/sh
set -e
set -x
export DEVPI_SERVERDIR=/devpi
[[ -f $DEVPI_SERVERDIR/.serverversion ]] || initialize=yes
if [[ $initialize == yes ]]; then
devpi-server --port 3141 --serverdir $DEVPI_SERVERDIR --init
fi
devpi-server --host 0.0.0.0 --port 3141 --serverdir $DEVPI_SERVERDIR
以上内容均在本人gitee仓库,有需求随意拉取。
二、容器启动
docker run --name devpi -v /data/devpi:/devpi -p 3141:3141 -d devpi:latest
容器启动后可访问http://127.0.0.1:3141/进行验证。
三、私有仓库的使用
1、登陆容器并使用私有仓库
docker exec -it devpi /bin/sh
devpi use http://localhost:3141
2、创建一个普通用户,用于上传私有化包
# 创建账户
devpi -c test password=test
# 修改密码
devpi -m test password=
3、创建索引,用于存放私有化包,方便管理各种类型的包
# 先登陆私有仓库
devpi login test --password=test
# 创建索引
devpi index -c dev
#激活索引
devpi use dev
至此,一个私有化仓库就已经搭建成功了。现在可以将你自己打好的包上传至该仓库。
四、私有仓库使用demo
1、创建一个python项目,目录包含如下内容
$ tree linode_example
linode_example
├── linode_example
│ └── __init__.py
└── setup.py
1 directory, 2 files
2、编写__init__.py文件
cat linode_example/linode_example/__init__.py
def hello_word():
print("hello world")
3、编写setup.py,用于将项目打成pip包
cat linode_example/setup.py
from setuptools import setup
setup(
name='linode_example',
packages=['linode_example'],
description='Hello world enterprise edition',
version='0.1', #版本号
url='http://github.com/example/linode_example',
author='Linode',
keywords=['pip','linode','example']
)
4、将项目打包
python3 setup.py sdist
命令执行后会在项目根目录下生成一个dist目录,dist目录下保存着制作好的tar包,新的目录结构如下:
$ tree linode_example
linode_example
├── dist
│ └── linode_example-0.1.tar.gz
├── linode_example
│ └── __init__.py
├── linode_example.egg-info
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ ├── dependency_links.txt
│ └── top_level.txt
└── setup.py
5、将包上传至仓库
twine upload --repository-url http://127.0.0.1:3141/test/dev/ dist/*
# test为之前在pypi仓库中建立的用户
# dev为之前在pypi仓库中建立的索引
# 上传时需要输入用户名密码:test/test
6、使用私有仓库的包
pip install -i http://localhost:3141/test/dev/ --trusted-host localhost linode_example
7、验证下载的包能否使用
验证成功,该仓库可用,为了方便使用,也可以将该仓库配置至~/.pip/pip.conf文件中,如下图: