工作中定制的Dockerfile
公司使用的内网,所以有的Dockerfile中使用的安装包,可以在外网下好传到内网,安装包都放在对应的Dockerfile同级目录下。
java:8.0
FROM redhat:7.5
MAINTAINER XXX
ARG JAVA_VERSION=8u241
#jdk的rpm包与Dockerfile放在同级目录
COPY jdk-${JAVA_VERSION}-linux-x64.rpm /opt/
RUN rpm -ivh /opt/jdk-${JAVA_VERSION}-linux-x64.rpm \
&& rm /opt/jdk-${JAVA_VERSION}-linux-x64.rpm
切换到Dockerfile所在目录执行以下命令制作镜像:
# docker build -f Dockerfile -t rhel_7.5/java:8.0 .
jenkins-slave:8.0
FROM rhel_7.5/java:8.0
MAINTAINER XXX
ARG GIT_VERSION=2.11.0
ARG user=jenkins
ARG group=jenkins
ARG uid=1000
ARG gid=1000
ARG JENKINS_AGENT_HOME=/home/${user}
ENV JENKINS_AGENT_HOME=${JENKINS_AGENT_HOME} \
SONAR_SCANNER_VERSION=2.8 \
PATH=/opt/sonar-scanner/bin:$PATH
#我这里需要用到sonar-scanner和git,没需求的可以不写
COPY sonar-scanner-$SONAR_SCANNER_VERSION.zip /opt/
RUN groupadd -g ${gid} ${group} \
&& useradd -d "${JENKINS_AGENT_HOME}" -u "${uid}" -g "${gid}" -m -s /bin/bash "${user}"
RUN sed -i /etc/ssh/sshd_config \
-e 's/#PermitRootLogin.*/PermitRootLogin yes/' \
-e 's/PasswordAuthentication.*/PasswordAuthentication no/' \
-e 's/SyslogFacility.*/SyslogFacility AUTH/' \
-e 's/#LogLevel.*/LogLevel INFO/' \
&& mkdir /var/run/sshd \
&& /usr/sbin/sshd-keygen -A \
&& /usr/sbin/sshd
#我这里是redhat,所以使用下面方式安装,若是Ubuntu等可以自主调节
RUN /bin/bash -c ' yum -y install git; \
yum install -y unzip; \
yum clean all'
RUN cd /opt \
&& unzip sonar-scanner-$SONAR_SCANNER_VERSION.zip \
&& mv sonar-scanner-$SONAR_SCANNER_VERSION sonar-scanner \
&& rm sonar-scanner-$SONAR_SCANNER_VERSION.zip
VOLUME "${JENKINS_AGENT_HOME}" "/tmp" "/run" "/var/run"
WORKDIR "${JENKINS_AGENT_HOME}"
EXPOSE 22
切换到Dockerfile所在目录执行以下命令制作镜像:
# docker build -f Dockerfile -t jenkins-slave:8.0 .
nodejs:v10.15.0
FROM jenkins-slave:8.0
MAINTAINER XXX
#npm私服不是必须的,不配也可以,下面的设置npm的也可以不要
ENV NODE_VERSION=v10.15.0 \
NPM_REGISTRY_URL=http://npm.xxx.com
#install nodejs
RUN xz -d /opt/node-${NODE_VERSION}-linux-x64.tar.xz \
&& cd /opt/ \
&& tar -xvf node-${NODE_VERSION}-linux-x64.tar \
&& rm node-${NODE_VERSION}-linux-x64.tar \
&& mv node-{NODE_VERSION}-linux-x64 node \
&& ln -s /opt/node/bin/node /usr/local/bin/node \
&& ln -s /opt/node/bin/npm /usr/local/bin/npm \
&& npm config set registry ${NPM_REGISTRY_URL}
ENV NODE_HOME=/opt/node \
PATH=$PATH:$NODE_HOME/bin \
NODE_PATH=$NODE_HOME/lib/node_modules
切换到Dockerfile所在目录执行以下命令制作镜像:
# docker build -t nodejs:v10.15.0 .
maven:8.0
FROM jenkins-slave:8.0
MAINTAINER XXX
ENV M2_HOME=/opt/maven \
M2_VERSION=3.6.0 \
PATH=/opt/maven/bin:$PATH
COPY apache-maven-${M2_VERSION}-bin.tar.gz /opt/
RUN cd /opt \
&& tar -xvf /opt/apache-maven-${M2_VERSION}-bin.tar.gz -C /opt/ \
&& mv apache-maven-${M2_VERSION} maven \
&& rm /opt/apache-maven-${M2_VERSION}-bin.tar.gz
#我这里需要覆盖自带的settings文件,使用配置好的maven私服
COPY conf/settings.xml ${M2_HOME}/conf/settings.xml
切换到Dockerfile所在目录执行以下命令制作镜像:
# docker build -t maven:8.0 .
httpd:7.5
FROM redhat:7.5
MAINTAINER XXX
#我这里直接yum安装失败,所以重新配置一份yum源,没有yum就搭建
COPY BOC.repo /etc/yum.repos.d/BOC.repo
RUN /bin/bash -c ' yum -y install httpd; \
yum clean all'
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
切换到Dockerfile所在目录执行以下命令制作镜像:
# docker build -t httpd:7.5 .
newman:5.0.0
FROM nodejs:v10.15.0
MAINTAINER XXX
ENV NEWMAN_HOME=/opt/node
ENV PATH=$PATH:$NEWMAN_HOME/bin
RUN npm install -g newman \
&& npm install -g newman-reporter-html
切换到Dockerfile所在目录执行以下命令制作镜像:
# docker build -t newman:5.0.0 .
sonar:6.7.4
FROM java:8.0
MAINTAINER XXX
ENV SONAR_VERSION=6.7.4 \
SONARQUBE_HOME=/opt/sonarqube \
# Database configuration
# Defaults to using H2
SONARQUBE_JDBC_USERNAME=sonar \
SONARQUBE_JDBC_PASSWORD=sonar \
SONARQUBE_JDBC_URL="jdbc:mysql://IP:PORT/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false"
# Http port
EXPOSE 9000
RUN groupadd -r sonarqube && useradd -r -g sonarqube sonarqube
COPY sonarqube-$SONAR_VERSION.zip /opt/
COPY run.sh /opt/
RUN /bin/bash -c ' yum install -y unzip; \
yum clean all'
RUN set -x \
&& cd /opt \
&& unzip sonarqube-$SONAR_VERSION.zip \
&& mv sonarqube-$SONAR_VERSION sonarqube \
&& rm sonarqube-$SONAR_VERSION.zip \
&& mv run.sh $SONARQUBE_HOME/bin/ \
&& chmod +x $SONARQUBE_HOME/bin/run.sh
ENTRYPOINT /opt/sonarqube/bin/run.sh
RUN cd /opt \
&& chown -R sonarqube:sonarqube sonarqube
run.sh(跟Dockerfile在同级目录)
#!/bin/bash
set -e
if [ "${1:0:1}" != '-' ]; then
exec "$@"
fi
chown -R sonarqube:sonarqube $SONARQUBE_HOME
exec sudo -u sonarqube \
java -jar /opt/sonarqube/lib/sonar-application-$SONAR_VERSION.jar \
-Dsonar.log.console=true \
-Dsonar.jdbc.username="$SONARQUBE_JDBC_USERNAME" \
-Dsonar.jdbc.password="$SONARQUBE_JDBC_PASSWORD" \
-Dsonar.jdbc.url="$SONARQUBE_JDBC_URL" \
-Dsonar.web.javaAdditionalOpts="$SONARQUBE_WEB_JVM_OPTS -Djava.security.egd=file:/dev/./urandom" \
"$@"
切换到Dockerfile所在目录执行以下命令制作镜像:
# docker build -t sonar:6.7.4 .