记录一次使用docker部署python项目

软件环境

系统版本docker版本
6_64 GNU/Linux19.03

1.下载并安装docker

使用yum源安装,参考

镜像加速
网易的镜像地址:http://hub-mirror.c.163.com
Linux在 /etc/docker/daemon.json
Windows在 %programdata%\docker\config\daemon.json

进入后如果没有daemon.json,新建一个就行
键入

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

保存。

2.准备工作

进入pyhton目录
创建Dockerfile

from ubuntu:18.04

# 创建用户
RUN useradd -r -m -s /bin/bash toolman

RUN apt update
RUN apt install python3-dev default-libmysqlclient-dev -y \
    && apt install -y python3 python3-pip vim wget net-tools tor socat
# 安装tor,i2p,freenet
RUN apt install -y software-properties-common
RUN apt-add-repository ppa:i2p-maintainers/i2p
RUN add-apt-repository ppa:openjdk-r/ppa
RUN apt update
RUN apt install -y i2p openjdk-13-jre-headless

USER toolman
WORKDIR /home/toolman
ADD . gear
WORKDIR /home/toolman
RUN mkdir channel/tor_work -p
RUN cp gear/torconf/torrc channel/torrc
RUN mkdir test
RUN pip3 install -r gear/requirements

RUN mkdir freenet
WORKDIR freenet
RUN wget 'https://github.com/freenet/fred/releases/download/build01485/new_installer_offline_1485.jar' -O installer.jar
RUN java -jar installer.jar
WORKDIR /home/toolman/gear

ENTRYPOINT ["bash", "start.sh"]

3.打包镜像

执行sudo docker build -t docker-gear:v1 .
出现如下错误
pip安装错误
因为python安装此包时,与系统编码冲突
重新修改Dockerfile

from ubuntu:18.04

# 创建用户
RUN useradd -r -m -s /bin/bash toolman

RUN apt update
RUN apt install python3-dev default-libmysqlclient-dev -y \
    && apt install -y python3 python3-pip vim wget net-tools tor socat
# 安装tor,i2p,freenet
RUN apt install -y software-properties-common
RUN apt-add-repository ppa:i2p-maintainers/i2p
RUN add-apt-repository ppa:openjdk-r/ppa
RUN apt update
RUN apt install -y i2p openjdk-13-jre-headless

# 设置环境变量
ENV LANG=C.UTF-8
ENV LANGUAGE=C.UTF-8
ENV LC_ALL=C.UTF-8

USER toolman
WORKDIR /home/toolman
ADD . gear
WORKDIR /home/toolman
RUN mkdir channel/tor_work -p
RUN cp gear/torconf/torrc channel/torrc
RUN mkdir test
RUN pip3 install -r gear/requirements

RUN mkdir freenet
WORKDIR freenet
RUN wget 'https://github.com/freenet/fred/releases/download/build01485/new_installer_offline_1485.jar' -O installer.jar
RUN java -jar installer.jar
WORKDIR /home/toolman/gear

ENTRYPOINT ["bash", "start.sh"]

加入环境变量

ENV LANG=en_US:UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8

再次执行
运行第三方jar包时,出现错误
NullPointerException
出现这个错误的原因是,要运行这个jar包,分别需要交互三次:’’ ,1, 1。
但是怎么自动交互呢。
这个问题,搞了我接近一天。
头铁的思路如下:

1.从底层解决问题,修改Java源码

反编译Class文件,找到对应的类把判断去掉,编译。
再次构建镜像…
SHA-256 FAILED
好吧,龟龟,做了文件签名,单独改是不行了,于是我妄想把签名给更新了,然后你猜我发现了什么
三个祸害
简述情况便是ABC三位兄弟相互联手,联合抗我,加上这个RSA,没得私钥也搞不定。
放弃。

2.从应用层解决问题,使用Shell模拟输入

经我小量检索资料再总结归纳,有两种写法
echo -t '\n1\n1\n' | java -jar installer.jar

(echo;sleep 2;echo "1";sleep 2;echo "1";) | java -jar installer.jar

第一种,可能有用,但我这没用(表达式没写对可能)。
第二种,测试有效。

好了再次运行,出现错误
莫得权限

因为我建了一个工具人,他没权访问目录,使用root用户赋予工具人使用目录的权限.

RUN chown -R toolman:toolman gear
RUN chmod -Rf 755 gear

构建完成
在这里插入图片描述
最终Dockerfile构建代码如下:

from ubuntu:18.04

# 创建用户
RUN useradd -r -m -s /bin/bash toolman

RUN apt update
RUN apt install python3-dev default-libmysqlclient-dev -y \
    && apt install -y python3 python3-pip vim wget net-tools tor socat
# 安装tor,i2p,freenet
RUN apt install -y software-properties-common
RUN apt-add-repository ppa:i2p-maintainers/i2p
RUN add-apt-repository ppa:openjdk-r/ppa
RUN apt update
RUN apt install -y i2p openjdk-13-jre-headless

# 设置环境变量
ENV LANG=C.UTF-8
ENV LANGUAGE=C.UTF-8
ENV LC_ALL=C.UTF-8


WORKDIR /home/toolman
ADD . gear
RUN chown -R toolman:toolman gear
RUN chmod -Rf 755 gear
USER toolman
WORKDIR /home/toolman
RUN mkdir channel/tor_work -p
RUN cp gear/torconf/torrc channel/torrc
RUN mkdir test
RUN pip3 install -r gear/requirements

RUN mkdir freenet
WORKDIR freenet
RUN wget 'https://github.com/freenet/fred/releases/download/build01485/new_installer_offline_1485.jar' -O installer.jar
RUN (echo;sleep 2;echo "1";sleep 2;echo "1";)  | java -jar installer.jar
WORKDIR /home/toolman/gear

ENTRYPOINT ["bash", "start.sh"]

3.将脏镜像和容器删除

删除创建失败的镜像
sudo docker images -a|grep none|awk '{print $3}'|xargs sudo docker rmi -f

删除所有未启动容器
docker rm `docker ps -a -q`

4.启动

start.sh内容如下

# start tor
tor -f ../channel/torrc

# start i2p
i2prouter start

# start freenet

bash ../freenet/run.sh start

# start gear
python3 manage.py

镜像构建完成,启动镜像
sudo docker run -it docker-gear:v1 bash

启动完成
启动成功
下一节docker集成nginx

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值