项目容器化 - Dockerfile
Python项目
Dockerfile
FROM python:3.6
LABEL version="1.0"
# 没有的话会进行创建
WORKDIR /root/.pip
# 把宿主机当前下的pip.conf 拷贝到容器里,为了给pip加速
COPY ./pip.conf /root/.pip
# 把项目 拷贝到容器里 并且容器的项目名也为medical_kg_chatbot
COPY ./medical_kg_chatbot/ /medical_kg_chatbot
WORKDIR /medical_kg_chatbot
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 8866
CMD ["python", "manage.py"]
pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
运行命令
# build
docker build -t kg-chatbot:v1 .
# 运行
docker run -d -p 8866:8866 -e NEO4J_HOST=xx.xx.xx.xx --name kg-chatbot kg-chatbot:v1
# 参数说明:
NEO4J_HOST neo4j的ip 默认:127.0.0.1
NEO4J_PORT 端口 默认:7474
NEO4J_USERNAME 用户名:neo4j
NEO4J_PASSWORD 用户密码:xxxx
# 测试
curl http://127.0.0.1:8866/test/
项目里定义好参数(config.py)
# -*- coding: utf-8 -*-
import os
# 获取环境变量
env_dict = os.environ
NEO4J_HOST = env_dict.get("NEO4J_HOST", "127.0.0.1")
NEO4J_PORT = int(env_dict.get("NEO4J_PORT", 7474))
NEO4J_USERNAME = env_dict.get("NEO4J_USERNAME", "neo4j")
NEO4J_PASSWORD = env_dict.get("NEO4J_PASSWORD", "xxx")
注意点
项目要以容器里的ip进行启动或(0.0.0.0),不然外面的访问不到,例如以下代码:
if __name__ == '__main__':
app.run(host="0.0.0.0", port=8866, threaded=True)
Java项目
Dockerfile
FROM mdsol/java11-jdk
LABEL version="1.0"
COPY ./kg-api.jar /build/
WORKDIR /build/
EXPOSE 2223
CMD ["java", "-jar", "-Xms128m", "-Xmx512m", "-XX:PermSize=128m", "-XX:MaxPermSize=512m", "kg-api.jar", "--spring.profiles.active=dev"]
java运行参数
-Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
堆的内存分配用-Xms和-Xmx
-Xms分配堆最小内存,默认为物理内存的1/64;-Xmx分配最大内存,默认为物理内存的1/4。
非堆内存分配用-XX:PermSize和-XX:MaxPermSize
-XX:PermSize分配非堆最小内存,默认为物理内存的1/64;-XX:MaxPermSize分配非堆最大内存,默认为物理内存的1/4。
命令
# build
docker build -t kg-api:v1 .
# 运行
docker run -d -p 2222:2222 --name kg-api kg-api:v1
# 测试
curl http://127.0.0.1:2222/disease/relation/?name=百日咳