主要解决Omnidb运行Oracle时缺少依赖和中文显示为问号的问题。
参考:https://github.com/OmniDB/OmniDB/blob/master/Dockerfile
FROM debian:stable-slim
ENV OMNIDB_VERSION=2.17.0
ENV SERVICE_USER=omnidb
WORKDIR /${SERVICE_USER}
#因为生产环境网络很慢,所以先准备好这两个文件,直接拷贝进去(自行下载)
COPY ./omnidb-server_2.17.0-debian-amd64.deb /
ADD ./instantclient_12_1.tar /opt/oracle/
#替换debian的源
RUN sed -i 's@deb.debian.org/debian@mirrors.163.com/debian/@g' /etc/apt/sources.list
RUN sed -i 's@security.debian.org/debian-security@mirrors.163.com/debian-security@g' /etc/apt/sources.list
RUN adduser --system --home /${SERVICE_USER} --no-create-home ${SERVICE_USER} \
&& mkdir -p /${SERVICE_USER} \
&& chown -R ${SERVICE_USER}.root /${SERVICE_USER} \
&& chmod -R g+w /${SERVICE_USER} \
&& apt-get update \
&& apt-get -y upgrade \
&& apt-get install -y libc6 \ #运行Oracle需要安装的libnsl包,包含在libc6包里面
&& apt-get install -y wget dumb-init \
&& if [ ! -e '/bin/systemctl' ]; then ln -s /bin/echo /bin/systemctl; fi \
&& rm -rf /var/lib/apt/lists/*
RUN dpkg -i /omnidb-server_${OMNIDB_VERSION}-debian-amd64.deb \
&& rm -rf /omnidb-server_${OMNIDB_VERSION}-debian-amd64.deb
#设置依赖包路径
ENV LD_LIBRARY_PATH /opt/oracle/instantclient_12_1:$LD_LIBRARY_PATH
#设置语言
ENV NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
USER ${SERVICE_USER}
EXPOSE 8000
EXPOSE 25482
ENTRYPOINT [ "/usr/bin/dumb-init", "--" ]
CMD ["omnidb-server", "-H", "0.0.0.0"]
构建镜像
docker build -t omnidb:2.17.0 .
保存镜像
docker save -o image_omnidb.tar omnidb:2.17.0
加载镜像
提前准备好omnidb-server_2.17.0-debian-amd64.deb和instantclient_12_1.tar
docker load -i image_omnidb.tar
运行容器
docker run -it --rm -p 0.0.0.0:8001:8000 -p 0.0.0.0:25482:25482 omnidb:2.17.0