Docker: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Создание контейнера для разработки приложения на Lazarus)
(Создание контейнера для разработки приложения на Lazarus)
Строка 14: Строка 14:
 
===Создание файлов===
 
===Создание файлов===
  
В рабочем каталоге содайте файл  
+
В рабочем каталоге создайте файл  
  
 
  Dockerfile_dev
 
  Dockerfile_dev
Строка 25: Строка 25:
  
 
ENV DEBIAN_FRONTEND noninteractive
 
ENV DEBIAN_FRONTEND noninteractive
ENV USER vasya
+
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

Создание контейнера для запуска приложения на Lazarus