GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menggunakan Tulis Docker

Apa itu Docker Compose?

Jika aplikasi Docker Anda menyertakan lebih dari satu container (misalnya, server web dan database yang berjalan di container terpisah), membuat, menjalankan, dan menghubungkan container dari Dockerfile terpisah akan merepotkan dan memakan waktu. Docker Compose memecahkan masalah ini dengan mengizinkan Anda menggunakan file YAML untuk menentukan aplikasi multi-kontainer. Anda dapat mengonfigurasi wadah sebanyak yang Anda inginkan, bagaimana wadah itu harus dibangun dan dihubungkan, dan di mana data harus disimpan. Saat file YAML selesai, Anda dapat menjalankan satu perintah untuk membangun, menjalankan, dan mengonfigurasi semua container.

Panduan ini akan menjelaskan bagaimana docker-compose.yml file diatur, dan tunjukkan cara menggunakannya untuk membuat beberapa konfigurasi aplikasi dasar.

Catatan Umumnya container dalam aplikasi yang dibangun menggunakan Docker Compose semuanya akan berjalan pada host yang sama. Mengelola container yang berjalan di host yang berbeda biasanya memerlukan alat tambahan, seperti Docker Swarm atau Kubernetes.

Sebelum Anda Mulai

Instal Docker CE

Anda memerlukan Linode dengan Docker CE yang diinstal untuk mengikuti langkah-langkah dalam panduan ini.

Untuk menginstal Docker CE (Edisi Komunitas), ikuti petunjuk dalam salah satu panduan di bawah ini:

  • Menginstal dan Menggunakan Docker di Ubuntu dan Debian

  • Memasang dan Menggunakan Docker di CentOS dan Fedora

Untuk instruksi lengkap tentang distribusi Linux lainnya, lihat bagian Instal Docker Engine dari dokumentasi resmi Docker.

Instal Docker Compose

  1. Unduh versi terbaru Docker Compose. Periksa halaman rilis dan ganti 1.25.4 pada perintah di bawah ini dengan versi yang ditandai sebagai Rilis terbaru :

     sudo curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
  2. Setel izin file:

     sudo chmod +x /usr/local/bin/docker-compose
    

Penggunaan Dasar

Bagian ini akan meninjau contoh file Docker Compose yang diambil dari dokumentasi resmi Docker.

  1. Buka docker-compose.yml di editor teks dan tambahkan konten berikut:

    File:buruh pelabuhan -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    version: '3'
    
    services:
       db:
         image: mysql:5.7
         volumes:
           - db_data:/var/lib/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: somewordpress
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: wordpress
    
       wordpress:
         depends_on:
           - db
         image: wordpress:latest
         ports:
           - "8000:80"
         restart: always
         environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: wordpress
    volumes:
        db_data:
  2. Simpan file dan jalankan Docker Compose dari direktori yang sama:

    docker-compose up -d
    

    Ini akan membangun dan menjalankan db dan wordpress kontainer. Sama seperti saat menjalankan satu wadah dengan docker run , -d flag memulai container dalam mode terpisah.

  3. Anda sekarang memiliki wadah WordPress dan wadah MySQL yang berjalan di host Anda. Arahkan ke 192.0.8.1:8000/wordpress di browser web untuk melihat aplikasi WordPress yang baru Anda instal. Anda juga dapat menggunakan docker ps untuk mengeksplorasi lebih lanjut konfigurasi yang dihasilkan:

    docker ps
    
  4. Hentikan dan keluarkan wadah:

    docker-compose down
    

Tulis Sintaks File

Sebuah docker-compose.yml file diatur menjadi empat bagian:

Petunjuk Gunakan
versi Menentukan versi sintaks file Compose. Panduan ini akan menggunakan Versi 3 secara keseluruhan.
layanan Di Docker, layanan adalah nama untuk "Kontainer dalam produksi". Bagian ini mendefinisikan container yang akan dimulai sebagai bagian dari instance Docker Compose.
jaringan Bagian ini digunakan untuk mengkonfigurasi jaringan untuk aplikasi Anda. Anda dapat mengubah setelan jaringan default, menyambung ke jaringan eksternal, atau menentukan jaringan khusus aplikasi.
volume Memasang jalur tertaut pada mesin host yang dapat digunakan oleh penampung.

Sebagian besar panduan ini akan berfokus pada penyiapan penampung menggunakan services bagian. Berikut adalah beberapa arahan umum yang digunakan untuk menyiapkan dan mengonfigurasi container:

