Created
June 18, 2022 06:40
-
-
Save Arka111/d9a5551580e967bdb549f9d186304eae to your computer and use it in GitHub Desktop.
Commands used in Docker 2 Class
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
curl -L "https://github.com/docker/compose/releases/download/$(curl https://github.com/docker/compose/releases | grep -m1 '<a href="/docker/compose/releases/download/' | grep -o 'v[0-9:].[0-9].[0-9]')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose | |
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04 | |
mkdir ~/compose-demo | |
cd ~/compose-demo | |
mkdir app | |
vi app/index.html | |
<!doctype html> | |
<html lang="en"> | |
<head> | |
<meta charset="utf-8"> | |
<title>Docker Compose Demo</title> | |
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css"> | |
</head> | |
<body> | |
<h1>This is a Docker Compose Demo Page.</h1> | |
<p>This content is being served by an Nginx container.</p> | |
</body> | |
</html> | |
nano docker-compose.yml | |
version: '3.7' | |
services: | |
web: | |
image: nginx:alpine | |
ports: | |
- "8000:80" | |
volumes: | |
- ./app:/usr/share/nginx/html | |
docker-compose up -d | |
Wordpress Demo for Learning, not for class | |
mkdir wordpress && cd wordpress | |
mkdir nginx-conf | |
vi nginx-conf/nginx.conf | |
server { | |
listen 80; | |
listen [::]:80; | |
server_name example.com www.example.com; | |
index index.php index.html index.htm; | |
root /var/www/html; | |
location ~ /.well-known/acme-challenge { | |
allow all; | |
root /var/www/html; | |
} | |
location / { | |
try_files $uri $uri/ /index.php$is_args$args; | |
} | |
location ~ \.php$ { | |
try_files $uri =404; | |
fastcgi_split_path_info ^(.+\.php)(/.+)$; | |
fastcgi_pass wordpress:9000; | |
fastcgi_index index.php; | |
include fastcgi_params; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
fastcgi_param PATH_INFO $fastcgi_path_info; | |
} | |
location ~ /\.ht { | |
deny all; | |
} | |
location = /favicon.ico { | |
log_not_found off; access_log off; | |
} | |
location = /robots.txt { | |
log_not_found off; access_log off; allow all; | |
} | |
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ { | |
expires max; | |
log_not_found off; | |
} | |
} | |
Directives: | |
listen: This tells Nginx to listen on port 80, which will allow us to use Certbot’s webroot plugin for our certificate requests. Note that we are not including port 443 yet — we will update our configuration to include SSL once we have successfully obtained our certificates. | |
server_name: This defines your server name and the server block that should be used for requests to your server. Be sure to replace example.com in this line with your own domain name. | |
index: The index directive defines the files that will be used as indexes when processing requests to your server. We’ve modified the default order of priority here, moving index.php in front of index.html so that Nginx prioritizes files called index.php when possible. | |
root: Our root directive names the root directory for requests to our server. This directory, /var/www/html, is created as a mount point at build time by instructions in our WordPress Dockerfile. These Dockerfile instructions also ensure that the files from the WordPress release are mounted to this volume. | |
Location Blocks: | |
location ~ /.well-known/acme-challenge: This location block will handle requests to the .well-known directory, where Certbot will place a temporary file to validate that the DNS for our domain resolves to our server. With this configuration in place, we will be able to use Certbot’s webroot plugin to obtain certificates for our domain. | |
location /: In this location block, we’ll use a try_files directive to check for files that match individual URI requests. Instead of returning a 404 Not Found status as a default, however, we’ll pass control to WordPress’s index.php file with the request arguments. | |
location ~ \.php$: This location block will handle PHP processing and proxy these requests to our wordpress container. Because our WordPress Docker image will be based on the php:fpm image, we will also include configuration options that are specific to the FastCGI protocol in this block. Nginx requires an independent PHP processor for PHP requests: in our case, these requests will be handled by the php-fpm processor that’s included with the php:fpm image. Additionally, this location block includes FastCGI-specific directives, variables, and options that will proxy requests to the WordPress application running in our wordpress container, set the preferred index for the parsed request URI, and parse URI requests. | |
location ~ /\.ht: This block will handle .htaccess files since Nginx won’t serve them. The deny_all directive ensures that .htaccess files will never be served to users. | |
location = /favicon.ico, location = /robots.txt: These blocks ensure that requests to /favicon.ico and /robots.txt will not be logged. | |
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$: This block turns off logging for static asset requests and ensures that these assets are highly cacheable, as they are typically expensive to serve. | |
main wordress directory | |
vi .env | |
MYSQL_ROOT_PASSWORD=your_root_password | |
MYSQL_USER=your_wordpress_database_user | |
MYSQL_PASSWORD=your_wordpress_database_password | |
vi docker-compose.yml | |
version: '3' | |
services: | |
db: | |
image: mysql:8.0 | |
container_name: db | |
restart: unless-stopped | |
env_file: .env | |
environment: | |
- MYSQL_DATABASE=wordpress | |
volumes: | |
- dbdata:/var/lib/mysql | |
command: '--default-authentication-plugin=mysql_native_password' | |
networks: | |
- app-network | |
wordpress: | |
depends_on: | |
- db | |
image: wordpress:5.1.1-fpm-alpine | |
container_name: wordpress | |
restart: unless-stopped | |
env_file: .env | |
environment: | |
- WORDPRESS_DB_HOST=db:3306 | |
- WORDPRESS_DB_USER=$MYSQL_USER | |
- WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD | |
- WORDPRESS_DB_NAME=wordpress | |
volumes: | |
- wordpress:/var/www/html | |
networks: | |
- app-network | |
webserver: | |
depends_on: | |
- wordpress | |
image: nginx:1.15.12-alpine | |
container_name: webserver | |
restart: unless-stopped | |
ports: | |
- "80:80" | |
volumes: | |
- wordpress:/var/www/html | |
- ./nginx-conf:/etc/nginx/conf.d | |
- certbot-etc:/etc/letsencrypt | |
networks: | |
- app-network | |
certbot: | |
depends_on: | |
- webserver | |
image: certbot/certbot | |
container_name: certbot | |
volumes: | |
- certbot-etc:/etc/letsencrypt | |
- wordpress:/var/www/html | |
command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email --staging -d example.com -d www.example.com | |
volumes: | |
certbot-etc: | |
wordpress: | |
dbdata: | |
networks: | |
app-network: | |
driver: bridge | |
docker-compose up -d | |
from home location - For Demo Class | |
mkdir docker-wordpress && cd docker-wordpress | |
vi docker-compose.yml | |
version: "3.9" | |
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 | |
volumes: | |
- wordpress_data:/var/www/html | |
ports: | |
- "8000:80" | |
restart: always | |
environment: | |
WORDPRESS_DB_HOST: db | |
WORDPRESS_DB_USER: wordpress | |
WORDPRESS_DB_PASSWORD: wordpress | |
WORDPRESS_DB_NAME: wordpress | |
volumes: | |
db_data: {} | |
wordpress_data: {} | |
root@ip-172-31-88-18:~/docker-wordpress# docker ps | |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | |
bec31554c6c9 wordpress:latest "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp docker-wordpress-wordpress-1 | |
74d567e74b26 mysql:5.7 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 3306/tcp, 33060/tcp docker-wordpress-db-1 | |
root@ip-172-31-88-18:~/docker-wordpress# docker exec -it docker-wordpress-db-1 bash | |
(password is wordpress) | |
root@74d567e74b26:/# mysql -u wordpress | |
Enter password: | |
Welcome to the MySQL monitor. Commands end with ; or \g. | |
Your MySQL connection id is 9 | |
Server version: 5.7.38 MySQL Community Server (GPL) | |
Copyright (c) 2000, 2022, Oracle and/or its affiliates. | |
Oracle is a registered trademark of Oracle Corporation and/or its | |
affiliates. Other names may be trademarks of their respective | |
owners. | |
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. | |
mysql> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment