手動build unity3d的docker鏡像
參考資料
本機build
FROM gableroux/unity3d:2017.4.8f1
ARG DOWNLOAD_URL=https://beta.unity3d.com/download/8140fe378247/UnitySetup-2017.4.8f1
ARG SHA1=119ec24433cf9e94ead7d62e64b69cec686d5aa5
ARG COMPONENTS=iOS,Android
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true
RUN echo "America/New_York" > /etc/timezone && \
apt-get update -qq; \
apt-get install -qq -y \
gconf-service \
lib32gcc1 \
lib32stdc++6 \
libasound2 \
libarchive13 \
libc6 \
libc6-i386 \
libcairo2 \
libcap2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libfreetype6 \
libgcc1 \
libgconf-2-4 \
libgdk-pixbuf2.0-0 \
libgl1-mesa-glx \
libglib2.0-0 \
libglu1-mesa \
libgtk2.0-0 \
libgtk3.0 \
libnotify4 \
libnspr4 \
libnss3 \
libpango1.0-0 \
libsoup2.4-1 \
libstdc++6 \
libx11-6 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
libxtst6 \
libunwind-dev \
zlib1g \
pulseaudio \
debconf \
npm \
xdg-utils \
lsb-release \
libpq5 \
xvfb \
wget \
locales \
software-properties-common \
unzip \
&& add-apt-repository ppa:openjdk-r/ppa \
&& add-apt-repository ppa:cwchien/gradle \
&& apt-get install -qq -y \
gradle \
openjdk-8-jdk \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
# Setup Android SDK/JDK Environment Variables
ENV ANDROID_SDK_VERSION ${ANDROID_SDK_VERSION:-28}
ENV ANDROID_SDK_COMPONENTS platforms;android-$ANDROID_SDK_VERSION
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre/
ENV PATH ${PATH}:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin
ENV ANDROID_HOME /opt/android-sdk-linux
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
ENV LANG en_US.UTF-8
# Install Android SDK Installer...
RUN cd /opt && \
wget -q https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip -O android-sdk.zip && \
unzip -q android-sdk.zip -d android-sdk-linux && \
rm -f android-sdk.zip && \
ls -ahl android-sdk-linux
RUN chmod -R 755 .${ANDROID_HOME}/tools/*
# Install Android SDK
RUN ${ANDROID_HOME}/tools/bin/sdkmanager ${ANDROID_SDK_COMPONENTS}
# accept license
RUN yes | ${ANDROID_HOME}/tools/bin/sdkmanager --licenses
RUN gradle -v
RUN wget -nv ${DOWNLOAD_URL} -O UnitySetup && \
# compare sha1 if given
if [ -n "${SHA1}" -a "${SHA1}" != "" ]; then \
echo "${SHA1} UnitySetup" | sha1sum --check -; \
else \
echo "no sha1 given, skipping checksum"; \
fi && \
# make executable
chmod +x UnitySetup && \
# 2017 difference: must have /tmp/ and /opt/unity/ folders before installation
mkdir -p /tmp/unity && \
mkdir -p /opt/Unity && \
# agree with license
echo y | \
# install unity with required components
xvfb-run --auto-servernum --server-args='-screen 0 640x480x24' \
./UnitySetup \
--unattended \
--install-location=/opt/Unity \
--verbose \
--download-location=/tmp/unity \
--components=$COMPONENTS && \
# make a directory for the certificate Unity needs to run
mkdir -p /root/.local/share/unity3d/Certificates/ && \
# remove setup & temp files
rm UnitySetup && \
rm -rf /tmp/unity && \
rm -rf /root/.local/share/Trash/* && \
# android specific paths
rm -rf /var/lib/apt/lists/* && \
rm -rf /tmp/* && \
rm -rf /var/tmp/*
- 使用
docker build
開始構建鏡像,這裏除了普通的命令,添加了HTTP_PROXY
和HTTPS_PROXY
來做代理,android
的sdk被牆了,還可以理解,不知到爲什麼unity3d
的一部分鏈接也無法訪問了,都需要添加代理纔行。docker build
會在一個容器內執行,--network host
纔是指定你是通過宿主機去訪問代理的
docker build -t wanderer/unity3d:2017.4.8f1-full --build-arg HTTP_PROXY=http://192.168.1.72:2080 --build-arg HTTPS_PROXY=https://192.168.1.72:2080 --network host ./
阿里雲build
- 在某些環境使用代理build並不一定方便,在我找docker國內鏡像的時候,發現了阿里雲-上雲就上阿里雲可以選擇利用海外服務器進行build,這也是不錯的選擇了
- 登錄阿里雲,並在個人中心裏面找到容器鏡像服務,然後選擇創建鏡像倉庫,只需要記得勾選
海外服務器構建
就可以了。
- 我的
Dockerfile
文件是通過github
與阿里雲綁定的,當然也可以選擇他方式
- 在
Dockerfile
文件裏面,就不能繼承gableroux/unity3d
了,阿里雲沒有這個鏡像,只有繼承ubuntu
就好了
FROM ubuntu:18.04
ARG DOWNLOAD_URL=https://beta.unity3d.com/download/8140fe378247/UnitySetup-2017.4.8f1
ARG SHA1=119ec24433cf9e94ead7d62e64b69cec686d5aa5
ARG COMPONENTS=Unity,Windows,Windows-Mono,WebGL,Mac,Mac-Mono,iOS,Android
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true
RUN echo "America/New_York" > /etc/timezone && \
apt-get update -qq; \
apt-get install -qq -y \
gconf-service \
lib32gcc1 \
lib32stdc++6 \
libasound2 \
libarchive13 \
libc6 \
libc6-i386 \
libcairo2 \
libcap2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libfreetype6 \
libgcc1 \
libgconf-2-4 \
libgdk-pixbuf2.0-0 \
libgl1-mesa-glx \
libglib2.0-0 \
libglu1-mesa \
libgtk2.0-0 \
libgtk3.0 \
libnotify4 \
libnspr4 \
libnss3 \
libpango1.0-0 \
libsoup2.4-1 \
libstdc++6 \
libx11-6 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
libxtst6 \
libunwind-dev \
zlib1g \
pulseaudio \
debconf \
npm \
xdg-utils \
lsb-release \
libpq5 \
xvfb \
wget \
locales \
software-properties-common \
unzip \
&& add-apt-repository ppa:openjdk-r/ppa \
&& add-apt-repository ppa:cwchien/gradle \
&& apt-get install -qq -y \
gradle \
openjdk-8-jdk \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
# Setup Android SDK/JDK Environment Variables
ENV ANDROID_SDK_VERSION ${ANDROID_SDK_VERSION:-28}
ENV ANDROID_SDK_COMPONENTS platforms;android-$ANDROID_SDK_VERSION
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre/
ENV PATH ${PATH}:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin
ENV ANDROID_HOME /opt/android-sdk-linux
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
ENV LANG en_US.UTF-8
# Install Android SDK Installer...
RUN cd /opt && \
wget -q https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip -O android-sdk.zip && \
unzip -q android-sdk.zip -d android-sdk-linux && \
rm -f android-sdk.zip && \
ls -ahl android-sdk-linux
RUN chmod -R 755 .${ANDROID_HOME}/tools/*
# Install Android SDK
RUN ${ANDROID_HOME}/tools/bin/sdkmanager ${ANDROID_SDK_COMPONENTS}
# accept license
RUN yes | ${ANDROID_HOME}/tools/bin/sdkmanager --licenses
RUN gradle -v
RUN wget -nv ${DOWNLOAD_URL} -O UnitySetup && \
# compare sha1 if given
if [ -n "${SHA1}" -a "${SHA1}" != "" ]; then \
echo "${SHA1} UnitySetup" | sha1sum --check -; \
else \
echo "no sha1 given, skipping checksum"; \
fi && \
# make executable
chmod +x UnitySetup && \
# 2017 difference: must have /tmp/ and /opt/unity/ folders before installation
mkdir -p /tmp/unity && \
mkdir -p /opt/Unity && \
# agree with license
echo y | \
# install unity with required components
xvfb-run --auto-servernum --server-args='-screen 0 640x480x24' \
./UnitySetup \
--unattended \
--install-location=/opt/Unity \
--verbose \
--download-location=/tmp/unity \
--components=$COMPONENTS && \
# make a directory for the certificate Unity needs to run
mkdir -p /root/.local/share/unity3d/Certificates/ && \
# remove setup & temp files
rm UnitySetup && \
rm -rf /tmp/unity && \
rm -rf /root/.local/share/Trash/* && \
# android specific paths
rm -rf /var/lib/apt/lists/* && \
rm -rf /tmp/* && \
rm -rf /var/tmp/*
ADD CACerts.pem /root/.local/share/unity3d/Certificates/