软件环境
系统版本 | docker版本 |
---|---|
6_64 GNU/Linux | 19.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 .
出现如下错误
因为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包时,出现错误
出现这个错误的原因是,要运行这个jar包,分别需要交互三次:’’ ,1, 1。
但是怎么自动交互呢。
这个问题,搞了我接近一天。
头铁的思路如下:
1.从底层解决问题,修改Java源码
反编译Class文件,找到对应的类把判断去掉,编译。
再次构建镜像…
好吧,龟龟,做了文件签名,单独改是不行了,于是我妄想把签名给更新了,然后你猜我发现了什么
简述情况便是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