Docker: различия между версиями
Перейти к навигации
Перейти к поиску
Vovan (обсуждение | вклад) (→Создание контейнера для разработки приложения на Lazarus) |
Vovan (обсуждение | вклад) (→Создание контейнера для разработки приложения на Lazarus) |
||
Строка 14: | Строка 14: | ||
===Создание файлов=== | ===Создание файлов=== | ||
− | В рабочем каталоге | + | В рабочем каталоге создайте файл |
Dockerfile_dev | Dockerfile_dev | ||
Строка 25: | Строка 25: | ||
ENV DEBIAN_FRONTEND noninteractive | ENV DEBIAN_FRONTEND noninteractive | ||
− | ENV USER | + | ENV USER ubuntu |
ENV HOME /home/$USER | ENV HOME /home/$USER | ||
Строка 63: | Строка 63: | ||
EXPOSE 6080 5901 4040 | EXPOSE 6080 5901 4040 | ||
+ | </pre> | ||
+ | |||
+ | В рабочем каталоге создайте файл | ||
+ | |||
+ | supervisor.conf | ||
+ | |||
+ | со следующим содержимым: | ||
+ | |||
+ | <pre> | ||
+ | [program:vncserver] | ||
+ | command=vncserver -geometry 1600x900 :1 | ||
+ | user=ubuntu | ||
+ | |||
+ | [program:noVNC] | ||
+ | command=/home/ubuntu/noVNC/utils/launch.sh --vnc localhost:5901 | ||
+ | user=ubuntu | ||
+ | stdout_logfile=/var/log/novnc.log | ||
+ | redirect_stderr=true | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | В рабочем каталоге создайте файл | ||
+ | |||
+ | startup.sh | ||
+ | |||
+ | со следующим содержимым: | ||
+ | |||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | |||
+ | if [ ! -f $HOME/.vnc/passwd ] ; then | ||
+ | |||
+ | if [ -z "$PASSWORD" ] ; then | ||
+ | PASSWORD=`pwgen -c -n -1 12` | ||
+ | echo -e "PASSWORD = $PASSWORD" > $HOME/password.txt | ||
+ | fi | ||
+ | |||
+ | echo "$USER:$PASSWORD" | chpasswd | ||
+ | |||
+ | # Set up vncserver | ||
+ | su $USER -c "mkdir $HOME/.vnc && echo '$PASSWORD' | vncpasswd -f > $HOME/.vnc/passwd && chmod 600 $HOME/.vnc/passwd && touch $HOME/.Xresources" | ||
+ | chown -R $USER:$USER $HOME | ||
+ | |||
+ | if [ ! -z "$SUDO" ]; then | ||
+ | case "$SUDO" in | ||
+ | [yY]|[yY][eE][sS]) | ||
+ | adduser $USER sudo | ||
+ | esac | ||
+ | fi | ||
+ | |||
+ | else | ||
+ | |||
+ | VNC_PID=`find $HOME/.vnc -name '*.pid'` | ||
+ | if [ ! -z "$VNC_PID" ] ; then | ||
+ | vncserver -kill :1 | ||
+ | rm -rf /tmp/.X1* | ||
+ | fi | ||
+ | |||
+ | fi | ||
+ | |||
+ | if [ ! -z "$NGROK" ] ; then | ||
+ | case "$NGROK" in | ||
+ | [yY]|[yY][eE][sS]) | ||
+ | su ubuntu -c "$HOME/ngrok/ngrok http 6080 --log $HOME/ngrok/ngrok.log --log-format json" & | ||
+ | sleep 5 | ||
+ | NGROK_URL=`curl -s http://127.0.0.1:4040/status | grep -P "http://.*?ngrok.io" -oh` | ||
+ | su ubuntu -c "echo -e 'Ngrok URL = $NGROK_URL/vnc.html' > $HOME/ngrok/Ngrok_URL.txt" | ||
+ | esac | ||
+ | fi | ||
+ | |||
+ | /usr/bin/supervisord -n | ||
</pre> | </pre> | ||
==Создание контейнера для запуска приложения на Lazarus== | ==Создание контейнера для запуска приложения на Lazarus== |
Версия 23:01, 13 октября 2020
Содержание
Лабораторные работы по Docker
Создание простого контейнера
fixme
Создание контейнера для разработки приложения на Lazarus
Откройте терминал хостовой машины и создайте рабочий каталог
mkdir docker
Перейдите в рабочий каталог
cd docker
Создание файлов
В рабочем каталоге создайте файл
Dockerfile_dev
по следующему шаблону (в файле нужно изменить имя и емэйл разработчика на собственное):
FROM ubuntu:16.04 MAINTAINER Vasya I Pupkin <vasya@pupkin.com> ENV DEBIAN_FRONTEND noninteractive ENV USER ubuntu ENV HOME /home/$USER # Create new user for vnc login. RUN adduser $USER --disabled-password # Install MATE and dependency component. RUN apt-get update \ && apt-get install -y \ tightvncserver \ mate-core mate-desktop-environment mate-notification-daemon \ supervisor \ net-tools \ curl \ git \ pwgen \ lazarus \ && apt-get autoclean \ && apt-get autoremove \ && rm -rf /var/lib/apt/lists/* # Clone noVNC. RUN git clone https://github.com/novnc/noVNC.git $HOME/noVNC # Clone websockify for noVNC Run git clone https://github.com/kanaka/websockify $HOME/noVNC/utils/websockify # Download ngrok. ADD https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip $HOME/ngrok/ngrok.zip RUN unzip -o $HOME/ngrok/ngrok.zip -d $HOME/ngrok && rm $HOME/ngrok/ngrok.zip # Copy supervisor config. COPY supervisor.conf /etc/supervisor/conf.d/ # Copy startup script. COPY startup.sh $HOME EXPOSE 6080 5901 4040
В рабочем каталоге создайте файл
supervisor.conf
со следующим содержимым:
[program:vncserver] command=vncserver -geometry 1600x900 :1 user=ubuntu [program:noVNC] command=/home/ubuntu/noVNC/utils/launch.sh --vnc localhost:5901 user=ubuntu stdout_logfile=/var/log/novnc.log redirect_stderr=true
В рабочем каталоге создайте файл
startup.sh
со следующим содержимым:
#!/bin/bash if [ ! -f $HOME/.vnc/passwd ] ; then if [ -z "$PASSWORD" ] ; then PASSWORD=`pwgen -c -n -1 12` echo -e "PASSWORD = $PASSWORD" > $HOME/password.txt fi echo "$USER:$PASSWORD" | chpasswd # Set up vncserver su $USER -c "mkdir $HOME/.vnc && echo '$PASSWORD' | vncpasswd -f > $HOME/.vnc/passwd && chmod 600 $HOME/.vnc/passwd && touch $HOME/.Xresources" chown -R $USER:$USER $HOME if [ ! -z "$SUDO" ]; then case "$SUDO" in [yY]|[yY][eE][sS]) adduser $USER sudo esac fi else VNC_PID=`find $HOME/.vnc -name '*.pid'` if [ ! -z "$VNC_PID" ] ; then vncserver -kill :1 rm -rf /tmp/.X1* fi fi if [ ! -z "$NGROK" ] ; then case "$NGROK" in [yY]|[yY][eE][sS]) su ubuntu -c "$HOME/ngrok/ngrok http 6080 --log $HOME/ngrok/ngrok.log --log-format json" & sleep 5 NGROK_URL=`curl -s http://127.0.0.1:4040/status | grep -P "http://.*?ngrok.io" -oh` su ubuntu -c "echo -e 'Ngrok URL = $NGROK_URL/vnc.html' > $HOME/ngrok/Ngrok_URL.txt" esac fi /usr/bin/supervisord -n