在一个C语言项目中,根据项目要求需要Docker环境下运行,项目中涉及到了libevent、oralce、redis、kafka等组件,为了便于开发和后期的维护,搭建了包含以上组件的Docker基础镜像,以下供大家参考。
一、Oracle客户端的Dockerfile
FROM centos:7
# from https://github.com/grenadejumper/docker-oracle-client
# docker build -f Dockerfile -t haoxin/oracleclient .
# docker run -it --name oracleclient haoxin/oracleclient
# sqlplus username/pass@192.168.0.66/oratstsrv
MAINTAINER ls@haoxin.cn
RUN mkdir -p /tmp
COPY ./rpms/ /tmp
RUN yum install -y libaio glibc && \
yum -y localinstall /tmp/oracle* --nogpgcheck && \
mkdir /usr/lib/oracle/12.2/client/network/admin -p &&\
yum clean all -y
COPY ./tnsnames.ora /usr/lib/oracle/12.2/client64/network/admin/tnsnames.ora
ENV ORACLE_HOME=/usr/lib/oracle/12.2/client64
ENV PATH=$PATH:$ORACLE_HOME/bin
ENV LD_LIBRARY_PATH=$ORACLE_HOME/lib
ENV TNS_ADMIN=$ORACLE_HOME/network/admin
ENV NLS_LANG=american_america.AL32UTF8
#ENV OCI_LIB=$ORACLE_HOME/lib
ENTRYPOINT ["/bin/bash"]
二、包含各组件的Dockerfile
FROM haoxin/oracleclient
MAINTAINER ls@haoxin.cn
#https://github.com/quozd/docker-centos7-python36/blob/master/Dockerfile
# docker build -f Dockerfile -t haoxin/cenv .
#docker run -it --name cenv haoxin/cenv
ENV OCILIB_VERSION=4.5.2 \
LIBEVENT_VERSION=2.1.8 \
LIBRDKAFKA_VERSION=1.0.0-RC2 \
HIREDISVIP_VERSION=0.3.0 \
INSTALL_PKGS="wget gcc gcc-c++ make zlib-devel openssl-devel " \
PATH="/usr/local/bin:${PATH}"
RUN yum install -y $INSTALL_PKGS && \
yum clean all -y
#ocilib
RUN wget https://github.com/vrogier/ocilib/releases/download/v${OCILIB_VERSION}/ocilib-${OCILIB_VERSION}-gnu.tar.gz \
&& tar xvf ocilib-${OCILIB_VERSION}-gnu.tar.gz \
&& cd ocilib-${OCILIB_VERSION} \
&& ./configure --with-oracle-headers-path=/usr/include/oracle/12.2/client64/ \
&& make \
&& make install \
&& echo "/usr/local/lib" > /etc/ld.so.conf.d/ocilib.conf \
&& ldconfig \
&& cd / \
&& rm -rf ocilib-${OCILIB_VERSION}*
#libevent
RUN wget https://github.com/libevent/libevent/releases/download/release-${LIBEVENT_VERSION}-stable/libevent-${LIBEVENT_VERSION}-stable.tar.gz \
&& tar xvf libevent-${LIBEVENT_VERSION}-stable.tar.gz \
&& cd libevent-${LIBEVENT_VERSION}-stable \
&& ./configure --prefix=/usr \
&& make \
&& make install \
&& cd / \
&& rm -rf libevent-${LIBEVENT_VERSION}*
#librdkafka
#https://github.com/edenhill/librdkafka/archive/v1.0.0-RC2.tar.gz
RUN wget https://github.com/edenhill/librdkafka/archive/v${LIBRDKAFKA_VERSION}.tar.gz \
&& tar xvf v${LIBRDKAFKA_VERSION}.tar.gz \
&& cd librdkafka-${LIBRDKAFKA_VERSION} \
&& ./configure \
&& make \
&& make install \
&& cd / \
&& rm -rf librdkafka-${LIBRDKAFKA_VERSION} v${LIBRDKAFKA_VERSION}.tar.gz
#https://github.com/vipshop/hiredis-vip/archive/0.3.0.tar.gz
RUN wget https://github.com/vipshop/hiredis-vip/archive/${HIREDISVIP_VERSION}.tar.gz \
&& tar xvf ${HIREDISVIP_VERSION}.tar.gz \
&& cd hiredis-vip-${HIREDISVIP_VERSION} \
&& make \
&& make install \
&& cd / \
&& rm -rf hiredis-vip-${HIREDISVIP_VERSION} ${HIREDISVIP_VERSION}.tar.gz
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/:/usr/local/lib
ENTRYPOINT ["/bin/bash"]