Petunjuk Gunakan
gambar Menyetel gambar yang akan digunakan untuk membangun wadah. Menggunakan direktif ini mengasumsikan bahwa gambar yang ditentukan sudah ada di host atau di Hub Docker.
bangun Direktif ini dapat digunakan sebagai pengganti image . Menentukan lokasi Dockerfile yang akan digunakan untuk membangun container ini.
db Dalam kasus file contoh Dockercompose, db adalah variabel untuk wadah yang akan Anda definisikan.
mulai ulang Memberitahu wadah untuk memulai ulang jika sistem dimulai ulang.
volume Memasang jalur tertaut pada mesin host yang dapat digunakan oleh penampung
lingkungan Tentukan variabel lingkungan yang akan diteruskan ke perintah run Docker.
tergantung_pada Menetapkan layanan sebagai ketergantungan untuk wadah yang ditentukan blok saat ini
pelabuhan Memetakan port dari container ke host dengan cara berikut:host:container
tautan Tautkan layanan ini ke layanan lain di file Docker Compose dengan menyebutkan namanya di sini.

Banyak arahan konfigurasi lain yang tersedia. Lihat referensi Compose File untuk detailnya.

Hati-hati Contoh docker-compose.yml di atas menggunakan environment direktif untuk menyimpan kata sandi pengguna MySQL langsung di file YAML untuk diimpor ke wadah sebagai variabel lingkungan. Ini tidak disarankan untuk informasi sensitif di lingkungan produksi. Sebagai gantinya, informasi sensitif dapat disimpan dalam .env yang terpisah file (yang tidak diperiksa ke dalam kontrol versi atau dipublikasikan) dan diakses dari dalam docker-compose.yml dengan menggunakan env_file arahan.

Membangun Aplikasi dari Awal

Buat docker-compose.yml file satu bagian pada satu waktu untuk mengilustrasikan langkah-langkah membangun aplikasi multi-kontainer.

Mendefinisikan Layanan Sederhana:

  1. Buat docker-compose.yml baru di editor teks dan tambahkan konten berikut:

    File:buruh pelabuhan -compose.yml
    1
    2
    3
    4
    5
    6
    7
    8
    
    version: '3'
    
    services:
      distro:
        image: alpine
        restart: always
        container_name: Alpine_Distro
        entrypoint: tail -f /dev/null

    Setiap entri dalam services bagian akan membuat wadah terpisah ketika docker-compose dijalankan. Pada titik ini, bagian tersebut berisi satu wadah berdasarkan distribusi resmi Alpine:

    • restart direktif digunakan untuk menunjukkan bahwa container harus selalu dimulai ulang (misalnya setelah crash atau sistem di-boot ulang).
    • container_name direktif digunakan untuk mengganti nama container yang dibuat secara acak dan menggantinya dengan nama yang lebih mudah diingat dan digunakan.
    • Kontainer Docker keluar secara default jika tidak ada proses yang berjalan di dalamnya. tail -f adalah proses yang berkelanjutan, sehingga akan berjalan tanpa batas waktu dan mencegah container berhenti. entrypoint default diganti agar container tetap berjalan.
  2. Buka wadah Anda:

    docker-compose up -d
    
  3. Periksa status penampung Anda:

     docker ps
    

    Outputnya harus seperti berikut:

    CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS               NAMES
    967013c36a27        alpine              "tail -f /dev/null"   3 seconds ago       Up 2 seconds                            Alpine_Distro
  4. Turunkan wadahnya:

     docker-compose down
    

Tambahkan Layanan Tambahan

Dari sini Anda bisa mulai membangun ekosistem container. Anda dapat menentukan cara mereka bekerja sama dan berkomunikasi.

  1. Buka kembali docker-compos.yml dan tambahkan database layanan di bawah ini:

    File:buruh pelabuhan -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    version: '3'
    
    services:
      distro:
        image: alpine
        container_name: Alpine_Distro
        restart: always
        entrypoint: tail -f /dev/null
    
      database:
        image: postgres:latest
        container_name: postgres_db
        volumes:
          - ../dumps:/tmp/
        ports:
          - "5432:5432"

    Sekarang ada dua layanan yang ditentukan:

    • Distro
    • Basis Data

    Layanan Distro masih sama seperti sebelumnya. Server Database berisi instruksi untuk wadah postgres, dan arahan:volumes: - ../dumps:/tmp dan ports:-"5432:5432" , direktif pertama memetakan /dumps containerd folder ke /tmp lokal kami map. Arahan kedua memetakan port container ke port host lokal.

  2. Periksa container yang sedang berjalan:

    docker ps
    

    Perintah ini menunjukkan status container, pemetaan port, nama, dan perintah terakhir yang dijalankan pada container tersebut. Penting untuk dicatat bahwa wadah postgres membaca “docker-entrypoint…” di bawah perintah. Skrip Entrypoint PostgresDocker adalah yang terakhir diluncurkan saat container dimulai.

    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
    ecc37246f6ef        postgres:latest     "docker-entrypoint..."   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp   postgres_db
    35dab3e712d6        alpine              "tail -f /dev/null"      About a minute ago   Up About a minute                            Alpine_Distro
  3. Turunkan kedua wadah:

     docker-compose down
    

