GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara membuat Gambar Docker dengan Dockerfile di Ubuntu 16.04 LTS

Pekerja Buruh adalah virtualisasi tingkat sistem operasi yang terutama ditujukan untuk pengembang dan sysadmin. Docker memudahkan pembuatan dan penerapan aplikasi di lingkungan yang terisolasi. A Dockerfile adalah skrip yang berisi kumpulan perintah dan instruksi yang akan dieksekusi secara otomatis secara berurutan di lingkungan buruh pelabuhan untuk membangun citra buruh pelabuhan baru.

Dalam tutorial ini, saya akan menunjukkan cara membuat gambar buruh pelabuhan sendiri dengan file buruh pelabuhan. Saya akan menjelaskan skrip dockerfile secara mendetail untuk memungkinkan Anda membuat skrip dockerfile Anda sendiri.

Prasyarat

  • Server Linux - Saya akan menggunakan Ubuntu 16.04 sebagai mesin host, dan Ubuntu 16.04 sebagai gambar dasar buruh pelabuhan.
  • Keistimewaan Root.
  • Memahami perintah Docker

Pengantar Perintah Dockerfile

Dockerfile adalah skrip yang berisi kumpulan perintah dockerfile dan perintah sistem operasi (mis:perintah Linux). Sebelum kita membuat dockerfile pertama, Anda harus terbiasa dengan perintah dockerfile.

Berikut adalah beberapa perintah dockerfile yang harus Anda ketahui:

DARI

Gambar dasar untuk membangun gambar baru. Perintah ini harus berada di atas dockerfile.

PELOPOR

Opsional, ini berisi nama pengelola gambar.

JALANKAN

Digunakan untuk menjalankan perintah selama proses pembuatan gambar buruh pelabuhan.

TAMBAHKAN

Salin file dari mesin host ke image buruh pelabuhan baru. Ada opsi untuk menggunakan URL untuk file tersebut, buruh pelabuhan kemudian akan mengunduh file tersebut ke direktori tujuan.

ENV

Tentukan variabel lingkungan.

CMD

Digunakan untuk menjalankan perintah saat kita membuat container baru dari image buruh pelabuhan.

ENTRYPOINT

Tentukan perintah default yang akan dijalankan saat container sedang berjalan.

DIREKTUR KERJA

Ini adalah perintah untuk menjalankan perintah CMD.

USER

Setel pengguna atau UID untuk wadah yang dibuat dengan gambar.

VOLUME

Aktifkan akses/direktori tertaut antara wadah dan mesin host.

Sekarang mari kita mulai membuat file docker pertama kita.

Langkah 1 - Memasang Docker

Masuk ke server Anda dan perbarui repositori perangkat lunak.

ssh [email protected]
apt-get update

Instal docker.io dengan perintah apt ini:

apt-get install docker.io

Ketika instalasi selesai, mulai layanan buruh pelabuhan dan aktifkan untuk memulai saat boot:

systemctl start docker
systemctl enable docker

Docker telah diinstal dan berjalan di sistem.

Langkah 2 - Buat Dockerfile

Pada langkah ini, kita akan membuat direktori baru untuk file docker dan menentukan apa yang ingin kita lakukan dengan file docker tersebut.

Buat direktori baru dan dockerfile baru dan kosong di dalam direktori tersebut.

mkdir ~/myimages 
cd myimages/
touch Dockerfile

Selanjutnya, tentukan apa yang ingin kita lakukan dengan gambar kustom baru kita. Dalam tutorial ini, saya akan menginstal Nginx dan PHP-FPM 7 menggunakan image buruh pelabuhan Ubuntu 16.04. Selain itu, kita membutuhkan Supervisord, sehingga kita dapat memulai Nginx dan PHP-FPM 7 keduanya dalam satu perintah.

Edit 'Dockerfile' dengan vim:

nano Dockerfile

Di bagian atas file, tambahkan baris dengan gambar dasar (Ubuntu 16.04) yang ingin kita gunakan.

#Download base image ubuntu 16.04
FROM ubuntu:16.04

