华为cce使用docker安装nginx tomcat jar程序等
安装tomcat
dockerfile
FROM centos-sftp:7
# 设置工作目录
RUN mkdir -p /usr/local/tomcat /usr/local/jdk
# 将Tomcat目录复制到容器中
COPY apache-tomcat-9.0.99.tar.gz /usr/local/tomcat/
COPY jdk-8u441-linux-aarch64.tar.gz /usr/local/jdk/
COPY dacp-dp-3.0.0.tar.gz /usr/local/
COPY startup.sh /usr/local/
# 解压Tomcat
RUN tar -xzf /usr/local/tomcat/apache-tomcat-9.0.99.tar.gz -C /usr/local/tomcat/ \
&& rm -f /usr/local/tomcat/apache-tomcat-9.0.99.tar.gz \
&& tar -xzf /usr/local/dacp-dp-3.0.0.tar.gz -C /usr/local/ \
&& rm -f /usr/local/*.tar.gz
# 安装jdk1.8
RUN tar -xzf /usr/local/jdk/jdk-8u441-linux-aarch64.tar.gz -C /usr/local/jdk/ \
&& rm -f /usr/local/jdk/jdk-8u441-linux-aarch64.tar.gz
RUN touch /usr/local/tomcat/apache-tomcat-9.0.99/logs/catalina.out
RUN chmod u+x /usr/local/startup.sh
# 设置环境变量,例如JAVA_OPTS可以设置JVM参数
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_441
ENV PATH $JAVA_HOME/bin:$PATH
ENV CATALINA_HOME /usr/local/tomcat/apache-tomcat-9.0.99
ENV PATH $CATALINA_HOME/bin:$PATH
RUN chown -R root:root /usr/local/ && \
chmod -R 755 /usr/local
RUN echo "root:1q2w3e!Q" | chpasswd
RUN echo -e "Subsystem sftp internal-sftp" >> /etc/ssh/sshd_config
# 设置工作目录
WORKDIR /usr/local
# 暴露Tomcat默认端口8080
EXPOSE 8080 22 2500
# 启动Tomcat
CMD ["/bin/sh", "/usr/local/startup.sh"]
startup.sh
#!/bin/bash
# 启动sshd
/sbin/sshd -D & echo 'export PATH="/bin:$PATH"' >> ~/.bashrc &
source ~/.bashrc &
/bin/sh catalina.sh run
#/bin/sh /opt/dacp/dacp-dataflow-broker-3.5.0/bin/start.sh
#/bin/sh /opt/dacp/dacp-datastash-broker-3.5.0/run.sh
#tail -f /opt/dacp/dacp-datastash-broker-3.5.0/s.log
安装nginx
dockerfile
# 使用官方的Nginx镜像作为基础镜像
FROM nginx:1.26
COPY nginx.conf /etc/nginx/nginx.conf
COPY ./dacp_ide/public /usr/share/nginx/dacp_id/public
COPY ./dacp_index/public /usr/share/nginx/dacp_index/public
EXPOSE 88
# 设置容器启动时执行的命令
CMD ["nginx", "-g", "daemon off;"]
安装jdk ssh
# 使用 CentOS 7 作为基础镜像
FROM centos-sftp:7
# 创建安装目录
RUN mkdir -p /opt/dacp /opt/datax /usr/local/jdk
COPY dacp-datastash-broker-3.5.0.tar.gz /opt/dacp/
COPY dacp-dp-3.0.0.tar.gz /opt/dacp/
COPY datax.tar.gz /opt/datax/
COPY jdk-8u441-linux-aarch64.tar.gz /usr/local/jdk/
COPY startup.sh /opt/dacp/
# 安装 JDK
RUN tar -xzf /usr/local/jdk/jdk-8u441-linux-aarch64.tar.gz -C /usr/local/jdk/ \
&& rm -f /usr/local/jdk/jdk-8u441-linux-aarch64.tar.gz
# 设置环境变量
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_441
ENV PATH $JAVA_HOME/bin:$PATH
# 解压 DACP 相关文件
RUN tar -xzf /opt/dacp/dacp-datastash-broker-3.5.0.tar.gz -C /opt/dacp/ \
&& tar -xzf /opt/dacp/dacp-dp-3.0.0.tar.gz -C /opt/dacp/ \
&& rm -f /opt/dacp/*.tar.gz
# 解压 DataX
RUN tar -xzf /opt/datax/datax.tar.gz -C /opt/dacp/ \
&& rm -f /opt/datax/datax.tar.gz
RUN chmod u+x /opt/dacp/startup.sh
#RUN groupadd dacp && \
#useradd -m -d /home/dacp -s /bin/bash -g dacp dacp && \
#echo "dacp:1q2w3e!Q" | chpasswd && \
#chmod -R 755 /opt/dacp/ && \
RUN chown -R root:root /opt/dacp/ && \
chmod -R 755 /opt/dacp
RUN echo "root:1q2w3e!Q" | chpasswd
RUN echo -e "Subsystem sftp internal-sftp" >> /etc/ssh/sshd_config
RUN echo 'export PATH="/bin:$PATH"' >> ~/.bashrc && \
source ~/.bashrc
# 设置工作目录
WORKDIR /opt/dacp
# 暴露端口(根据实际需求修改)
EXPOSE 22 2500
# 设置启动命令(根据实际需求修改)
CMD ["/bin/sh", "/opt/dacp/startup.sh"]
centos-sftp 里面已经安装好了 openssh-server 和openssh-client 如果有外网可以直接使用yum install 安装 没有就找一台可以连外网的主机打一个centos7的镜像吧openssh-server和openssh-client加上 多命令行启动
#!/bin/bash
# 启动sshd
/sbin/sshd -D & echo 'export PATH="/bin:$PATH"' >> ~/.bashrc &
source ~/.bashrc &
/bin/sh /opt/dacp/dacp-datastash-broker-3.5.0/run.sh
#/bin/sh /opt/dacp/dacp-dataflow-broker-3.5.0/bin/start.sh
#/bin/sh /opt/dacp/dacp-datastash-broker-3.5.0/run.sh
#tail -f /opt/dacp/dacp-datastash-broker-3.5.0/s.log
注意
1.ssh和sftp同时使用
#使用root的话需要,最好使用root,以为docker只有项目组用,直接使用root可以省去权限等多重问题
PermitRootLogin yes
PasswordAuthentication yes
#开启sftp
Subsystem sftp internal-sftp
2.需要ssh
dockerfile
# 有网可以使用
# 使用 CentOS 7 作为基础镜像
FROM centos:7
# 安装 OpenSSH 服务
RUN yum -y install openssh-server openssh-clients && yum clean all
# 设置 root 用户密码
RUN echo "root:1q2w3e!Q" | chpasswd
# 创建 SFTP 目录
RUN mkdir -p /sftp/uploads && \
chown root:root /sftp && \
chmod 755 /sftp && \
chown root:root /sftp/uploads && \
chmod 755 /sftp/uploads
# 配置 SSH
RUN echo -e "Port 22\n\
Protocol 2\n\
PermitRootLogin yes\n\
PasswordAuthentication yes\n\
Subsystem sftp internal-sftp\n\
# 暴露 SFTP 端口
EXPOSE 22
# 启动 SSH 服务
CMD ["/usr/sbin/sshd", "-D"]
安装zookeeper
dockerfile
# 使用 CentOS 7 作为基础镜像
FROM centos-sftp:7
# 创建安装目录
RUN mkdir -p /usr/local/jdk /opt/zookeeper/
COPY jdk-8u441-linux-aarch64.tar.gz /usr/local/jdk/
COPY apache-zookeeper-3.7.2-bin.tar.gz /opt/zookeeper/
# 安装 JDK
RUN tar -xzf /usr/local/jdk/jdk-8u441-linux-aarch64.tar.gz -C /usr/local/jdk/ \
&& rm -f /usr/local/jdk/jdk-8u441-linux-aarch64.tar.gz
# 设置环境变量
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_441
ENV PATH $JAVA_HOME/bin:$PATH
# 创建数据和日志目录
RUN mkdir -p /opt/zookeeper/data \
&& mkdir -p /opt/zookeeper/logs
# 安装ZooKeeper
RUN tar -xzf /opt/zookeeper/apache-zookeeper-3.7.2-bin.tar.gz -C /opt/zookeeper/ --strip-components=1 \
&& rm -f /opt/zookeeper/apache-zookeeper-*.tar.gz
RUN echo "root:1q2w3e!Q" | chpasswd
RUN echo -e "Subsystem sftp internal-sftp" >> /etc/ssh/sshd_config
RUN echo 'export PATH="/bin:$PATH"' >> ~/.bashrc && \
source ~/.bashrc
# 暴露 Zookeeper 默认端口
EXPOSE 2181 2888 3888 22
# 声明数据存储目录,以便持久化数据
VOLUME ["/opt/zookeeper/data", "/opt/zookeeper/logs"]
# 设置启动命令(根据实际需求修改)
CMD ["/sbin/sshd", "-D"]
注意
实例ip会变 因为实例ip会变 所以需要安装ssh,使用ssh登录实例ip 修改zoo.cfg配置 server.N 使用实例ip,应用访问访问方式ip
如果实例ip不变可以使用
docker-entrypoint.sh
#!/bin/bash
set -e
# 设置 ZooKeeper 数据目录和 myid 文件
ZOOKEEPER_DATA_DIR=${ZOOKEEPER_DATA_DIR:-/opt/zookeeper/data}
ZOOKEEPER_CONF_DIR=${ZOOKEEPER_CONF_DIR:-/opt/zookeeper/conf}
ZOOKEEPER_LOGS=${ZOOKEEPER_LOGS:-/opt/zookeeper/logs}
ZOOKEEPER_SERVER_ID=${ZOOKEEPER_SERVER_ID:-1}
# 如果 dataDir 不存在,则创建它
if [ ! -d "$ZOOKEEPER_DATA_DIR" ]; then
mkdir -p "$ZOOKEEPER_DATA_DIR"
fi
# 创建日志目录
if [ ! -d "$ZOOKEEPER_LOGS" ]; then
mkdir -p "$ZOOKEEPER_LOGS"
fi
# 设置 ZooKeeper 的 myid
echo "$ZOOKEEPER_SERVER_ID" > "$ZOOKEEPER_DATA_DIR/myid"
# 检查是否存在 zoo.cfg,如果不存在,则生成默认配置
if [ ! -f "$ZOOKEEPER_CONF_DIR/zoo.cfg" ]; then
echo "zoo.cfg not found, generating default config..."
cat <<EOF > "$ZOOKEEPER_CONF_DIR/zoo.cfg"
tickTime=2000
initLimit=5
syncLimit=2
dataDir=${ZOOKEEPER_DATA_DIR}
dataLogDir=${ZOOKEEPER_LOGS}
clientPort=2181
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
# 集群配置(根据集群规模动态生成)
EOF
# 如果传递了环境变量 SERVER_LIST,则生成 server.X 配置
if [ -n "$SERVER_LIST" ]; then
echo "Generating server list..."
IFS=',' read -ra SERVERS <<< "$SERVER_LIST"
for i in "${!SERVERS[@]}"; do
echo "server.$((i+1))=${SERVERS[$i]}" >> "$ZOOKEEPER_CONF_DIR/zoo.cfg"
done
fi
fi
# 启动 ZooKeeper
echo "Starting ZooKeeper server with ID ${ZOOKEEPER_SERVER_ID}..."
exec "$@" # 运行传递的参数,例如 `bin/zkServer.sh start-foreground`