Tambahkan Layanan nginx

  1. Tambahkan wadah nginx agar aplikasi Anda dapat melayani situs web:

    File:buruh pelabuhan -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    version: '3'
    
    services:
      distro:
        image: alpine
        container_name: Alpine_Distro
        restart: always
        entrypoint: tail -f /dev/null
    
      database:
        image: postgres:latest
        container_name: postgres_db
        volumes:
          - ../dumps:/tmp/
        ports:
          - "5432:5432"
      web:
        image: nginx:latest
        container_name: nginx
        volumes:
          - ./mysite.template:/etc/nginx/conf.d/mysite.template
        ports:
          - "8080:80"
        environment:
          - NGINX_HOST=example.com
          - NGINX_port=80
        links:
          - database:db
          - distro

    docker-compose . ini file berisi beberapa arahan baru:lingkungan dan tautan . Arahan pertama menetapkan opsi tingkat waktu proses di dalam wadah. links menciptakan jaringan ketergantungan antara wadah. Wadah nginx bergantung pada dua lainnya untuk dieksekusi. Selain itu, wadah yang sesuai akan dapat dijangkau pada nama host yang ditunjukkan oleh alias. Dalam hal ini, ping db dari web container akan mencapai database melayani. Meskipun Anda tidak memerlukan links arahan untuk wadah untuk berbicara satu sama lain, links dapat berfungsi sebagai failsafe saat memulai aplikasi docker-compose.

  2. Mulai Docker Compose dan periksa status container:

     docker-compose up -d
     docker ps
    

    Outputnya harus mirip dengan:

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    55d573674e49        nginx:latest        "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes        0.0.0.0:8080->80/tcp     nginx
    ad9e48b2b82a        alpine              "tail -f /dev/null"      3 minutes ago       Up 3 minutes                                 Alpine_Distro
    736cf2f2239e        postgres:latest     "docker-entrypoint..."   3 minutes ago       Up 3 minutes        0.0.0.0:5432->5432/tcp   postgres_db
  3. Uji nginx dengan menavigasi ke alamat IP publik Linode Anda, port 8080 di browser (misalnya 192.0.2.0:8080 ). Anda akan melihat halaman arahan nginx default ditampilkan.

Penyimpanan Data Persisten

Menyimpan data PostgreSQL langsung di dalam wadah tidak disarankan. Kontainer Docker dimaksudkan untuk diperlakukan sebagai sementara:kontainer aplikasi Anda dibuat dari awal saat menjalankan docker-compose up dan dihancurkan saat menjalankan docker-compose down . Selain itu, setiap crash atau restart yang tidak terduga pada sistem Anda akan menyebabkan data apa pun yang disimpan dalam wadah hilang.

Untuk alasan ini, penting untuk menyiapkan volume persisten pada host yang akan digunakan container database untuk menyimpan datanya.

  1. Tambahkan volumes ke docker-compose.yml dan edit database layanan untuk merujuk ke volume:

    File:buruh pelabuhan -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    version: '3'
    
    services:
      distro:
        image: alpine
        container_name: Alpine_Distro
        restart: always
        entrypoint: tail -f /dev/null
    
      database:
        image: postgres:latest
        container_name: postgres_db
        volumes:
          - data:/var/lib/postgresql
        ports:
          - "5432:5432"
      web:
        image: nginx:latest
        container_name: nginx
        volumes:
          - ./mysite.template:/etc/nginx/conf.d/mysite.template
        ports:
          - "8080:80"
        environment:
          - NGINX_HOST=example.com
          - NGINX_port=80
        links:
          - database:db
          - distro
    volumes:
      data:
        external: true
  2. external: true memberitahu Docker Compose untuk menggunakan volume data eksternal yang sudah ada sebelumnya. Jika tidak ada volume bernama data hadir, memulai aplikasi akan menyebabkan kesalahan. Buat volumenya:

    docker volume create --name=data
    
  3. Jalankan aplikasi seperti sebelumnya:

    docker-compose up -d
    

Langkah Selanjutnya

Docker Compose adalah alat yang ampuh untuk mengatur kumpulan wadah yang dapat bekerja bersama. Hal-hal seperti aplikasi atau lingkungan pengembangan dapat menggunakan komposisi Docker. Hasilnya adalah lingkungan modular dan dapat dikonfigurasi yang dapat digunakan di mana saja.


Docker
  1. Cara Menggunakan Gambar Docker, Wadah, dan File Docker Secara Mendalam

  2. Bagaimana Menghubungkan Kontainer Docker

  3. Cara Mendaftar Kontainer Docker

  1. Cara Menggunakan Profil Layanan untuk Menyederhanakan Tumpukan di Docker Compose

  2. Cara Menggunakan Perintah Inspeksi Docker

  3. Cara Menginstal dan Menggunakan Docker Compose di CentOS

  1. Cara Menginstal dan Menggunakan Docker Compose di Ubuntu 18.04

  2. Cara Menginstal dan Menggunakan Docker Compose di CentOS 7

  3. Cara mengkonfigurasi buruh pelabuhan untuk menggunakan proxy