Perbarui repositori perangkat lunak Ubuntu di dalam dockerfile dengan perintah 'RUN'.

# Update Ubuntu Software repository
RUN apt-get update

Kemudian install aplikasi yang kita butuhkan untuk custom image. Instal Nginx, PHP-FPM dan Supervisord dari repositori Ubuntu dengan apt. Tambahkan perintah RUN untuk instalasi Nginx dan PHP-FPM.

# Install nginx, php-fpm and supervisord from ubuntu repository
RUN apt-get install -y nginx php7.0-fpm supervisor && \
    rm -rf /var/lib/apt/lists/*

Pada tahap ini, semua aplikasi diinstal dan kita perlu mengkonfigurasinya. Kami akan mengkonfigurasi Nginx untuk menangani aplikasi PHP dengan mengedit konfigurasi default virtual host. Kita bisa menggantinya dengan file konfigurasi baru kita, atau kita bisa mengedit file konfigurasi yang sudah ada dengan perintah 'sed'.

Dalam tutorial ini, kita akan mengganti konfigurasi default virtual host dengan konfigurasi baru dengan menggunakan perintah dockerfile 'COPY'.

#Define the ENV variable
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/7.0/fpm/php.ini
ENV nginx_conf /etc/nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf

# Enable php-fpm on nginx virtualhost configuration
COPY default ${nginx_vhost}
RUN sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' ${php_conf} && \
    echo "\ndaemon off;" >> ${nginx_conf}

Selanjutnya, konfigurasikan Supervisord untuk Nginx dan PHP-FPM. Kami akan mengganti konfigurasi Supervisord default dengan konfigurasi baru dengan menggunakan perintah 'COPY'.

#Copy supervisor configuration
COPY supervisord.conf ${supervisor_conf}

Sekarang buat direktori baru untuk file sock php-fpm dan ubah pemilik direktori /var/www/html dan direktori PHP menjadi www-data.

RUN mkdir -p /run/php && \
    chown -R www-data:www-data /var/www/html && \
    chown -R www-data:www-data /run/php

Selanjutnya, tentukan volumenya sehingga kami dapat memasang direktori yang tercantum di bawah ini ke mesin host.

# Volume configuration
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

Terakhir, atur perintah container default 'CMD' dan buka port untuk HTTP dan HTTPS. Kami akan membuat file start.sh baru untuk perintah 'CMD' default saat container dimulai. File berisi perintah 'supervisord', dan kami akan menyalin file ke gambar baru dengan perintah 'COPY' dockerfile.

# Configure Services and Port
COPY start.sh /start.sh
CMD ["./start.sh"]

EXPOSE 80 443

Simpan file dan keluar.

Inilah Dockerfile lengkap dalam satu bagian:

#Download base image ubuntu 16.04
FROM ubuntu:16.04

# Update Software repository
RUN apt-get update

# Install nginx, php-fpm and supervisord from ubuntu repository
RUN apt-get install -y nginx php7.0-fpm supervisor && \
    rm -rf /var/lib/apt/lists/*

#Define the ENV variable
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/7.0/fpm/php.ini
ENV nginx_conf /etc/nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf

# Enable php-fpm on nginx virtualhost configuration
COPY default ${nginx_vhost}
RUN sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' ${php_conf} && \
    echo "\ndaemon off;" >> ${nginx_conf}

#Copy supervisor configuration
COPY supervisord.conf ${supervisor_conf}

RUN mkdir -p /run/php && \
    chown -R www-data:www-data /var/www/html && \
    chown -R www-data:www-data /run/php

# Volume configuration
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

# Configure Services and Port
COPY start.sh /start.sh
CMD ["./start.sh"]

EXPOSE 80 443

Sekarang di dalam direktori 'Dockerfile' kami, buat file konfigurasi baru untuk host virtual bernama 'default', file konfigurasi supervisor 'supervisord.conf' dan skrip konfigurasi layanan 'start.sh'.

vim default

Tempel konfigurasi host virtual default di bawah ini:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny all;
    #}
}

File konfigurasi yang diawasi:

vim supervisord.conf

Tempelkan konfigurasi di bawah ini:

[unix_http_server]
file=/dev/shm/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
loglevel=info                ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false               ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)
user=root             ;

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///dev/shm/supervisor.sock ; use a unix:// URL  for a unix socket

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf


[program:php-fpm7.0]
command=/usr/sbin/php-fpm7.0 -F
numprocs=1
autostart=true
autorestart=true

[program:nginx]
command=/usr/sbin/nginx
numprocs=1
autostart=true
autorestart=true

File Start.sh.

vim start.sh

Tempelkan konfigurasi di bawah ini:

#!/bin/sh

/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf

Simpan dan keluar

Jadikan start.sh dapat dieksekusi dengan perintah chmod:

chmod +x start.sh

Simpan file dan keluar.

Langkah 3 - Bangun Image Docker Baru dan Buat Container Baru Berdasarkan itu

Dockerfile dan semua file konfigurasi yang diperlukan telah dibuat, sekarang kita dapat membuat image buruh pelabuhan baru berdasarkan Ubuntu 16.04 dan file buruh pelabuhan kita dengan perintah buruh pelabuhan di bawah ini:

docker build -t nginx_image .

Ketika perintah berhasil diselesaikan, kita dapat memeriksa gambar baru 'nginx_image' dengan perintah buruh pelabuhan di bawah ini:

docker images

Kemudian kita dapat mencoba membuat wadah baru berdasarkan nginx_images. Dan sebelum membuat container baru, kita bisa membuat direktori baru di mesin host untuk data webroot.

mkdir -p /webroot

Sekarang jalankan container baru dengan perintah di bawah ini:

docker run -d -v /webroot:/var/www/html -p 80:80 --name hakase nginx_image

Kemudian kita dapat memeriksa apakah container baru dengan nama hakase berdasarkan 'nginx_image' sedang berjalan:

docker ps

Catatan:

  • --name hakase nginx_image =Kami membuat wadah baru dengan nama 'hakase', berdasarkan gambar buruh pelabuhan 'nginx_images'.
  • -p 80:80 =wadah hakase berjalan pada port 80 pada mesin host.
  • -v /webroot:/var/www/html =/webroot direktori pada mesin host tulis ulang direktori /var/www/html pada container.

Wadah baru berdasarkan nginx_image berjalan tanpa kesalahan.

Langkah 4 - Menguji Nginx dan PHP-FPM dalam Container

Coba buat file index.html baru di direktori /webroot dengan echo:

echo '<h1>Nginx and PHP-FPM 7 inside Docker Container</h1>' > /webroot/index.html

Pengujian dengan perintah curl dengan mengakses alamat ip mesin host.

curl 192.168.1.250
curl -I 192.168.1.250

Kita akan melihat hasilnya di bawah.

Selanjutnya, uji apakah PHP-FPM 7.0 berjalan dengan membuat file phpinfo baru di direktori /webroot pada mesin host.

echo '<?php phpinfo(); ?>' > /webroot/info.php

Buka browser web dan ketik alamat IP mesin host:

http://192.168.1.248/info.php

Sekarang Anda dapat melihat output dari file phpinfo.

gambar buruh pelabuhan baru 'nginx_image' telah berhasil dibuat, sekarang kita dapat membuat lebih banyak wadah berdasarkan gambar itu.


Ubuntu
  1. Cara Membuat Gambar Docker dengan Dockerfile

  2. Cara Menginstal Docker di Ubuntu 22.04 / 20.04 LTS

  3. Cara menginstal ONLYOFFICE 8.9.0 dengan Docker di Ubuntu

  1. Cara Menginstal Server Gitlab dengan Docker di Ubuntu 18.04 LTS

  2. Cara membuat Gambar Docker dengan Dockerfile di Ubuntu 18.04 LTS

  3. Cara membuat Gambar Docker dengan Dockerfile di Ubuntu 20.04 LTS

  1. Cara Menginstal GitLab dengan Docker di Ubuntu 20.04 LTS

  2. Cara Menginstal Docker di Server Ubuntu 18.04 LTS

  3. Cara Membuat File ISO di Ubuntu 18.04 LTS