Skip to content

Instantly share code, notes, and snippets.

@dimMaryanto93
Last active August 6, 2023 06:09
Show Gist options
  • Save dimMaryanto93/d92bd18da1c73c230d7762361f738524 to your computer and use it in GitHub Desktop.
Save dimMaryanto93/d92bd18da1c73c230d7762361f738524 to your computer and use it in GitHub Desktop.
Docker + Swarm: Pemula sampai Mahir

DevOps Docker: Pemula sampai Mahir

Belajar menjadi DevOps menggunakan Docker buat temen-temen yang masih pemula sampai mahir, Materi yang dibahas diantaranya

  1. Docker Container
  2. Docker Volume
  3. Docker Network
  4. Docker Dockerfile
  5. Docker Compose
  6. Docker Machine
  7. Docker Swarm
[wsl2]
memory=4GB # Limits VM memory in WSL 2 to 4 GB
processors=4 # Makes the WSL 4 VM use two virtual processors
# for windows 10 (2004)
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# for windows 10 (1903, 1909)
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
wsl --set-default-version 2
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
## create group if not exists
sudo groupadd docker
## execute this
sudo usermod -aG docker $USER
# Allows container to container communication, the solution to the problem
firewall-cmd --zone=public --add-masquerade --permanent
# Allow port 2375 expose to outside network
firewall-cmd --zone=public --add-port=2375/tcp --permanent
# reload the firewall
firewall-cmd --reload
dnf install docker-ce docker-ce-cli containerd.io
dnf install dnf-utils device-mapper-persistent-data lvm2 fuse-overlayfs wget
systemctl enable --now docker
systemctl restart docker.service
Set-ExecutionPolicy RemoteSigned | `
Set-ExecutionPolicy Restricted
Import-Module posh-git
Import-Module oh-my-posh
Import-Module posh-docker
Set-PoshPrompt -Theme robbyrussel
Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser
Install-Module -Name PSReadLine -Scope CurrentUser -Force -SkipPublisherCheck
Install-Module -Scope CurrentUser posh-docker
{
"$schema": "https://aka.ms/terminal-profiles-schema",
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"copyOnSelect": false,
"copyFormatting": false,
"profiles":
{
"defaults": { "colorScheme": "One Half Dark", "fontFace": "Cascadia Code PL" },
"list":
[
{
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"commandline": "powershell.exe",
"hidden": false
}
]
},
"schemes": [],
"actions":
[
{ "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" },
{ "command": "paste", "keys": "ctrl+v" },
{ "command": "find", "keys": "ctrl+shift+f" },
{ "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate" }, "keys": "alt+shift+d" }
]
}
docker exec -it <container-name> psql -U postgres data_db
docker image ls
## or simply using
docker images
docker logs --follow <container-name>
docker stop container <container-name>
docker container prune
docker volume prune
docker network prune
docker container run \
--name postgres_db \
-p 5432:5432 \
-v /var/lib/postgresql/data \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=data_db \
-d \
postgres
docker container run `
--name postgres_db `
-p 5432:5432 `
-v /var/lib/postgresql/data `
-e POSTGRES_PASSWORD=password `
-d `
postgres:12.6
docker pull 192.168.88.50:8086/postgresql:9.3
~ docker pull mysql:5.7 `
| docker tag mysql:5.7 192.168.88.50:8087/database/mysql:5.7 `
| docker push 192.168.88.50:8087/database/mysql:5.7
tar -zxvf nexus-<version>.unix.tar.gz
sudo firewall-cmd --zone=public --add-port=8086/tcp --permanent && \
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --add-port=8087/tcp --permanent && \
sudo firewall-cmd --reload
sudo mkdir -p /opt/nexus && \
sudo mv nexus-<version> /opt/nexus
## create symbolic executeable
cd /opt/nexus && \
ln -s nexus-<version>/bin/nexus nexus
[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
ExecStart=/opt/nexus/nexus start
ExecStop=/opt/nexus/nexus stop
LimitNOFILE=65536
User=nexus
Restart=on-abort
[Install]
WantedBy=multi-user.target
systemctl enable --now nexus.service
docker container kill my_db
docker container ls \
--filter "label=env=production"
docker container ls `
--filter "label=env=production"
docker container ls \
--format "{{ .ID }} label: {{ .Labels }} => {{ .Ports }} status: {{ .Status }}"
docker container ls `
--format "{{ .ID }} label: {{ .Labels }} => {{ .Ports }} status: {{ .Status }}"
docker container pause my_db
docker container prune
docker container rm my_db
docker container start my_db
docker container stop my_db
docker container unpause my_db
docker container run \
--name my_db \
--env POSTGRES_PASSWORD=password \
--publish 5431:5432 \
--volume /var/lib/postgresql/data \
--label env=production \
--detach \
postgres:12.3
docker container run `
--name my_db `
--env POSTGRES_PASSWORD=password `
--publish 5431:5432 `
--volume /var/lib/postgresql/data `
--label env=production `
--detach `
postgres:12.3
docker image save -o backup-postgres.tar postgres:9.6
docker images postgres
# or spesific tag
docker images postgres:12.3
docker image load -i backup-postgres.tar
docker rmi nginx postgres:12.3
# or by id
docker image rm 62d49f9bab67 b03968f50f0e
docker image rm $(docker images postgres -q)
docker image rm mysql:5.7
# or by id
docker image rm 62d49f9bab67
docker container rm -f ubuntu_bash webapp postgres_db && \
docker volume prune
docker exec -it -u www-data -w /usr/share/nginx webapp bash
docker exec -i -t -w /contoh -u root ubuntu_bash bash
docker exec -u postgres -it postgres_db psql
docker exec ubuntu_bash \
bash -c "mkdir -p /contoh && echo 'Halo saya Dimas Maryanto, sedang belajar docker' > /contoh/test.txt"
docker exec -it ubuntu_bash bash
docker container rm -f \
nginx-private nginx-localhost nginx-localnetwork nginx-worldwide
docker container run --name nginx-worldwide -d -p 8090:80 nginx && \
docker container run --name nginx-localnetwork -d -p 192.168.88.254:8080:80 nginx && \
docker container run --name nginx-localhost -d -p 127.0.0.1:80:80 nginx
docker container rm -f webapp
docker cp webapp:/etc/nginx/ .
docker cp 04e-nginx-halo.html webapp:/usr/share/nginx/html/belajar.html && \
docker exec webapp ls /usr/share/nginx/html
docker container run \
--name webapp -p 80:80 nginx
<html>
<head>
<title>Belajar Docker</title>
</head>
<body>
<h3>Docker Container nginx</h3>
<p>Hai semuanya, ini adalah contoh paragraf menggunakan syntax html</p>
</body>
</html>
docker container rm -f mydb_stats nginx_stats pgdb_stats && \
docker network prune && \
docker volume prune
docker container inspect nginx_stats
docker logs pg_failed_init
docker network inspect brige
docker stats --all --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
docker volume inspect 3b0aff9e8f40576d5867290f9d2c1571d9cfd7cc3ad5751809bb5cca10b31687
# write file .env on your project folder
POSTGRES_PASSWORD=password
POSTGRES_USER=root
POSTGRES_DB=example_db
docker run --name postgres_envfile --env-file .env -d postgres:12.6
docker container run \
--name postgres_env \
-e POSTGRES_USER=root \
-e POSTGRES_DB=example_db \
-e POSTGRES_PASSWORD=password \
-d \
postgres:12.6
docker container run `
--name postgres_env `
-e POSTGRES_USER=root `
-e POSTGRES_DB=example_db `
-e POSTGRES_PASSWORD=password `
-d `
postgres:12.6
docker container rm -f webapp ubuntu && \
docker volume prune && \
docker network prune
docker container run \
--name webapp -d nginx
docker container run `
--name webapp -d nginx
docker container run `
-it `
--name ubuntu `
--rm ubuntu:21.04 `
bash -c "apt update -y && apt install curl -y && curl http://172.17.0.2:80"
docker container run `
-it `
--name ubuntu `
--rm ubuntu:21.04 `
bash -c "apt update -y && apt install curl -y && curl http://172.17.0.2:80"
docker container run \
--name ubuntu_not_linked \
--rm ubuntu:21.04 \
bash -c "apt update -y && apt install curl -y && curl http://localhost:80"
docker container run `
--name ubuntu_not_linked `
--rm ubuntu:21.04 `
bash -c "apt update -y && apt install curl -y && curl http://localhost:80"
docker network inspect bridge
docker container run \
--name webapp \
-p 8080:80 \
--network bridge \
-d nginx
docker container run `
--name webapp `
-p 8080:80 `
--network bridge `
-d nginx
docker container rm -f webapp centos7 postgresdb && \
docker network rm backend_bridge && \
docker volume prune -f
docker container rm -f webapp centos7 postgresdb `
| docker network rm backend_bridge `
| docker volume prune -f
docker container run --name webapp -p 8080:80 \
--network backend_bridge -d nginx \
&& \
docker container run --name postgresdb \
-e POSTGRES_PASSWORD=password -p 5432:5432 \
--network backend_bridge -d postgres:12.6 \
&& \
docker container run --name centos7 \
--network backend_bridge -dit centos:7 bash
docker container run --name webapp -p 8080:80 `
--network backend_bridge -d nginx `
| `
docker container run --name postgresdb -e POSTGRES_PASSWORD=password `
-p 5432:5432 --network backend_bridge -d postgres:12.6 `
| `
docker container run --name centos7 `
--network backend_bridge -dit centos:7 bash
docker network create backend_bridge \
--driver bridge
docker network create backend_bridge `
--driver bridge
docker network inspect bridge host none
docker container run `
--name disable-net `
--network none `
-dit centos:7 bash
docker network create -d bridge prod \
--subnet=10.10.0.0/16 \
--ip-range=10.10.1.0/24 \
--gateway=10.10.1.254
docker network create -d bridge prod `
--subnet=10.10.0.0/16 `
--ip-range=10.10.1.0/24 `
--gateway=10.10.1.254
docker container rm -f $(docker container ls -aq) && \
docker volume prune -f && \
docker network prune -f
docker container rm -f $(docker container ls -aq) | `
docker volume prune -f | `
docker network prune -f
docker run -dit \
--name prod_bash2 \
--network prod \
--ip 10.10.1.50 centos:7
docker run -dit `
--name prod_bash2 `
--network prod `
--ip 10.10.1.50 centos:7
docker run --name prod_bash --network prod -dit centos:7 bash && \
docker run --name prod_webapp --network prod -d nginx
docker run --name prod_bash --network prod -dit centos:7 bash | `
docker run --name prod_webapp --network prod -d nginx
docker run --network dev --name dev_webapp -d httpd && \
docker run --network dev --name dev_bash -dit centos:7 bash && \
docker run --network sandbox --name sandbox_webapp -d httpd && \
docker run --network sandbox --name sandbox_bash -dit centos:7 bash
docker run --network dev --name dev_webapp -d httpd | `
docker run --network dev --name dev_bash -dit centos:7 bash | `
docker run --network sandbox --name sandbox_webapp -d httpd | `
docker run --network sandbox --name sandbox_bash -dit centos:7 bash
docker network create -d bridge sanbox && \
docker network create -d bridge dev
docker network create -d bridge sandbox | `
docker network create -d bridge dev
docker container rm -f $(docker container ls -aq) && \
docker volume prune -f && \
docker network prune -f
docker run --network host --name webapp -d nginx
docker container rm -f $(docker container ls -f 'network=none' -aq) && \
docker volume prune -f
docker container rm -f $(docker container ls -f 'network=none' -aq) | `
docker volume prune -f
docker container run \
--name disable-net \
--network none \
-dit centos:7 bash
docker container rm -f postgresdb-with-exist-volume webapp postgresdb && \
docker volume prune -f
docker container rm -f postgresdb-with-exist-volume webapp postgresdb | `
docker volume prune -f
docker container run \
--name postgresdb \
-e POSTGRES_PASSWORD=password \
-d postgres:12.6 && \
docker container run \
--name webapp \
-p 80:80 \
-d nginx && \
docker container run \
-e MYSQL_ROOT_PASSWORD=password \
--name mysqldb \
-d mysql:5.7
docker container run `
--name postgresdb `
-e POSTGRES_PASSWORD=password `
-d postgres:12.6 | `
docker container run `
--name webapp `
-p 80:80 `
-d nginx | `
docker container run `
-e MYSQL_ROOT_PASSWORD=password `
--name mysqldb `
-d mysql:5.7
docker container run \
--name postgresdb-with-volume \
-v pgdata_volume:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=password \
-d postgres:12.6
docker container run `
--name postgresdb-with-volume `
-v pgdata_volume:/var/lib/postgresql/data `
-e POSTGRES_PASSWORD=password `
-d postgres:12.6
docker volume create \
-d local \
--label app=database \
pgdata_volume
docker volume create `
-d local `
--label app=database `
pgdata_volume
docker volume inspect pgdata_volume
docker container run \
--name webapp_readonly \
--mount type=bind,source="$(pwd)"/html,destination=/var/www/html,readonly \
--mount type=bind,source="$(pwd)"/conf/default.conf,destination=/etc/nginx/conf.d/default.conf \
-p 9080:80 \
-d nginx
docker container run `
--name webapp_readonly `
--mount type=bind,source="$(pwd)"\html,destination=/var/www/html,readonly `
--mount type=bind,source="$(pwd)"\conf\default.conf,destination=/etc/nginx/conf.d/default.conf `
-p 9080:80 `
-d nginx
docker container run \
--name webapp_public \
--mount type=bind,source="$(pwd)"/html,destination=/var/www/html \
--mount type=bind,source="$(pwd)"/conf/default.conf,destination=/etc/nginx/conf.d/default.conf \
-p 9090:80 \
-d nginx
docker container run `
--name webapp_public `
--mount type=bind,source="$(pwd)"\html,destination=/var/www/html `
--mount type=bind,source="$(pwd)"\conf\default.conf,destination=/etc/nginx/conf.d/default.conf `
-p 9090:80 `
-d nginx
docker container run \
--name webapp \
-p 8080:80 \
-v "$(pwd)"/html:/usr/share/nginx/html \
-d nginx
docker container rm -f webapp webapp_public webapp_readonly
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/host.access.log main;
location / {
root /var/www/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Belajar HTML</title>
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<nav class="blue">
<div class="nav-wrapper container">
<a href="#" class="brand-logo">Belajar HTML</a>
<ul id="nav-mobile" class="right hide-on-med-and-down">
<li><a href="sass.html">HTML</a></li>
<li><a href="badges.html">CSS</a></li>
<li><a href="collapsible.html">JavaScript</a></li>
</ul>
</div>
</nav>
<div>
<div class="row">
<div class="col s12 m6">
<div class="card blue-grey darken-1">
<div class="card-content white-text">
<span class="card-title">HTML</span>
<p>I am a very simple card. I am good at containing small bits of information.
I am convenient because I require little markup to use effectively.</p>
</div>
<div class="card-action">
<a href="#">This is a link</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12 m6">
<div class="card blue-grey darken-1">
<div class="card-content white-text">
<span class="card-title">JavaScript</span>
<p>I am a very simple card. I am good at containing small bits of information.
I am convenient because I require little markup to use effectively.</p>
</div>
<div class="card-action">
<a href="#">This is a link</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12 m6">
<div class="card blue-grey darken-1">
<div class="card-content white-text">
<span class="card-title">CSS</span>
<p>I am a very simple card. I am good at containing small bits of information.
I am convenient because I require little markup to use effectively.</p>
</div>
<div class="card-action">
<a href="#">This is a link</a>
</div>
</div>
</div>
</div>
</div>
<!-- Compiled and minified JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
</body>
</html>
docker container rm -f webapp webapp2 local_webapp local_webapp2 local_mount_nginx local_mount_httpd && \
docker volume prune -f
docker container rm -f webapp webapp2 local_webapp local_webapp2 local_mount_nginx local_mount_httpd | `
docker volume prune -f
ServerRoot "/usr/local/apache2"
Listen 80
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
<IfModule !mpm_prefork_module>
#LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
#LoadModule cgi_module modules/mod_cgi.so
</IfModule>
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>
ServerAdmin you@example.com
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog /proc/self/fd/2
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog /proc/self/fd/1 common
</IfModule>
<IfModule headers_module>
RequestHeader unset Proxy early
</IfModule>
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
docker container run \
--label env=local \
--label type=bind \
--name local_mount_nginx \
--mount type=bind,source="$(pwd)"/html,destination=/var/www/html \
--mount type=bind,source="$(pwd)"/conf/default.conf,destination=/etc/nginx/conf.d/default.conf \
-p 9090:80 -d nginx && \
docker container run \
--label env=local \
--label type=bind \
--name local_mount_httpd \
--mount type=bind,source="$(pwd)"/html,destination=/var/www/html \
--mount type=bind,source="$(pwd)"/conf/httpd.conf,destination=/usr/local/apache2/conf/httpd.conf \
-p 9091:80 -d httpd
docker container run `
--label env=local `
--label type=bind `
--name local_mount_nginx `
--mount type=bind,source="$(pwd)"\html,destination=/var/www/html `
--mount type=bind,source="$(pwd)"\conf\default.conf,destination=/etc/nginx/conf.d/default.conf `
-p 9090:80 -d nginx | `
docker container run `
--label env=local `
--label type=bind `
--name local_mount_httpd `
--mount type=bind,source="$(pwd)"\html,destination=/var/www/html `
--mount type=bind,source="$(pwd)"\conf\httpd.conf,destination=/usr/local/apache2/conf/httpd.conf `
-p 9091:80 -d httpd
docker volume create -d local public_html && \
docker run --label env=local --name local_webapp -p 8080:80 -v public_html:/usr/share/nginx/html -d nginx && \
docker run --label env=local --name local_webapp2 -p 8081:80 -v public_html:/usr/share/nginx/html -d nginx
docker volume create -d local public_html | `
docker run --label env=local --name local_webapp -p 8080:80 -v public_html:/usr/share/nginx/html -d nginx | `
docker run --label env=local --name local_webapp2 -p 8081:80 -v public_html:/usr/share/nginx/html -d nginx
docker volume create --driver vieux/sshfs \
-o sshcmd=test@192.168.88.100:/home/test \
-o port=22 \
-o password=testing \
sshvolume
ssh-keygen -t ed25519 -C "your_email@example.com" && \
eval "$(ssh-agent -s)" && \
ssh-add ~/.ssh/id_ed25519 && \
ssh-copy-id dimasm93@192.168.88.100
docker plugin install --grant-all-permissions vieux/sshfs DEBUG=1
docker run --rm -it -u root --workdir /root \
--mount type=volume,volume-driver=vieux/sshfs,src=sshvolume,target=/root \
alpine ash
docker build -t simple-web .
docker container rm -f webapp && \
docker volume prune -f && \
docker image rm -f simple-web
docker container rm -f webapp | `
docker volume prune -f | `
docker image rm -f simple-web
docker run --name webapp -p 80:80 -d simple-web
FROM nginx
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
docker image rm -f $(docker images dimmaryanto93/centos -q)
FROM centos:7
ENV HTML=/usr/share/nginx/html
ADD *.tar.gz ${HTML}
ENTRYPOINT ["du", "-h", "--total", "/usr/share/nginx/html/"]
*.md
!README.md
## Mac OS
.DS_Store
## Jetbraint
.idea/
*.iml
*.ipl
## maven
target/*
!target/*.jar
FROM centos:7
ENV HTML=/usr/share/nginx/html
RUN mkdir -p ${HTML} && \
echo "<html><head><title>Halo World</title></head><body><h3>it's Works!</h3></body></html>" > ${HTML}/index.html
ENTRYPOINT ["cat", "/usr/share/nginx/html/index.html"]
FROM centos:7
RUN echo "halo semuanya, ini adalah contoh text" > /var/halo.txt
ENTRYPOINT [ "cat", "/var/halo.txt" ]
FROM centos:7
ENV HTML=/usr/share/nginx/html
RUN mkdir -p ${HTML}
ADD . ${HTML}
ENTRYPOINT ["ls", "/usr/share/nginx/html/"]
ARG IMAGE_VERSION=7
FROM centos:$IMAGE_VERSION
ENV HTML=/usr/share/nginx/html
RUN mkdir -p ${HTML} && \
echo "<html><head><title>Halo World</title></head><body><h3>it's Works!</h3></body></html>" > ${HTML}/index.html
ENTRYPOINT ["cat", "/usr/share/nginx/html/index.html"]
FROM centos:7
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="0.5"
ENV HTML=/usr/share/nginx/html
RUN mkdir -p ${HTML}
ADD . ${HTML}
ENTRYPOINT ["ls", "/usr/share/nginx/html/"]
docker container rm -f postgresdb && \
docker network rm postgres_net && \
docker volume prune -f && \
docker image rm -f $(docker images dimmaryanto93/centos -q)
docker container rm -f postgresdb | `
docker network rm postgres_net | `
docker volume prune -f | `
docker image rm -f $(docker images dimmaryanto93/centos -q)
FROM centos:7
ENV POSTGRES_HOST=postgresdb
ENV POSTGRES_USER=postgres
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="0.7"
RUN yum install postgresql -y
CMD ["bash", "-c", "psql -h ${POSTGRES_HOST} -U ${POSTGRES_USER} -W"]
FROM centos:7
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="0.8"
RUN yum install postgresql -y
ENTRYPOINT ["psql"]
FROM centos:7
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="0.6"
RUN yum install postgresql -y
docker container rm -f postgresdb webapp && \
docker volume prune -f && \
docker network rm local_net && \
docker image rm -f $(docker images dimmaryanto93/centos -q)
docker container rm -f postgresdb webapp | `
docker volume prune -f | `
docker network rm local_net | `
docker image rm -f $(docker images dimmaryanto93/centos -q)
FROM centos:7
ENV POSTGRES_USER=postgres
ARG POSTGRES_HOST=postgresdb LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="0.9"
RUN yum install postgresql -y ENTRYPOINT ["psql"]
ENTRYPOINT ["psql"]
CMD ["--help"]
FROM centos:7
ENV POSTGRES_USER=postgres
ARG POSTGRES_HOST=postgresdb
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="0.10"
RUN yum install epel-release -y && \
yum install nginx -y && \
yum clean all
ENTRYPOINT ["nginx", "-g", "daemon off;"]
docker container rm -f webapp webapp-changed-port && \
docker volume prune -f && \
docker image prune -f && \
docker image rm -f $(docker images dimmaryanto93/centos -q)
docker container rm -f webapp webapp-changed-port | `
docker volume prune -f | `
docker image prune -f | `
docker image rm -f $(docker images dimmaryanto93/centos -q)
FROM centos:7
ENV HTML_FOLDER=/usr/share/nginx/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.1"
RUN yum install epel-release -y && \
yum install nginx -y && \
yum clean all
COPY index.html ${HTML_FOLDER}/index.html
RUN sed -i "s|80|8080|g" /etc/nginx/nginx.conf
ENTRYPOINT ["nginx", "-g", "daemon off;"]
EXPOSE 8080/TCP
FROM centos:7
ENV HTML_FOLDER=/usr/share/nginx/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.0"
RUN yum install epel-release -y && \
yum install nginx -y && \
yum clean all
COPY index.html ${HTML_FOLDER}/index.html
ENTRYPOINT ["nginx", "-g", "daemon off;"]
EXPOSE 80/TCP
FROM centos:7
ENV HTML_FOLDER=/usr/share/nginx/html
ENV NGINX_CONF=/etc/nginx/conf.d
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.2"
RUN yum install epel-release -y && \
yum install nginx -y && \
yum clean all
COPY index.html ${HTML_FOLDER}/index.html
COPY nginx-ssl.conf ${NGINX_CONF}/nginx-ssl.conf
RUN sed -i "s|80|8080|g" /etc/nginx/nginx.conf
ENTRYPOINT ["nginx", "-g", "daemon off;"]
EXPOSE 8080/TCP 443/TCP
docker container prune -f && \
docker volume prune -f && \
docker image prune -f && \
docker image rm -f $(docker images dimmaryanto93/centos -q)
docker container prune -f | `
docker volume prune -f | `
docker image prune -f | `
docker image rm -f $(docker images dimmaryanto93/centos -q)
FROM centos:7
ENV HTML_FOLDER=/usr/share/nginx/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.3"
# Created user
RUN groupadd www-data && \
adduser -r -g www-data www-data
USER www-data:www-data
COPY --chown=www-data:www-data index.html ${HTML_FOLDER}/index.html
CMD whoami && ls -al ${HTML_FOLDER}/
FROM centos:7
ENV HTML_FOLDER=/usr/share/nginx/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.5"
## Created user
RUN groupadd www-data && \
adduser -r -g www-data www-data
USER www-data:www-data
WORKDIR ${HTML_FOLDER}
VOLUME ${HTML_FOLDER}
CMD whoami && \
pwd && \
ls -l .
FROM centos:7
ENV HTML_FOLDER=/usr/share/nginx/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.4"
## Created user
RUN groupadd www-data && \
adduser -r -g www-data www-data
USER www-data:www-data
WORKDIR ${HTML_FOLDER}
COPY --chown=www-data:www-data index.html .
CMD whoami && \
pwd && \
ls -al .
docker container rm -f webapp webapp2 && \
docker volume prune -f && \
docker image prune -f && \
docker image rm -f $(docker images dimmaryanto93/centos -q)
docker container rm -f webapp webapp2 | `
docker volume prune -f | `
docker image prune -f | `
docker image rm -f $(docker images dimmaryanto93/centos -q)
FROM centos:7
ENV HTML_FOLDER=/usr/share/nginx/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.6"
RUN yum install epel-release -y && \
yum install nginx -y
WORKDIR ${HTML_FOLDER}
VOLUME ${HTML_FOLDER}
COPY index.html .
CMD ["nginx", "-g", "daemon off;"]
HEALTHCHECK --interval=10s --timeout=3s --retries=1 --start-period=3s \
CMD curl -f http://localhost/ || exit 1
FROM nginx
ENV HTML_FOLDER=/usr/share/nginx/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.7"
WORKDIR ${HTML_FOLDER}
COPY index.html .
COPY node_modules node_modules/
CMD ["nginx", "-g", "daemon off;"]
HEALTHCHECK --interval=10s --timeout=3s --retries=1 --start-period=3s \
CMD curl -f http://localhost/ || exit 1
FROM node:16-alpine3.11
WORKDIR /sources
COPY package.json .
RUN npm install --prod
docker container rm -f webapp-php webapp-php-composer webapp-nginx webapp && \
docker volume prune -f && \
docker image prune -f && \
docker image rm -f $(docker images dimmaryanto93/* -q)
docker container rm -f webapp-php webapp-php-composer webapp-nginx webapp | `
docker volume prune -f | `
docker image prune -f | `
docker image rm -f $(docker images dimmaryanto93/* -q)
FROM php:7.3-apache
ENV HTML_FOLDER=/var/www/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.9"
WORKDIR ${HTML_FOLDER}
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
HEALTHCHECK --interval=10s --timeout=3s --retries=1 --start-period=3s \
CMD curl -f http://localhost/ || exit 1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Belajar HTML</title>
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="node_modules/materialize-css/dist/css/materialize.min.css">
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<nav class="blue">
<div class="nav-wrapper container">
<a href="#" class="brand-logo">Webapp Cources</a>
<ul id="nav-mobile" class="right hide-on-med-and-down">
<li><a href="sass.html">HTML</a></li>
<li><a href="badges.html">CSS</a></li>
<li><a href="collapsible.html">JavaScript</a></li>
</ul>
</div>
</nav>
<div>
<div class="row">
<div class="col s12 m6">
<div class="card blue-grey darken-1">
<div class="card-content white-text">
<span class="card-title">HTML</span>
<p>I am a very simple card. I am good at containing small bits of information.
I am convenient because I require little markup to use effectively.</p>
</div>
<div class="card-action">
<a href="#">This is a link</a>
</div>
</div>
</div>
</div>
</div>
<!-- Compiled and minified JavaScript -->
<script type="text/javascript" src="node_modules/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="node_modules/materialize-css/dist/js/materialize.min.js"></script>
</body>
</html>
FROM node:16-alpine3.11 as builder
WORKDIR /sources
COPY package.json .
RUN npm install --prod
FROM nginx
ENV HTML_FOLDER=/usr/share/nginx/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="1.8"
WORKDIR ${HTML_FOLDER}
COPY index.html .
COPY --from=builder /sources/node_modules node_modules/
CMD ["nginx", "-g", "daemon off;"]
HEALTHCHECK --interval=10s --timeout=3s --retries=1 --start-period=3s \
CMD curl -f http://localhost/ || exit 1
{
"name": "my-websiste",
"version": "1.0.0",
"description": "Simple Webapps",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Dimas Maryanto",
"license": "MIT",
"dependencies": {
"jquery": "3.2.1",
"materialize-css": "0.100.2"
}
}
FROM php:7.3-apache as php_composer
# add composer into php v7.3 container
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# new stage node for install npm dependencies
FROM node:14-alpine3.10 as node_install
WORKDIR /var/www/html
COPY package.json .
RUN npm install --prod
# using php_composer image
FROM php_composer
ENV HTML_FOLDER=/var/www/html
LABEL maintaniner="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.image.authors="software.dimas_m@icloud.com"
LABEL com.maryanto.dimas.vendor="PT. Tabeldata Informatika"
LABEL version="2.0"
WORKDIR ${HTML_FOLDER}
# copy node_modules folder from last build
COPY --from=node_install /var/www/html/node_modules node_modules
COPY index.html .
HEALTHCHECK --interval=10s --timeout=3s --retries=1 --start-period=3s \
CMD curl -f http://localhost/ || exit 1
docker scan --exclude-base --file Dockerfile dimmaryanto93/centos:1.8
version: '3.9'
services:
webapp:
build:
dockerfile: Dockerfile
context: .
args:
NGINX_VERSION: mainline
ports:
- "80:80"
backend:
build:
dockerfile: Dockerfile-php
context: .
args:
PHP_VERSION: 8.0-apache
db:
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres-passwd
- POSTGRES_USER=user_prod
- POSTGRES_DB=prod_db
version: '3.9'
services:
webapp:
image: dimmaryanto93/nginx:latest
build:
context: .
dockerfile: Dockerfile
args:
NGINX_VERSION: mainline
environment:
- NGINX_PORT=80
- NGINX_DOMAIN_NAME=dev01.dimas-maryanto.com
- NGINX_ROOT_DOCUMENT=/var/www/html
docker run --name webapp \
-p 80:80 \
-d nginx && \
docker run --name db \
-p 5432:5432 \
-e POSTGRES_PASSWORD=password \
-d postgres:12.6
version: '3.8'
services:
webapp:
image: nginx
ports:
- "80:80"
db:
image: postgres:12.6
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=password
sudo curl \
-L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
-o /etc/bash_completion.d/docker-compose
brew install bash-completion && \
sudo curl -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
-o /usr/local/etc/bash_completion.d/docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose && \
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi
plugins=(... docker docker-compose)
docker-compose \
-f your-path/docker-compose.yaml \
-f your-path2/other.docker-compose.yaml up -d
docker-compose -f your-path/docker-compose.yaml up -d
version: '3.8'
services:
db:
image: postgres:12.6
ports:
- 5432:5432
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_USER=test_sit_user
- POSTGRES_DB=test_sit_db
volumes:
- pg_data:/var/lib/postgresql/data
networks:
- backend
networks:
backend:
volumes:
pg_data:
POSTGRES_PASSWORD=dev_db
POSTGRES_USER=dev_db
version: '3.8'
services:
db:
image: postgres:12.6
env_file:
- database.dev.env
environment:
- POSTGRES_DB=hr_db
ports:
- 5432:5432
NGINX_VERSION=1.21.1
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- 80:80
POSTGRES_PASSWORD=test_db
DB_USERNAME=test_db
POSTGRES_DB=test_db
version: '3.8'
services:
db:
image: postgres:12.6
environment:
- POSTGRES_PASSWORD
- POSTGRES_USER=${DB_USERNAME}
- POSTGRES_DB
ports:
- 5432:5432
version: '3.8'
services:
db:
image: postgres:12.6
environment:
- POSTGRES_PASSWORD=hr_db
ports:
- 5432:5432
version: '3.8'
services:
webapp:
image: nginx:alpine
ports:
- 80:80
volumes:
- ./html:/usr/share/nginx/html
version: '3.8'
services:
db:
image: postgres:12.6
environment:
- POSTGRES_PASSWORD=password
volumes:
- pg_data:/var/lib/postgresql/data
volumes:
pg_data: {}
version: '3.8'
services:
webapp:
image: nginx:alpine
ports:
- 80:80
volumes:
- type: bind
source: ./html
target: /usr/share/nginx/html
version: '3.8'
services:
db:
image: postgres:12.6
environment:
- POSTGRES_PASSWORD=password
volumes:
- type: volume
source: pg_data
target: /var/lib/postgresql/data
volumes:
pg_data: {}
version: '3.8'
services:
nginx1:
image: nginx
ports:
- 8081:80
volumes:
- public_html:/usr/share/nginx/html
nginx2:
image: nginx
ports:
- 8082:80
volumes:
- public_html:/usr/share/nginx/html
volumes:
public_html: {}
version: '3.8'
services:
webapp:
image: nginx
ports:
- "80:80"
volumes:
- type: volume
source: ssh-server
target: /usr/share/nginx/html
volumes:
ssh-server:
driver: vieux/sshfs
driver_opts:
sshcmd: "testing@192.168.88.110:/home/testing/httpd-apps"
password: testing2021
yum install nfs-utils && \
systemctl enable --now nfs-server.service && \
firewall-cmd --permanent --add-service=nfs && \
firewall-cmd --permanent --add-service=rpc-bind && \
firewall-cmd --permanent --add-service=mountd && \
firewall-cmd --reload && \
systemctl enable --now rpcbind && \
systemctl enable --now nfs-lock && \
systemctl enable nfs-idmap && \
systemctl enable --now nfs-server
version: '3.8'
services:
nginx:
image: nginx
ports:
- "80:80"
volumes:
- type: volume
source: nfs-server
target: /usr/share/nginx/html
volume:
nocopy: false
read_only: false
volumes:
nfs-server:
driver: local
driver_opts:
type: nfs
device: ":/var/nfs-data/nginx-app"
o: "addr=192.168.88.110,rw"
version: '3.8'
services:
webapp:
image: nginx
ports:
- "8080:80"
db:
image: postgres:12.6
environment:
- POSTGRES_PASSWORD=password
ports:
- "31432:5432"
version: '3.9'
services:
wordpress:
image: wordpress:latest
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: wordpress_user
WORDPRESS_DB_NAME: wordpress_db
networks:
- backend
- frontend
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: wordpress_db
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: wordpress_user
MYSQL_ROOT_PASSWORD: secretPassword
volumes:
- mysql_data:/var/lib/mysql
networks:
- backend
proxy:
image: nginx:mainline
ports:
- "80:80"
environment:
- WORDPRESS_HOST=wordpress
- WORDPRESS_PORT=80
- WORDPRESS_CONTEXT_PATH=/
networks:
- frontend
volumes:
- type: bind
source: ./nginx/wordpress-proxy.nginx.template.conf
target: /etc/nginx/templates/default.conf.template
volumes:
mysql_data:
networks:
frontend:
backend:
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /wordpress/ {
proxy_pass http://${WORDPRESS_HOST}:${WORDPRESS_PORT}${WORDPRESS_CONTEXT_PATH};
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
version: '3.9'
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- postgres
- migrate-tools
postgres:
image: postgres:12.6
ports:
- 5432:5432
environment:
- POSTGRES_PASSWORD
- POSTGRES_USER
- POSTGRES_DB
volumes:
- pg_data:/var/lib/postgresql/data
migrate-tools:
image: flyway/flyway:latest-alpine
environment:
- FLYWAY_EDITION
command: ["-user=${POSTGRES_USER}", "-password=${POSTGRES_PASSWORD}", "-url=jdbc:postgresql://postgres:5432/${POSTGRES_DB}", "info"]
depends_on:
- postgres
volumes:
pg_data: { }
# database postgresql
POSTGRES_PASSWORD=secretPassword
POSTGRES_USER=bisnis_app
POSTGRES_DB=bisnis_app
# flyway migration tools
FLYWAY_EDITION=community
version: '3.9'
services:
webapp:
image: dimmaryanto93/my-web:latest
build: .
ports:
- "80:80"
ARG NGINX_VERSION=latest
FROM nginx:${NGINX_VERSION}
WORKDIR /usr/share/nginx/html
EXPOSE 80/tcp
version: '3.9'
services:
webapp:
image: dimmaryanto93/my-web-args:latest
build:
context: ../basic
dockerfile: Dockerfile
args:
- NGINX_VERSION=mainline
ports:
- "80:80"
version: '3.9'
services:
webapp:
image: dimmaryanto93/my-web-args:latest
build:
context: ../basic
dockerfile: Dockerfile
args:
NGINX_VERSION: stable-alpine
ports:
- "80:80"
version: '3.9'
services:
webapp:
image: dimmaryanto93/my-web-context:latest
build:
context: ../basic
dockerfile: Dockerfile
ports:
- "80:80"
version: '3.9'
services:
webapp:
image: nginx:mainline
ports:
- 80:80
profiles: [ "frontend" ]
depends_on:
- backend
backend:
image: php:8.0-apache
ports:
- 8080:80
depends_on:
- db
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_DATABASE
volumes:
- mysql_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
profiles:
- debug
- frontend
ports:
- 33306:80
environment:
- MYSQL_ROOT_PASSWORD
- PMA_HOST=db
depends_on:
- db
migrate-tools:
image: flyway/flyway:latest-alpine
profiles: [ "dev", "prod" ]
environment:
- FLYWAY_EDITION
command: [ "-user=${MYSQL_USER}", "-password=${MYSQL_PASSWORD}", "-url=jdbc:mysql://db:3306/${MYSQL_DATABASE}", "info" ]
depends_on:
- db
volumes:
mysql_data:
version: '3.9'
services:
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_DATABASE
volumes:
- mysql_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
ports:
- 33306:80
environment:
- MYSQL_ROOT_PASSWORD
profiles:
- debug
depends_on:
- db
volumes:
mysql_data:
MYSQL_ROOT_PASSWORD=secretROOTPasswd
MYSQL_USER=perpus
MYSQL_PASSWORD=perpus
MYSQL_DATABASE=perpus
version: '3.9'
services:
backend:
image: php:8.0-apache
ports:
- 8080:80
depends_on:
- db
- migrate-tools
profiles: [ "prod" ]
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_DATABASE
volumes:
- mysql_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
profiles: [ "debug" ]
ports:
- 33306:80
environment:
- MYSQL_ROOT_PASSWORD
- PMA_HOST=db
depends_on:
- db
migrate-tools:
image: flyway/flyway:latest-alpine
profiles: [ "dev" ]
environment:
- FLYWAY_EDITION
command: [ "-user=${MYSQL_USER}", "-password=${MYSQL_PASSWORD}", "-url=jdbc:mysql://db:3306/${MYSQL_DATABASE}", "info" ]
depends_on:
- db
volumes:
mysql_data:
version: '3.9'
services:
backend:
image: php:8.0-apache
ports:
- 8080:80
depends_on:
- db
profiles: [ "dev", "debug" ]
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_DATABASE
volumes:
- mysql_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
profiles: [ "debug" ]
ports:
- 33306:80
environment:
- MYSQL_ROOT_PASSWORD
- PMA_HOST=db
depends_on:
- db
volumes:
mysql_data:
version: '3.9'
services:
webapp:
image: nginx:latest
ports:
- 8080:80
volumes:
- ./html:/usr/share/nginx/html
networks:
- frontend
networks:
frontend:
version: '3.9'
services:
webapp:
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
backend:
ports:
- "8080:80"
db:
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=secretPassword
- POSTGRES_USER=example_user
- POSTGRES_DB=example_db
version: '3.9'
services:
webapp:
image: nginx:latest
networks:
- frontend
backend:
image: php:8.0-apache
depends_on:
- db
networks:
- backend
- frontend
db:
image: postgres:12.6
volumes:
- type: volume
source: pg_data
target: /var/lib/postgresql/data
networks:
- backend
volumes:
pg_data:
networks:
frontend:
backend:
version: '3.9'
services:
migrate:
image: flyway/flyway:latest-alpine
environment:
- FLYWAY_EDITION
command: [ "-user=${POSTGRES_USER}", "-password=${POSTGRES_PASSWORD}", "-url=jdbc:postgresql://postgres:5432/${POSTGRES_DB}", "info" ]
depends_on:
- db
networks:
- backend
version: '3.9'
services:
backend:
image: php:8.0-apache
ports:
- "8080:80"
depends_on:
- db
networks:
- backend
db:
image: postgres:12.6
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=secretPassword
- POSTGRES_USER=example_user
- POSTGRES_DB=example_db
volumes:
- type: volume
source: pg_data
target: /var/lib/postgresql/data
networks:
- backend
volumes:
pg_data:
networks:
backend:
server {
listen ${APPLICATION_PORT};
server_name localhost;
location / {
root ${NGINX_ROOT_DOCUMENT};
index index.html;
}
location /backend/ {
proxy_pass http://${BACKEND_HOST}:${BACKEND_PORT}${BACKEND_CONTEXT_PATH};
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
version: '3.8'
services:
proxy:
image: nginx:alpine
ports:
- 80:80
environment:
- APPLICATION_PORT=80
- NGINX_ROOT_DOCUMENT=/usr/share/nginx/html
- BACKEND_HOST=backend
- BACKEND_PORT=80
- BACKEND_CONTEXT_PATH=/
volumes:
- ./default.template.conf:/etc/nginx/templates/default.conf.template
backend:
image: nginx:alpine
volumes:
- ./html:/usr/share/nginx/html
expose:
- 80
version: '3.9'
services:
db:
image: postgres:12.6
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD
- POSTGRES_USER
- POSTGRES_DB
volumes:
- pg_data:/var/lib/postgresql/data
networks:
- backend
webapp:
ports:
- "8080:80"
environment:
- DB_HOST=postgres
- DB_PORT=5432
- DB_USER=${POSTGRES_USER}
- DB_NAME=${POSTGRES_DB}
- DB_PASSWD=${POSTGRES_PASSWORD}
volumes:
- ./:/var/www/html
depends_on:
- db
proxy:
ports:
- "80:80"
volumes:
- .nginx/default.template.conf:/etc/nginx/templates/default.conf.template
volumes:
pg_data:
networks:
backend:
frontend:
version: '3.9'
services:
webapp:
image: dimmaryanto93/webapp:latest
build:
context: .
dockerfile: Dockerfile-php
expose:
- 80
environment:
- DEBUG=false
- APP_ENV=production
- DB_HOST=192.168.88.100
- DB_PORT=5432
- DB_USER=${POSTGRES_USER}
- DB_NAME=${POSTGRES_DB}
- DB_PASSWD=${POSTGRES_PASSWORD}
restart: always
labels:
- "org.vendor.application.name=BackendAppName"
- "org.vendor.application.description=Web Service Description"
volumes:
- webapp_data:/var/www/html/storage
proxy:
image: dimmaryanto93/proxy:latest
build:
context: .
dockerfile: Dockerfile-proxy
restart: always
labels:
- "org.vendor.application.name=FrontendAppName"
- "org.vendor.application.description=Webapp Description"
ports:
- "30808:80"
volumes:
webapp_data:
version: '3.9'
services:
webapp:
image: php:8.0-apache
networks:
- backend
proxy:
image: nginx:alpine
environment:
- APPLICATION_PORT=80
- NGINX_ROOT_DOCUMENT=/usr/share/nginx/html
- BACKEND_HOST=webapp
- BACKEND_PORT=80
- BACKEND_CONTEXT_PATH=/
depends_on:
- webapp
networks:
- backend
- frontend
volumes:
pg_data:
networks:
backend:
frontend:
FROM php:8.0-apache
ENV DEBUG=false APP_ENV=production DB_HOST=localhost DB_PORT=5432 DB_USER=example DB_NAME=example DB_PASSWD=example
WORKDIR /var/www/html
COPY index.php .
VOLUME /var/www/html/storage
EXPOSE 80/tcp
FROM nginx:mainline
ENV APPLICATION_PORT=80 NGINX_ROOT_DOCUMENT=/usr/share/nginx/html BACKEND_HOST=webapp BACKEND_PORT=80 BACKEND_CONTEXT_PATH=/
WORKDIR ${NGINX_ROOT_DOCUMENT}
COPY .nginx/default.template.conf /etc/nginx/templates/default.conf.template
EXPOSE 80/tcp
# postgres config
POSTGRES_PASSWORD=secret_dev_passwd
POSTGRES_USER=ex_user_pg
POSTGRES_DB=example
version: '3.9'
services:
dockerd:
image: docker:18.09-dind
entrypoint: ["dockerd-entrypoint.sh"]
privileged: true
expose:
- 2375/tcp
command:
- "--insecure-registry=192.168.88.50:8087"
- "--insecure-registry=192.168.88.50:8086"
volumes:
- docker_cert:/certs/ca
- docker_cert:/certs/client
docker:
image: docker:latest
environment:
DOCKER_HOST: tcp://dockerd:2375
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
command:
## it's mean run docker info
- info
depends_on:
- dockerd
volumes:
- docker_cert:/certs/client
volumes:
docker_cert:
version: '3.9'
services:
dockerd:
image: docker:18.09-dind
entrypoint: ["dockerd-entrypoint.sh"]
privileged: true
command:
- "--insecure-registry=192.168.88.50:8087"
- "--insecure-registry=192.168.88.50:8086"
volumes:
- docker_socket:/var/run/
- docker_cert:/certs/ca
- docker_cert:/certs/client
docker:
image: docker:latest
environment:
DOCKER_HOST: unix:///var/run/docker.sock
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
command:
## it's mean run docker info
- info
depends_on:
- dockerd
volumes:
- docker_socket:/var/run/
- docker_cert:/certs/client
volumes:
docker_cert:
docker_socket:
version: '3.9'
services:
portainerd:
image: portainer/portainer-ce:latest
ports:
- "9443:9443"
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
# Optional: add an other environment to server
portainer_agen:
image: portainer/agent:latest
ports:
- "9001:9001"
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
volumes:
portainer_data:
version: '3.9'
services:
wordpress:
image: wordpress:latest
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
networks:
- web
mysql:
image: mysql:5.7
environment:
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ROOT_PASSWORD
volumes:
- mysql_data:/var/lib/mysql
networks:
- web
volumes:
mysql_data:
networks:
web:
export DOCKER_MACHINE_VERSION=v0.16.2
curl -L https://github.com/docker/machine/releases/download/$DOCKER_MACHINE_VERSION/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
docker-machine create -d virtualbox --virtualbox-no-vtx-check default
upstream webapp {
least_conn;
server 192.168.99.105;
server 192.168.99.106;
}
server {
listen 80;
location / {
proxy_pass http://webapp;
}
}
{
"registry-mirrors": [],
"insecure-registries": [
"192.168.88.50:8087",
"192.168.88.50:8086"
],
"debug": false,
"experimental": false,
"features": {
"buildkit": true
}
}
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3
# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
[Install]
WantedBy=multi-user.target
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name _;
root /usr/share/nginx/html;
ssl_certificate "/etc/pki/nginx/server.crt";
ssl_certificate_key "/etc/pki/nginx/private/server.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment