Penyetelan Server
Menginstal Mesin Docker di server
Overhead Docker di Linux minimal. Docker di Mac berjalan di mesin virtual Linux, sedangkan di Linux secara langsung menggunakan kernel host. Anda dapat membaca lebih lanjut tentang ini di sini .
Karena ping kecil penting bagi kami, masuk akal untuk membeli hosting di Moskow, tetapi tidak banyak perbedaannya.
Total: Linux, Moskow, karakteristik tergantung pada kebutuhan Anda.
Hanya ada tarif siap pakai yang murah untuk ini di ruvds.com . Juga di ruvds.com dimungkinkan untuk memesan pengaturan segera dengan Docker CE di papan. Agak, tapi bagus.
Cari kata sandi dan login di antarmuka web hosting Anda dan hubungkan.


Selanjutnya, instal Docker. Ada instruksi yang sangat baik di sini , di bawah ini saya akan secara singkat memberikan perintah darinya (jika Anda tiba-tiba tidak memilikinya
sudo, jangan lupa untuk menginstalnya apt-get install sudodari bawah su):
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Mari kita periksa pekerjaan buruh pelabuhan:
docker run hello-world

Menghasilkan kunci
Pertama, Anda perlu membuat kunci SSL. Anda bisa mengikuti jalan yang mudah dan sulit. Untuk instruksi tentang jalur keras (kanonik), lihat dokumentasi Docker . Tetapi orang-orang yang baik memasukkan semuanya ke dalam wadah <10mb.
Mari buat folder untuk permulaan, tempat kita akan menyimpan semuanya. Folder bisa apa saja. Yang pertama (
/etc/docker/ssl) menyimpan kunci rahasia, yang kedua ( ~/.docker) adalah kunci untuk akses.
sudo mkdir -p /etc/docker/ssl
mkdir -p ~/.docker
Pertama, mari buat sertifikat klien dan CA di folder lokal
docker run --rm -v ~/.docker:/certs \
paulczar/omgwtfssl
Mari buat sertifikat server menggunakan CA yang dibuat di atas. Tentukan di sana, dipisahkan dengan koma, IP yang akan Anda gunakan untuk mengakses server. Dalam kasus kami, jangan lupa untuk menentukan IP server Anda di sana!
sudo cp ~/.docker/ca.pem /etc/docker/ssl/ca.pem
chown -R $USER ~/.docker
docker run --rm -v /etc/docker/ssl:/server \
-v ~/.docker:/certs \
-e SSL_IP=127.0.0.1,172.17.8.101,YOUR_IP \
-e SSL_DNS=docker.local -e SSL_KEY=/server/key.pem \
-e SSL_CERT=/server/cert.pem paulczar/omgwtfssl
Konfigurasi daemon buruh pelabuhan
Tugas utama pada tahap ini adalah mendorong argumen baris perintah dengan parameter yang kita butuhkan saat memulai buruh pelabuhan. Bagaimana Anda melakukannya tidak penting, di Ubuntu Anda dapat melakukannya seperti ini:
1. Edit file dengan
/etc/default/dockereditor favorit Anda
nano /etc/default/docker
Dan tambahkan variabel `DOCKER_OPTS` di akhir. Jangan lupa memasukkan IP eksternal Anda di sana
DOCKER_OPTS="-H=YOUR_IP:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/cert.pem --tlskey=/etc/docker/ssl/key.pem"
2. Tambahkan argumen untuk memulai layanan. Di Ubuntu, file parameter startup adalah
/lib/systemd/system/docker.service. Tambahkan baris ke sub-bagian [Service]:
EnvironmentFile=/etc/default/docker
Dan kami mengubah perintah peluncuran secara berdampingan:
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
Ya, poin 1 adalah opsional, argumen perintah dapat disisipkan di sini, tetapi ada beberapa di antaranya dan tidak nyaman untuk memiliki perintah yang besar untuk dijalankan di file layanan.
3. Mulai ulang daemon
sudo systemctl daemon-reload
sudo systemctl restart docker
4. Periksa di log daemon apakah semuanya berfungsi:
journalctl -u docker.service -f

5. Mari kita coba terhubung melalui tls:
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
docker info

Kerja!
Konfigurasi pada klien
Sebelum Anda mulai mengkonfigurasi klien, Anda perlu mengunduh folder sertifikat ke komputer Anda. Anda dapat melakukannya dengan cara apa pun yang nyaman. Misalnya, melalui `scp`:
Di mesin jarak jauh:
mkdir /tmp/cert-for-docker && cp -v ~/.docker/{ca,cert,key}.pem /tmp/cert-for-docker
Di mesin lokal:
scp -r root@YOUR_IP:/tmp/cert-for-docker ~/.docker
Selanjutnya, gunakan folder ini untuk mengkonfigurasi klien buruh pelabuhan Anda.
Mac OS CLI
Di sini pengaturannya turun pada fakta bahwa Anda perlu mendaftarkan variabel di lingkungan Anda dan semuanya akan berfungsi. Namun, muncul pertanyaan: “Di mana saya bisa mendapatkan klien tanpa busana? Kami tidak membutuhkan klien kelas berat 2GB resmi yang dikirimkan dengan Mesin Docker, bukan? "
Ada solusinya! Docker modern telah lama dibagi menjadi bagian klien dan server. Anda dapat mengunduh biner klien terpisah yang dikompilasi untuk macOS. Instruksi resminya ada di sini , tetapi saya akan memberikan ekstrak singkatnya di sini:
1. Unduh binari terbaru atau yang sesuai dengan server Anda (Anda dapat menariknya dengan perintah
docker info) dari tautan dan membongkar
2. Salin binari ke folder
/usr/local/bin/untuk bekerja secara global:
sudo cp docker/docker /usr/local/bin/
3. Kami mendaftar
~/.bashrcatau ~/.zshrcvariabel lingkungan yang diperlukan. Jangan lupa untuk memasukkan IP dan jalur Anda ke folder dengan sertifikat :
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_CERT_PATH=PATH_TO_CERT
export DOCKER_TLS_VERIFY=1
4. Restart komputer (Schaub pasti), periksa:
docker info
docker run hello-world

Kecantikan!
Jetbrains IDE (PyCharm, IDEA, Android Studio, dll)
Studio Jetbrains mendukung buruh pelabuhan melalui tls di luar kotak. Pengaturan ini terletak di
Preference->Build, Execution, Deployment->Docker->+. Anda perlu memilih TCP socketdan memasukkan detail Anda di sana. Namun, ada tangkapan.

Jika semuanya dilakukan seperti yang dimaksudkan, maka kesalahan akan muncul:
Respons kesalahan dari daemon: Klien mengirim permintaan HTTP ke server HTTPS.Atau
kesalahan info pencetakan cantik
Tidak dapat terhubung: Status 400: Klien mengirim permintaan HTTP ke server HTTPSPenting untuk secara eksplisit meresepkan ke studio kami protokol apa yang kami gunakan
https:
ANDA_IP : 2376Semuanya akan bekerja dengan baik setelahnya.
Bonus (Portainer)
Untuk melacak secara efektif container yang sedang berjalan dan sudah digunakan, saya menginstal Portainer di server ini. Itu harus ditempatkan dalam dua baris:
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Setelah itu,
YOUR_IP:9000antarmuka web yang indah akan bertahan dan Anda dapat melihat kontainer yang berjalan dan mati. Ingat bagaimana kita memulai hello-world? Itu ada di sini dan Anda dapat membersihkannya langsung dari antarmuka.

Portainer itu sendiri dapat dihubungkan ke mesin Docker apa pun dan mengelola kontainer buruh pelabuhan semua mesin Anda dari satu tempat. Metrik (Grafana + Prometheus + Alerts) dapat diatur dengan mudah dengan dua perintah (jangan lupa untuk menginstal
gi dan docker-compose):
git clone https://github.com/stefanprodan/dockprom && cd dockprom
ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d


Hanya untuk Storage Anda perlu perubahan
sum(node_filesystem_free_bytes{fstype="aufs"})untuksum(node_filesystem_free_bytes{fstype="ext4"})

Kesimpulan
Ketika saya membeli laptop, saya tidak memanjakan diri dengan harapan akan cukup untuk saya untuk tugas apa pun, terutama karena itu akan cukup untuk saya untuk pengembangan Java / Android. Tapi saya sangat terkejut, sejauh ini semua proyek saya, pribadi dan hanya sumber terbuka, terbang di IDE. Namun, saya menyadari bahwa untuk semua kecintaan saya pada mesin tik ini, Docker tidak akan mati. Saya sangat senang telah mengonfigurasinya sekali di server buruh pelabuhan jarak jauh. Selama proses pengembangan, sangat tidak terlihat bahwa server bukan lokal. Saya tidak merasakan batasan apa pun, itu semua sama untuk menjalankan Docker tanpa internet sebelumnya tidak masuk akal. Secara umum, saya sangat puas. -1 alasan untuk membeli laptop yang kuat dan berat.
Selain itu, biaya overhead Docker untuk Linux minimal, sehingga Anda dapat menyewa mobil seharga 240 rubel per bulan dari RuVDS di Federasi Rusia (dan dengan diskon menggunakan kode promo HABR-10% dan bahkan kurang) dan tidak perlu khawatir tentang ping dan dampak aplikasi server pada UI. Ditambah ada IP eksternal (kemampuan untuk menunjukkan klien dan menyimpan pasir pengembang), VPN pribadi dan keandalan kelas atas. Secara keseluruhan, saya puas.
Sumber:
- Artikel 2016 tentang kustomisasi untuk CoreOS
- Docker Remote API tanpa enkripsi
- Situs Docker dan semua sumber daya yang ditautkan ke dalam artikel itu sendiri
