详解Dockerfile构建多组件集成镜像

FROM ubuntu:22.04
LABEL description="OceanX ECM Base Image " version="6.1.9.1" owner="OceanX Technology Ltd" create_by="OceanX Development"
USER root
ENV LANG=en_US.UTF-8
ENV JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" CATALINA_HOME="/usr/local/tomcat9"
ARG ORACLE_BASIC_URL=https://download.oracle.com/otn_software/linux/instantclient/2114000/instantclient-basic-linux.x64-21.14.0.0.0dbru.zip
ARG ORACLE_ODBC_URL=https://download.oracle.com/otn_software/linux/instantclient/2114000/instantclient-odbc-linux.x64-21.14.0.0.0dbru.zip
ARG ORACLE_DRIVER_VERSION=21_14
ARG HTTP_VERSION=2.4.62
ARG TOMCAT_VERSION=9.0.87
ARG NODE_VERSION=v16.13.2-linux-x64
ARG NODE_HOME=/usr/local/node-$NODE_VERSION
ARG OPENSSL_VERSION=3.2.0
ENV PATH=$NODE_HOME/bin:$PATH
ARG HTTP_PREFIX=/usr/local/apache2
ARG APPLY_IN_DOCKER=/tmp/apply_in_docker
ARG REQUIREMENTS_DIR=$APPLY_IN_DOCKER/requirements-equal-version.txt
ARG ECM_FONTS_DIR=/usr/share/fonts/ECM_FONTS
ADD apply_in_docker /tmp/apply_in_docker
#================== ECM FONTS ==================
ADD ECM_FONTS $ECM_FONTS_DIR
#================= BASIC TOOLS & ODBC DRIVER===
RUN apt update && \
    apt install -y --no-install-recommends build-essential python3 python3-dev python3-pip ca-certificates libaprutil1-ldap libldap-common libaprutil1-dev libbrotli-dev libcurl4-openssl-dev libjansson-dev liblua5.2-dev libnghttp2-dev libpcre3-dev libssl-dev libxml2-dev libexpat-dev libapr1-dev libmysqlclient-dev libxmlsec1-dev language-pack-en && \
    apt install -y unixodbc unixodbc-dev libaio1 libaio-dev poppler-utils vim curl unzip gpg odbc-mariadb odbc-postgresql && \
    curl https://packages.microsoft.com/keys/microsoft.asc | tac | tac | apt-key add - && \
    curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list && \
    curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/packages.microsoft.gpg && \
    apt update && \
    ACCEPT_EULA=Y apt install msodbcsql17 && \
#================== ORACLE ODBC DRIVER ===============
    mkdir -p /opt/oracle && \
    curl -o /opt/oracle/basic.zip $ORACLE_BASIC_URL && \
    curl -o /opt/oracle/odbc.zip $ORACLE_ODBC_URL && \
    unzip /opt/oracle/basic.zip -d /opt/oracle && \
    unzip /opt/oracle/odbc.zip -d /opt/oracle && \
    echo "[OracleODBC]" | tee -a /etc/odbcinst.ini && \
    echo "Description=Oracle ODBC driver" | tee -a /etc/odbcinst.ini && \
    echo "Driver=/opt/oracle/instantclient_$ORACLE_DRIVER_VERSION/libsqora.so.21.1" | tee -a /etc/odbcinst.ini && \
    cd /tmp/apply_in_docker && \
#==================== JDK ======================
    mkdir -p $JAVA_HOME && \
    tar -xzf /tmp/apply_in_docker/OpenJDK11U-jre_x64_linux_hotspot_11.0.22_7.tar.gz -C $JAVA_HOME --strip-components=1 && \
    rm /tmp/apply_in_docker/OpenJDK11U-jre_x64_linux_hotspot_11.0.22_7.tar.gz && \
#==================== httpd =====================
    tar -xvf httpd-$HTTP_VERSION.tar.gz && \
    cd $APPLY_IN_DOCKER/httpd-$HTTP_VERSION && \
    ./configure --prefix=/usr/local/apache2 --enable-mods-shared=reallyall --enable-mpms-shared=all && \
    make && \
    make install && \
    cd .. && \
#==================== tomcat ====================
    tar -xvf apache-tomcat-$TOMCAT_VERSION.tar.gz && \
    mv apache-tomcat-$TOMCAT_VERSION $CATALINA_HOME && \
