Anda dapat menyetel perintah max_fails dan fail_timeout dari nginx untuk menunjukkan bahwa nginx harus mencoba ulang x jumlah permintaan koneksi ke container sebelum gagal pada ketidaktersediaan server upstream.
Anda dapat menyetel kedua angka ini sesuai infrastruktur Anda dan kecepatan seluruh penyiapan akan datang. Anda dapat membaca lebih banyak detail tentang bagian health check di URL di bawah ini: //nginx.org/en/docs/http/load_balancing.html
Berikut adalah kutipan dari //nginx.org/en/docs/http/ngx_http_upstream_module.html#server max_fails=number
menetapkan jumlah upaya gagal untuk berkomunikasi dengan server yang harus terjadi dalam durasi yang ditetapkan oleh parameter fail_timeout untuk mempertimbangkan server tidak tersedia untuk durasi yang juga ditetapkan oleh parameter fail_timeout. Secara default, jumlah upaya yang gagal diatur ke 1. Nilai nol menonaktifkan penghitungan upaya. Apa yang dianggap sebagai upaya yang tidak berhasil ditentukan oleh arahan proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, dan memcached_next_upstream.
fail_timeout=time
menetapkan waktu selama sejumlah upaya komunikasi yang tidak berhasil untuk berkomunikasi dengan server harus dilakukan untuk mempertimbangkan server tidak tersedia; dan jangka waktu server dianggap tidak tersedia. Secara default, parameter disetel ke 10 detik.
Tepatnya file konfigurasi nginx Anda yang dimodifikasi harus seperti berikut (skrip ini mengasumsikan bahwa semua kontainer naik setidaknya 25 detik, jika tidak, silakan ubah fail_timeout atau max_fails di bawah bagian hulu): Catatan: Saya tidak uji skripnya sendiri, jadi Anda bisa mencobanya!
upstream phpupstream { server waapi_php_1:9000 fail_timeout=5s max_fails=5; } server { listen 80; root /var/www/test; error_log /dev/stdout debug; access_log /dev/stdout; location / { # try to serve file directly, fallback to app.php try_files $uri /index.php$is_args$args; } location ~ ^/.+\.php(/|$) { # Referencing the php service host (Docker) fastcgi_pass phpupstream; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; # We must reference the document_root of the external server ourselves here. fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name; fastcgi_param HTTPS off; } }Selain itu, sesuai Catatan berikut dari buruh pelabuhan ( //github.com/docker/docker.github.io/blob/master/compose/networking.md#update-containers ), terbukti bahwa logika coba lagi untuk memeriksa Kesehatan dari container lain bukanlah tanggung jawab buruh B / M dan sebaliknya container tersebut harus melakukan health check sendiri.
Memperbarui kontainer
Jika Anda membuat perubahan konfigurasi pada layanan dan menjalankan docker-compose untuk memperbaruinya, container lama akan dihapus dan container baru akan bergabung dengan jaringan di bawah alamat IP yang berbeda tetapi dengan nama yang sama. Penampung yang berjalan akan dapat mencari nama itu dan terhubung ke alamat baru, tetapi alamat lama akan berhenti berfungsi.
Jika ada kontainer yang memiliki koneksi terbuka ke kontainer lama, mereka akan ditutup. Merupakan tanggung jawab penampung untuk mendeteksi kondisi ini, mencari namanya lagi, dan menyambungkan kembali.
Cara konfigurasi docker hingga terhubung
nginx + php + mysql
1. Buka repo git berikut ini
//github.com/IshtarStar/docker-compose-nginx-phpfpm
simpan file yang penting berikut ini pada suatu folder
- default.conf
- docker-compose.yml
buat folder src/index.php (isi terserah, bisa langung file koneksi)
pada file docker-compose.xml
ganti php 8 menjadi 7
2. pastikan docker compose sudah terinstall di komputer
masuk ke terminal dengan mode root lalu ketikkan perintah
docker-compose up
prosess installasi nginx dan php akan dilakukan secara otomatis,
setelah proses installasi selesai. kita dapat mengecek nginx dan php dengan cara masuk ke container php-fpm
ketikkan perintah berikut ini
docker ps
docker exec -it <idCntainer> bash
untuk installasi awal biasanya nano belum terinall
ketikkan
apt-get update
apt-get install nano
silahkan buat file dengan extensi php (terserah) atau file koneksi mysli dengan code berikut ini :
<?php
$servername = "db:3306"; //db = nama host mysql container, 3306 adalah port container
$username = "root";
$password = "123456";
$dbname = "wp_db";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}else{
echo "koneksi suskes";
}
echo "<br>";
/*
$sql = "SELECT *from barang";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo $row["nama"]."<br>";
}
} else {
echo "0 results";
}
*/
//mysqli_close($conn);
echo "<br>";
//phpinfo();
?>
simpan, dan buka url berikut ini pada browser
//localhost:8080/koneksi.php
apabila ada peringatan koneksi error. itu wajar karena kita belum melakukan installasi mysql docker
3. Installasi mysql docker
pada tab terminal masuk dengan mode root lalu ketikkan perintah berikut ini :
docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql
setelah proses installasi selesai, kita masuk ke dalam container mysql untuk membuat database mysql
docker exec -it db mysql -u root -p
create database wp_db;
oke. sekarang database sudah selesai dibuat. sekarang kita coba buka kembali alamat ini di browser
//localhost:8080/koneksi.php
Nah kok masih error?
eit tenang, kita belum membuat network dari docker
4. Membuat network pada docker.
oke jadi kita masih perlu membuat network atau koneksi pada docker. intinya kita masih harus menguhungkan ketiga container.
docker network create net-wp
NB : net-wp adalah nama network, nama network bersifat bebas
docker network connect net-wp db
docker network connect net-wp docker_web_1
docker network connect net-wp docker_php-fpm_1
NB : db, docker_web_1, docker_php-fpm_1 adalah nama container
untuk mengecek network docker dapat dilakukan dengan perintah berikut ini
docker network inspect net-wp
restart kembali semua container. dan jalankan kembali
docker-compose up
lalu buka kembali alamat //localhost:8080/koneksi.php
seharusnya koneksi.php sudah sukses terjadi.
-------------------------------------------------------------------------------------------------------------------------
Catatan perintah pada docker :
docker pull
docker run
docker run --options
docker stop
docker start
docker ps
docker exec -it
docker logs
-------------
docker images
unt melihat images yang sudah terinstall di docker (belum ada di container)
docker run redis
unt menjalankan container + images
docker ps
unt melihat docker yang berjalan
docker run redis -d
unt menjalankan docker + images dg
mode lepas
docker stop <idContainer>6d442dc503cb
untuk menghentikan container yang berjalan
docker ps -a
untuk melihat container yang sudah exist mungkin (berhenti)
docker run -d redis:5.0
untuk menjalankan images dg versi tertentu. (akan download terlebih dahulu apabila tidak berjlan)
docker run -p 6000:6379 -d redis
untuk menjalankan container dg binding port Host dg Port bawaan images
6000 = port host
6379 = port default images redis
===============================
printah Troubleshoot docker
docker logs <idContainer>
untuk melihat logs dari container
sama dengan
docker logs <namaContainer>
docker logs -f <namaContainer>
untuk mengecek logs terakhir pada container
docker run -d -p 6000:6379 --name redis_jadul redis:5.0
untuk mensetting nama pada container
docker exec -it <idContainer> bash
untuk masuk ke dalam container
hostname
pwd
dll
env
unt melihat environtment di dalam container
exit
untuk keluar dari container
docker run -d \
-p 5432:5432 \
--name todo-postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=rahasia \
-e POSTGRES_DB=belajar \
-v $(pwd)/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql \
postgres
netstat -nlp | grep 8080
kill PID
You have to remove (or rename) that container to be able to reuse that name
docker ps -a
docker rm name_of_the_docker_container
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php
docker run --name mynginx -p 8080:80 -v "$PWD":/usr/share/nginx/html:ro -d nginx
docker run --name some-nginx -p 8080:80 -v ~/site-content:/usr/share/nginx/html:ro -d nginx
docker run -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx
docker run -it --rm -d -p 8080:80 -v ~/site-content:/usr/share/nginx/html nginx
docker run -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx
docker run -p 8080:80 -v ~/site-content:/app ~/site-content:/var/log/nginx:/var/log/nginx nginx
docker run -it --rm --name my-running-script -p 8001:80 -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php hello.php
untuk mendapatkan IP
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 1f0ccad7f303
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
untuk melihat servic yang aktif di dalam container
service --status-all
untuk setting ssh user login
//www.youtube.com/watch?v=GicWz2OF0sk
//phoenixnap.com/kb/how-to-ssh-into-docker-container
//stackoverflow.com/questions/22499443/why-the-sshd-service-is-unrecognized
docker exec -it 494aa867466b /bin/bash
docker exec -it 233c93e5153a /bin/sh
docker exec -u 0 -it 494aa867466b bash
untuk masuk ke dalam kontainer
belajar docker
//rizkimufrizal.github.io/belajar-docker/
//github.com/GrzegorzBGda/clean-docker-php
stop dan start container
docker build -t nginx_webserver .
------------------------------------
//www.youtube.com/watch?v=wjEv6Kj6yRw&t=3s
networking
docker run --name wp -p 3035:80 -d wordpress
docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker exec -it db mysql -u root -p
create database wp_db;
docker network create net-wp
docker network ls
docker network connect net-wp db
docker network connect net-wp wp
docker network inspect net-wp
docker network rm 2a714f6a59b2
docker network rm net-wp
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
docker run --name some-nginx -p 8080:80 -v ~/site-content:/usr/share/nginx/html -d nginx
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php your-script.php
kode untuk Dockerfile
docker build -t nginx_webserver .
netstat -nlp | grep 8080
kill PID
cara membuat container dari images
docker run --name mynginx1 -p 8080:80 -d nginx
it work
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php
it work
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-fpm php
catatan nginx + php + mysql
1) //github.com/IshtarStar/docker-compose-nginx-phpfpm
buat docker-compose.yml
buat default.conf
buat folder src/index.php (isi terserah, bisa langung file koneksi)
ganti php 8 menjadi 7
install images
//hub.docker.com/_/mysql
//hub.docker.com/_/php
docker file :
FROM php:7.4-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
jalankan docker compose up
lalu masuk ke container php dan install file berikut
docker-php-ext-install mysqli
docker-php-ext-enable mysqli
matikan docker-compose dan jalankan lagi
lihat di phpinfo seharusnya mysqli sudah muncul
cek di phpinfo()
apakh mysqli sudah terinsall
jalankan images mysql menjadi container
lalu buat databasesnya (masuk ke container)
file koneksi.php
host : nama container misal (db)
user : root
pwd : misal 12345
db : database yang kita buat (opsional)
apabila masih muncul pesan error
Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution
buat netwrok yang mencangkup ketiga(semua container)
seharusnya docker sudah bisa mengakses database
--------------------------------
docker stop namaContainer
docker start namaContainer
docker restart namaContainer
--------------------------------
restart all container (waspada)
docker restart $(docker ps -a -q)
Perintah Berbahaya, peringatan!!!.
docker rm -vf $(docker ps -aq)
hapus semua container
docker rmi -f $(docker images -aq)
untuk remove semua images
install ulang docker-compose
rm /usr/local/bin/docker-compose
sudo curl -L "//github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/bin/docker-compose