GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara membuat Gambar Docker dengan Dockerfile di Ubuntu 18.04 LTS

Docker adalah virtualisasi tingkat sistem operasi yang terutama ditujukan untuk pengembang dan sysadmin. Docker mempermudah pembuatan dan penerapan aplikasi di lingkungan yang terisolasi.

Dockerfile adalah skrip yang berisi kumpulan perintah dan instruksi yang akan dieksekusi secara otomatis secara berurutan di lingkungan buruh pelabuhan untuk membangun image buruh pelabuhan baru.

Dalam tutorial ini, kami akan menunjukkan cara membuat gambar Docker Anda sendiri dengan Dockerfile. Kami akan menjelaskan detail terkait Dockerfile agar Anda dapat membangun image Docker Anda sendiri.

Prasyarat

Untuk panduan ini, kami akan menggunakan Ubuntu 18.04 dengan 1GB RAM, 25 GB ruang disk kosong, dan 2 CPU. Selain itu, kami akan menggunakan Ubuntu 18.04 sebagai gambar dasar untuk membuat gambar Docker khusus.

Pengantar Perintah Dockerfile

Dockerfile adalah skrip yang berisi semua perintah untuk membangun image Docker. Dockerfile berisi semua instruksi yang akan digunakan untuk membuat image Docker dengan perintah 'docker build'.

Sebelum membuat Dockerfile pertama Anda, Anda harus terbiasa dengan instruksi Dockerfile. Di bawah ini beberapa instruksi Dockerfile yang harus Anda ketahui.

DARI

Atur gambar dasar untuk gambar baru yang ingin Anda buat. Instruksi FROM akan menginisialisasi tahap build baru dan harus ditempatkan di bagian atas Dockerfile.

LABEL

Dengan instruksi ini, Anda dapat menambahkan informasi tambahan tentang image Docker Anda, seperti versi, deskripsi, pengelola, dll. Instruksi LABEL adalah pasangan nilai kunci yang memungkinkan Anda menambahkan beberapa label dan nilai multi-baris.

JALANKAN

Instruksi ini digunakan untuk menjalankan perintah selama proses pembuatan gambar buruh pelabuhan. Anda dapat menginstal paket tambahan yang diperlukan untuk image Docker Anda.

TAMBAHKAN

Instruksi ADD digunakan untuk menyalin file, direktori, atau file jarak jauh dari URL ke gambar Docker Anda, dari 'src' ke jalur absolut 'tujuan'. Selain itu, Anda dapat mengatur kepemilikan default file Anda.

ENV

Instruksi ENV digunakan untuk mendefinisikan variabel lingkungan yang dapat digunakan selama tahap pembuatan dan juga dapat diganti sebaris di banyak variabel.

CMD

Instruksi CMD digunakan untuk menentukan perintah default yang akan dijalankan saat menjalankan container. Dan Dockerfile hanya boleh berisi satu instruksi CMD, dan jika ada beberapa CMD, instruksi CMD terakhir akan dijalankan.

EKSPOSE

Instruksi ini digunakan untuk mengekspos port container pada port jaringan tertentu saat runtime. Protokol default yang diekspos adalah TCP, tetapi Anda dapat menentukan apakah TCP atau UDP.

ARG

Instruksi ARG digunakan untuk mendefinisikan variabel yang dapat dilewatkan pengguna pada waktu yang dibangun. Anda dapat menggunakan instruksi ini di docker 'build command' selama waktu build menggunakan opsi '--build-arg variable=value' dan dapat diteruskan melalui Dockerfile. Anda juga dapat menggunakan beberapa ARG di Dockerfile.

ENTRYPOINT

Instruksi ENTRYPOINT digunakan untuk mendefinisikan perintah pertama dan default yang akan dijalankan ketika container sedang berjalan. Tentukan perintah untuk memulai aplikasi Anda dengan instruksi ENTRYPOINT.

DIREKTUR KERJA

Instruksi WORKDIR digunakan untuk menentukan direktori kerja default dari image Docker Anda. Instruksi RUN, CMD, ENTRYPOINT, dan ADD mengikuti instruksi WORKDIR. Anda dapat menambahkan beberapa instruksi WORKDIR pada Dockerfile Anda, dan jika tidak ada, maka akan dibuat secara otomatis.

USER

Instruksi USER digunakan untuk mendefinisikan pengguna atau gid default saat menjalankan gambar. RUN, CMD, dan ENTRYPOINT mengikuti instruksi USER di Dockerfile.

VOLUME

Iklan instruksi VOLUME digunakan untuk mengaktifkan akses/direktori tertaut antara penampung dan mesin host.

Sekarang, mari kita mulai membuat Dockerfile pertama.

