Menginstal dan Mengkonfigurasi Docker di Windows Subsystem Linux (WSL)

Prasyarat


Sebelum Anda mulai, pastikan sistem Anda memiliki kira-kira konfigurasi berikut:

  • Windows 10 Versi 1803 Build 1734 dan yang lebih baru
  • Ubuntu untuk WSL 16.0.4 LTS atau sesuatu seperti itu (versi Anda mungkin sedikit berbeda)

Penting bahwa versi dan versi Windows tidak lebih rendah dari yang ditunjukkan di sini. Faktanya adalah bahwa, dimulai dengan angka-angka ini, perubahan mendasar telah dibuat untuk kernel Windows WSL yang memungkinkan penggunaan cgroups (kelompok kontrol - ditambahkan ke kernel Linux pada 2008). Dan mereka diperlukan untuk Docker untuk mengelola sumber daya sistem Anda dalam wadah.



Instal Docker-CE 09.17.0


Kami akan menginstal Docker Community Edition 17.09.0 (karena pada saat penulisan ini, versi yang lebih baru telah jatuh ketika diinstal pada WSL).

Hal pertama yang akan kita lakukan adalah menyingkirkan semua instalasi Docker sebelumnya (jika ada). Untuk melakukan ini, jalankan terminal bash dan tulis yang berikut ini:

$ sudo apt-get remove docker docker-engine docker.io containerd runc


Sekarang instal repositori untuk Docker CE. Melalui apt-get, kita dapat menginstal versi yang diperlukan tanpa harus membangunnya dari sumber sendiri. Mengikuti rekomendasi di situs web Docker resmi, kami menulis perintah berikut:

#   
$ sudo apt-get update
#   ,   apt    HTTPS
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

#      GPG   Docker
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#  Docker   :
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

#        Docker    
$ sudo apt-get update

Jika Anda pernah menambahkan repositori baru menggunakan apt, semua ini akrab bagi Anda secara keseluruhan. Jika tidak, saya harap Anda tetap bersama saya :)

Selanjutnya, instal Docker:

$ sudo apt-get install docker-ce=17.09.0~ce-0~ubuntu

Jika Anda tidak menggunakan WSL gaya Ubuntu, Anda dapat melihat daftar versi yang tersedia seperti ini:

$ apt list -a docker-ce


... atau gunakan perintah serupa dari beberapa pustaka lain jika Anda meninggalkan APT.

Pada akhirnya, Anda perlu menambahkan pengguna Anda saat ini ke grup buruh pelabuhan agar dapat menggunakan Mesin Docker dengan benar, yang seharusnya dijalankan pada sistem Anda dengan sebagai root.

sudo usermod -aG docker $USER

Menjalankan Docker di Windows


Sekarang setelah Docker diinstal, kita perlu menggunakan metode yang agak rumit untuk memulainya sebagai layanan di WSL setiap kali kita mem-boot Windows. Ini tidak semudah kelihatannya. Kita perlu bertindak atas nama pengguna super dan menjalankan shell perintah dengan hak istimewa yang ditinggikan, yang sedikit menyulitkan tugas.

Untuk sedikit menyederhanakan proses, buat file baru di / usr / local / sbin / - skrip yang berisi perintah yang sesuai untuk memulai layanan Docker:

$ sudo nano /usr/local/sbin/start_docker.sh

dengan konten berikut:

#!/usr/bin/env bash
sudo cgroups-mount
sudo service docker start

Perintah sudo pertama adalah me-mount cgroups (itu akan dieksekusi saat reboot), dan yang kedua memberikan layanan buruh pelabuhan ke systemd (ini adalah subsistem Ubuntu untuk menginisialisasi dan mengelola layanan).

Sekarang biarkan skrip berjalan dan jalankan:

$ sudo chmod +x /usr/local/sbin/start_docker.sh
#  
$ sudo chmod 755 /usr/local/sbin/start_docker.sh
$ /bin/sh /usr/local/sbin/start_docker.sh

Namun, layanan Docker tidak akan mulai karena dua alasan:

  1. Skrip membuat panggilan sebagai pengguna super, jadi skrip itu sendiri harus dijalankan dengan hak akses pengguna super agar berfungsi sebagaimana dimaksud. Secara teori, melakukan ini sesederhana menulis perintah sudo apa pun, tetapi untuk ini, pengguna harus memasukkan data setelah setiap unduhan, yang sangat mengganggu.
  2. Perintah pertama untuk me-mount cgroup harus dijalankan di bash dengan privilege yang lebih tinggi. Untuk menjalankannya tanpa input pengguna, kita harus menggunakan Penjadwal Tugas Windows.