#==================== openssl ===================
    tar -xvf openssl-$OPENSSL_VERSION.tar.gz && \
    cd openssl-$OPENSSL_VERSION && \
    ./config shared zlib && \
    make && make install && \
    ln -sf /usr/local/lib64/libssl.so.3 /lib/x86_64-linux-gnu/libssl.so.3 && \
    ln -sf /usr/local/lib64/libcrypto.so.3 /lib/x86_64-linux-gnu/libcrypto.so.3 && \
#==================== node =====================
    cd $APPLY_IN_DOCKER && \
    tar -xvf node-$NODE_VERSION.tar.xz && \
    mv node-$NODE_VERSION /usr/local/ && \
    python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade pip==24.0 wheel==0.43.0 setuptools==69.2.0 && \
    python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -U -r $REQUIREMENTS_DIR && \
    rm -rf /var/lib/apt/lists/* $APPLY_IN_DOCKER
ENV LD_LIBRARY_PATH=/opt/oracle/instantclient_$ORACLE_DRIVER_VERSION:$LD_LIBRARY_PATH
ENV PATH=/opt/oracle/instantclient_$ORACLE_DRIVER_VERSION:$JAVA_HOME/bin:$PATH
CMD tail -f /dev/null
这个 Dockerfile 是用来构建一个包含多个软件组件的 Docker 镜像的脚本。它基于 Ubuntu 22.04 操作系统,并安装了一系列的软件和库,以支持特定的应用程序或服务。下面是对 Dockerfile 中各个部分的详细解释:

1. **基础镜像指定**:
   `FROM ubuntu:22.04` 指定了基础镜像是 Ubuntu 22.04 版本。

2. **标签信息**:
   `LABEL` 指令添加了关于镜像的元数据,包括描述、版本、所有者和创建者。

3. **用户切换**:
   `USER root` 切换到 root 用户,以便执行需要管理员权限的操作。

4. **环境变量设置**:
   `ENV` 设置了环境变量,包括语言环境、Java 家目录、Tomcat 家目录等。

5. **参数定义**:
   `ARG` 定义了构建时的参数,这些参数可以在外边指定,也可以使用默认值。

6. **字体添加**:
   `ADD ECM_FONTS $ECM_FONTS_DIR` 将本地的 ECM_FONTS 目录添加到容器中的指定位置。

7. **基础工具和 ODBC 驱动安装**:
   使用 `apt` 命令更新软件包列表并安装了一系列的开发工具、库和驱动程序。

8. **Oracle ODBC 驱动安装**:
   下载并解压 Oracle Instant Client 的基本和 ODBC 驱动,然后配置 ODBC 驱动。

9. **JDK 安装**:
   从 `apply_in_docker` 目录中解压缩 Java JDK,并将其放置在预定义的 `JAVA_HOME` 目录。

10. **Apache HTTP 服务器安装**:
    下载、配置并安装 Apache HTTP 服务器(httpd)。

11. **Tomcat 安装**:
    下载并解压 Tomcat,然后将其移动到预定义的 `CATALINA_HOME` 目录。

12. **OpenSSL 安装**:
    下载、配置、编译并安装 OpenSSL。

13. **Node.js 安装**:
    下载并解压 Node.js,然后将其移动到预定义的 `NODE_HOME` 目录。

14. **Python 包安装**:
    使用 pip 安装 Python 包,这里使用了清华大学的镜像源来加速下载。

15. **清理缓存**:
    `rm -rf /var/lib/apt/lists/* $APPLY_IN_DOCKER` 清理了 apt 缓存和临时文件。

16. **环境变量和启动命令设置**:
    设置了 `LD_LIBRARY_PATH` 和 `PATH` 环境变量,以便可以在容器中找到必要的库和可执行文件。`CMD` 指定了容器启动时执行的命令,这里使用 `tail -f /dev/null` 让容器保持运行状态。

**举例说明**:
假设你需要构建一个包含 Java、Tomcat、Node.js 和其他一些工具的 Docker 镜像,用于开发和部署一个 Web 应用程序。你可以使用这个 Dockerfile 作为基础,然后根据你的应用程序需求添加或修改软件安装步骤。例如,如果你的应用程序需要连接到 Oracle 数据库,你可以保留 Oracle ODBC 驱动的安装步骤;如果不需要,你可以将其删除以减小镜像大小。同样,如果你的应用程序是用 Python 编写的,你可以保留 Python 包的安装步骤。通过这种方式,你可以定制化你的 Docker 镜像,以满足特定的开发和部署需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值