Langkah 1 - Instal Docker CE (Edisi Komunitas)

Sebelum membuat Dockerfile, kita akan menginstal Docker CE ke sistem Ubuntu 18.04 kita.

Perbarui indeks paket Ubuntu dan instal beberapa paket menggunakan perintah apt di bawah ini.

sudo apt update
sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
perangkat lunak-properti-umum

Selanjutnya, tambahkan kunci GPG dari repositori Docker resmi.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Selanjutnya, tambahkan repositori Docker CE Community Edition menggunakan perintah berikut.

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
stabil"

Perintah akan secara otomatis memperbarui indeks paket lagi.

Selanjutnya, instal paket Docker CE menggunakan perintah apt di bawah ini.

sudo apt install docker-ce docker-ce-cli containerd.io

Setelah semua instalasi selesai, mulai layanan Docker dan tambahkan ke boot sistem.

systemctl start docker
systemctl aktifkan docker

Layanan Docker aktif dan berjalan, sekarang jalankan perintah docker di bawah ini untuk memastikan penginstalan sudah benar.

docker menjalankan hello-world

Di bawah ini adalah hasil yang akan Anda dapatkan.

Halo dari Docker!
Pesan ini menunjukkan bahwa penginstalan Anda tampaknya berfungsi dengan benar.

Untuk membuat pesan ini, Docker melakukan langkah-langkah berikut:
 1. Docker klien menghubungi daemon Docker.
 2. Daemon Docker menarik image "hello-world" dari Docker Hub.
    (amd64)
 3. Daemon Docker membuat container baru dari situ image yang menjalankan
    yang dapat dieksekusi yang menghasilkan keluaran yang sedang Anda baca.
 4. Daemon Docker mengalirkan keluaran tersebut ke klien Docker, yang mengirimkannya
    ke terminal Anda.

Untuk mencoba sesuatu yang lebih ambisius, Anda dapat menjalankan wadah Ubuntu dengan:
 $ docker run -it ubuntu bash

Berbagi gambar, otomatisasi alur kerja, dan banyak lagi dengan ID Docker gratis :
 https://hub.docker.com/

Untuk contoh dan ide lainnya, kunjungi:
 https://docs.docker.com/get-started/

Seperti yang terlihat, Anda mendapatkan pesan hello-world dari Docker, dan penginstalan Docker CE telah berhasil diselesaikan.

Langkah 2 - Buat Dockerfile dan Konfigurasi Lainnya

Pada langkah ini, kami akan menunjukkan cara membuat image Docker kustom untuk aplikasi Anda menggunakan Dockerfile. Kami akan membuat image Docker kustom baru berdasarkan image Ubuntu 18.04, untuk layanan PHP-FPM dan Nginx, kemudian menjalankan container baru dengan skrip phpinfo sederhana.

Pertama, buat direktori proyek baru dan buat file Docker kosong.

mkdir -p nginx-image; cd nginx-image/
sentuh Dockerfile

Sekarang edit skrip 'Dockerfile' menggunakan editor Anda sendiri (untuk contoh ini kami menggunakan vim).

vim Dockerfile

Di bagian atas baris, tambahkan gambar dasar gambar Ubuntu 18.04 menggunakan instruksi FROM seperti di bawah ini.

#Unduh gambar dasar ubuntu 18.04
DARI ubuntu:18.04

Sekarang tambahkan informasi detail tentang gambar kustom menggunakan instruksi LABEL.

# LABEL tentang gambar khusus
LABEL maintainer="[email protected]"
LABEL version="0.1"
LABEL description="Ini adalah Gambar Docker khusus untuk \
Layanan PHP-FPM dan Nginx."

Untuk instalasi paket apt, kami akan melewatkan langkah pasca-instal interaktif apa pun menggunakan variabel lingkungan 'DEBIAN_FRONTEND=noninteractive'.

# Nonaktifkan Prompt Selama Instalasi Paket
ARG DEBIAN_FRONTEND=noninteractive

Selanjutnya, jalankan perintah 'apt update' sebelum menginstal paket apa pun.

# Perbarui repositori Perangkat Lunak Ubuntu
Jalankan pembaruan yang tepat

Sekarang instal paket Nginx, PHP-FPM, dan supervisor. Setelah semua instalasi selesai, hapus semua cache paket untuk mengurangi ukuran gambar kustom.