Semua jelas? Lalu ke titik ...

Menjalankan skrip dengan hak akses root tanpa input pengguna


Dalam keluarga OS Linux, file / etc / sudoers menentukan siapa dan apa yang dapat dijalankan dengan hak superuser. Mari memodifikasinya sehingga pengguna Anda dapat memanggil skrip tanpa harus terus memasukkan kata sandi root. (Tapi hati-hati dengan file ini! Sangat mudah untuk keluar dari sistem jika Anda tidak tahu apa yang Anda lakukan!)

$ sudo nano /etc/sudoers

Tambahkan baris baru ke akhir file. Dalam hal ini, Anda harus tahu persis nama pengguna Anda (jalankan echo $ USER, jika Anda tidak yakin):

<your username here> ALL=(ALL:ALL) NOPASSWD: /bin/sh /usr/local/sbin/start_docker.sh

Sekarang kita dapat memulai layanan Docker sebagai root tanpa input pengguna:

$ sudo /bin/sh /usr/local/sbin/start_docker.sh 

Hore, kawan!

Startup Docker yang Tepat pada Boot Windows


Sekarang, ketika sistem melakukan boot, kita akan dapat meluncurkan Docker sebagai administrator menggunakan perintah terpisah yang tidak memerlukan interaksi pengguna.



Luncurkan Penjadwal Tugas Windows dan pilih Perpustakaan Penjadwal Tugas di panel kiri. Kemudian pilih Buat Tugas di panel kanan.



Selanjutnya, Anda akan diminta untuk mengedit pengaturan dasar tugas. Beri tugas Anda nama yang jelas dan pastikan bahwa semua setelan cocok dengan saya. Penting bahwa Anda memilih Jalankan dengan hak istimewa tertinggi .



Di tab Pemicu , tambahkan pemicu baru yang akan memulai tugas segera setelah pengguna lokal masuk.



Beralih ke tab Tindakan , buat tindakan baru yang akan menjalankan bash dan segera jalankan skrip kami dengan sakelar -c :

-c "sudo /bin/sh /usr/local/sbin/start_docker.sh"


Harap perhatikan bahwa ini harus dilakukan dengan hak istimewa yang ditingkatkan, jadi centang kotak centang Jalankan dengan hak istimewa tertinggi pada tab Umum .



Parameter lainnya terutama tergantung pada preferensi individu, tetapi saya akan menunjukkan pengaturan saya. Jika mau, Anda bisa menyalinnya. Beberapa pengaturan daya mungkin tidak muncul jika Anda duduk di mobil yang tidak bergerak. Secara pribadi, saya menggunakan laptop.



Yah, semuanya berjalan seperti yang kita inginkan. Jika Anda tidak meluncurkan Docker pada tahap sebelumnya menggunakan hak yang lebih tinggi, cukup klik kanan pada tugas yang kami buat di Penjadwal Tugas dan pilih "Jalankan"! Itu saja!

Periksa apakah semuanya berfungsi


Jika Anda ingin bermain aman, reboot mesin Anda (ya, untuk ini Anda harus menutup tab browser Anda untuk beberapa waktu) , mulai bash dan masukkan:

$ docker run --rm hello-world

Jika semuanya berjalan dengan baik, Anda akan melihat salam standar Docker. Layanan akan mulai secara otomatis dan langsung di WSL! Selamat!

Membulatkan


Anda baru saja menginstal dan memulai Docker di WSL. Ini berarti bahwa kontainer Anda sekarang dapat membagikan Ubuntu yang sudah berjalan di sistem Anda. Jadi, tidak perlu menggunakan OS baru (tervirtualisasi), seperti yang dilakukan Docker untuk Windows.

Kinerja Docker di WSL sejauh ini [pada saat penulisan artikel asli] menyisakan banyak yang diinginkan, tetapi karena platform berkembang dan pembaruan Windows dirilis, itu hanya akan membaik.


  1. onomatopellan GitHub: https://github.com/Microsoft/WSL/issues/2291#issuecomment-383698720
  2. Official Docker Documentation: https://docs.docker.com/install/linux/docker-ce/ubuntu/
  3. cgroupfs-mount: https://github.com/tianon/cgroupfs-mount
  4. Bash Command Line Interface: https://docs.microsoft.com/en-us/windows/wsl/reference


All Articles