# Instal nginx, php-fpm dan supervisor dari repositori ubuntu
Jalankan apt install -y nginx php-fpm supervisor &&\
    rm -rf /var/lib/apt/lists/* &&\
    tepat bersih

Tentukan variabel lingkungan baru yang dapat diteruskan pada gambar khusus.

#Tentukan variabel ENV
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/7.2/fpm/php.ini
ENV nginx_conf /etc /nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf

Sekarang salin konfigurasi default Nginx ke variabel 'nginx_vhost', ganti konfigurasi PHP 'cgi.fix_pathinfo=1' dengan 'cgi.fix_pathinfo=0' pada file konfigurasi php.ini, lalu tambahkan opsi 'daemon off' ke variabel 'nginx_conf' default.

# Aktifkan PHP-fpm pada konfigurasi nginx virtualhost
COPY default ${nginx_vhost}
Jalankan sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' ${php_conf} &&\
    echo "\ndaemon off;">> ${nginx_conf}

Salin konfigurasi supervisor kustom ke variabel 'supervisor_conf'.

#Salin konfigurasi supervisor
COPY supervisord.conf ${supervisor_conf}

Buat direktori baru untuk file sock PHP-FPM, ubah kepemilikan direktori web-root '/var/www/html' dan direktori PHP-FPM '/run/php' menjadi pengguna default 'www-data'.

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

Tentukan volume untuk gambar kustom sehingga kami dapat memasang semua direktori tersebut ke mesin host.

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

Sekarang tambahkan skrip 'start.sh' dan tentukan perintah container default menggunakan instruksi CMD seperti di bawah ini.

# Salin skrip start.sh dan tentukan perintah default untuk wadah
COPY start.sh /start.sh
CMD ["./start.sh"]

Dan yang terakhir, buka port HTTP dan HTTPS default pada container menggunakan instruksi EXPOSE.

# Port Paparan untuk Aplikasi 
EXPOSE 80 443

Simpan dan tutup.

Di bawah ini adalah script Dockerfile lengkap yang baru saja kita buat.

# Unduh gambar dasar ubuntu 18.04
DARI ubuntu:18.04

# LABEL tentang gambar khusus
LABEL maintainer="[email protected]"
versi LABEL ="0.1"
LABEL description="Ini adalah Gambar Docker khusus untuk \
PHP-FPM dan Layanan Nginx."

# Nonaktifkan Prompt Selama Instalasi Paket
ARG DEBIAN_FRONTEND=noninteractive

# Perbarui repositori Perangkat Lunak Ubuntu
RUN apt update

# Instal nginx, php-fpm dan supervisor dari repositori ubuntu
RUN apt install -y nginx php-fpm supervisor &&\
    rm -rf /var/lib/apt/lists/* &&\
    apt clean
    
# Tentukan variabel ENV
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/7.2/fpm/php.ini
ENV nginx_conf /etc/nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf

# Aktifkan PHP-fpm pada konfigurasi nginx virtualhost
COPY default ${nginx_vhost}
Jalankan sed -i -e 's/;cgi.fix_pathinfo=1/ cgi.fix_pathinfo=0/g' ${php_conf} &&\
    echo "\ndaemon off;">> ${nginx_conf}
    
# Salin konfigurasi supervisor
COPY supervisord.conf ${supervisor_conf}

Jalankan mkdir -p /run/php &&\
    chown -R www-data:www-data /var/www/html &&\
    chown -R www-data:www-data /run/php
    
# Konfigurasi volume
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www /html"]

# Salin skrip start.sh dan tentukan perintah default untuk wadah
COPY start.sh /start.sh
CMD ["./start.sh" ]

# Port Paparan untuk Aplikasi
EXPOSE 80 443

Selanjutnya, kita akan membuat konfigurasi tambahan baru untuk Nginx, supervisord, dan skrip start.sh.

Konfigurasi virtualhost Nginx 'default' akan berisi bagian untuk PHP-FPM. Akibatnya, Anda dapat menjalankan skrip PHP menggunakan gambar Kustom tanpa perubahan apa pun.

Buat konfigurasi virtualhost 'default' Nginx baru dengan editor Anda.

default vim

Rekatkan konfigurasi berikut ke dalamnya.

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.2-fpm.sock;
    }
}

Simpan dan tutup.

Selanjutnya, kita akan membuat konfigurasi 'supervisrod.conf' yang berisi program Nginx dan PHP-FPM yang akan berjalan secara otomatis.

Buat file 'supervisrod.conf' menggunakan editor Anda.

vim supervisord.conf

Rekatkan konfigurasi berikut ke dalamnya.

[unix_http_server]
file=/dev/shm/supervisor.sock  ; (path ke file socket)
 
[supervisord]
logfile=/var/log/supervisord.log; (file log utama; default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (maks. byte logfile utama b4 rotasi; default 50 MB)
logfile_backups=10         ; (jumlah pencadangan rotasi file log utama; default 10)
loglevel=info             ; (tingkat log;info default; lainnya:debug,peringatkan,trace)
pidfile=/tmp/supervisord.pid; (supervisord pidfile;default supervisord.pid)
nodaemon=false             ; (mulai di latar depan jika benar; default salah)
minfds=1024               ; (pendeskripsi file startup info detail minimum; default 1024)
minprocs=200               ; (pendeskripsi proses info detail; default 200)
user=root           ;

[rpcinterface:supervisor]
supervisor.rpcinterface_factory =supervisor.rpcinterface:make_main_rpcinterface
 
[supervisorctl]
serverurl=unix:///dev/shm/supervisor.sock; gunakan unix:// URL  untuk soket unix
 
[include]
files =/etc/supervisor/conf.d/*.conf
 
[program :php-fpm7.2]
command=/usr/sbin/php-fpm7.2 -F
numprocs=1
autostart=true
autorestart=true

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

Simpan dan tutup.

Sekarang buat skrip 'start.sh' menggunakan t=editor Anda, skrip tersebut akan berisi perintah supervisord untuk memulai.

vim start.sh

Rekatkan konfigurasi berikut ke dalamnya.

#!/bin/sh
/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf

Simpan dan tutup.

Jadikan skrip 'start.sh' dapat dieksekusi.

chmod +x start.sh

Hasilnya, semua konfigurasi untuk image Docker kustom kami telah dibuat, di bawah ini adalah semua konfigurasi yang telah kami buat.

pohon .

Sekarang kami siap membuat gambar kustom baru berdasarkan konfigurasi ini.

Langkah 3 - Bangun Kustom Baru dan Jalankan Kontainer Baru

Untuk membuat image khusus Docker, buka direktori proyek 'nginx-image' dan jalankan perintah 'docker build' seperti di bawah ini.

docker build -t nginx-image .

Perintah tersebut akan mengunduh gambar dasar Ubuntu 18.04 dan membuat gambar kustom baru dengan nama 'nginx-image.

Setelah semua proses selesai, periksa daftar image Docker yang tersedia di sistem Anda menggunakan perintah berikut.

gambar buruh pelabuhan ls

Di bawah ini adalah hasil yang akan Anda dapatkan.

Seperti yang dapat dilihat, image Docker kustom baru 'nginx-image' telah dibuat.

Selanjutnya, kita akan menjalankan container Docker baru berdasarkan 'nginx-image'.

Pada mesin lokal Anda, buat direktori baru bernama 'webroot' yang akan digunakan untuk menyimpan semua file web.

mkdir -p /webroot

Sekarang buat container baru bernama test-container menggunakan perintah docker run di bawah ini.

docker run -d -v /webroot:/var/www/html -p 8080:80 --name test-container nginx-image

Catatan:

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

Setelah itu, periksa semua container yang berjalan di sistem Anda menggunakan perintah berikut.

docker ps

Di bawah ini adalah hasil yang akan Anda dapatkan.

Akibatnya, penampung baru bernama 'test-container' berdasarkan 'nginx-image' dan mengekspos port 8080 aktif dan berjalan.

Langkah 4 - Pengujian

Untuk memastikan container berjalan dengan benar, kita akan membuat file index.html dan phpinfo baru pada direktori root '/ webroot' pada mesin host. Karena direktori '/webroot' di-mount ke direktori container '/var/www/html'.

Buat file index.html pada direktori '/webroot' menggunakan perintah berikut.

echo '

Nginx dan PHP-FPM 7.2 di dalam Docker Container dengan Gambar Dasar Ubuntu 18.04

'> /webroot/index.html

Sekarang uji akses container Anda dengan perintah curl pada port 8080.

curl server-ip:8080
curl -I server-ip:8080

Hasilnya, Anda akan mendapatkan halaman index.html default yang baru saja kita buat.

Selanjutnya, buat file PHP baru 'info.php' pada direktori '/webroot' untuk memastikan bahwa layanan PHP-FPM berjalan.

Buat file 'info.php' menggunakan perintah berikut.

echo ''> /webroot/info.php

Selanjutnya, buka browser web Anda dan ketik alamat IP server Anda dengan port '8080' diikuti dengan path file 'info.php'.

http://server-ip:8080/info.php

Sekarang Anda akan mendapatkan halaman phpinfo seperti di bawah ini.

Seperti yang terlihat, 'test-container' berhasil memuat skrip PHP.

Dan sebagai hasilnya, kami telah berhasil membuat image Docker kustom baru dan menjalankan container baru berdasarkan itu dengan kesalahan apa pun.


Ubuntu
  1. Cara Membuat Gambar Docker dengan Dockerfile

  2. Cara Menginstal Docker di Ubuntu 22.04 / 20.04 LTS

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

  1. Cara menginstal ONLYOFFICE 8.9.0 dengan Docker di Ubuntu

  2. Cara Menginstal Server Gitlab dengan Docker 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