SlideShare uma empresa Scribd logo
1 de 116
Baixar para ler offline
@danaluther
Hands on Docker:
Launch Your Own LEMP or LAMP Stack
Dana Luther
https://git.io/JvUy5
@danaluther
What are we going to do today, Brain?
Set up standard LAMP and LEMP stacks using Docker stack
Modify the stack to mimic production
Run codeception test suites against our application
Learn how to swap out php versions
Add and remove additional services
@danaluther
Where are you on your Docker
journey?
Brand new to this
rodeo…
Docker containers are
my jam!
I am Docker.
@danaluther
Everyone set up and ready?
Docker Desktop installed and running
Checked out the GIT repo
Pulled the docker images
Anyone using Windows? Set to use LCOW?
@danaluther
Moving beyond containers…
@danaluther
Moving beyond containers…
Image Container Service Stack
@danaluther
Moving beyond containers…
Image Container Service Stack App
@danaluther
Moving beyond containers…
Image Container Service Stack App
@danaluther
Release the swarm!
> docker swarm init
@danaluther
Basic LAMP Stack
docker-compose.yml
php:7.4-apache
mysql
01_LAMP
@danaluther
Basic LAMP Stack
version: "3.7"
services:
php:
# https: //hub.docker.com/_/php
image: php:7.4-apache
ports:
- 80:80
volumes:
- ./src:/var/ www/html
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_pwd
secrets:
- db_pwd
secrets:
db_pwd:
file: ./root_db_password.txt
docker-compose.yml
01_LAMP
@danaluther
Basic LAMP Stack
> docker stack deploy -c docker-compose.yml hod
Make sure you are on the 01_LAMP branch of the workshop repo
01_LAMP
@danaluther
Basic LAMP Stack
> docker stack deploy -c docker-compose.yml hod
Make sure you are on the 01_LAMP branch of the workshop repo
01_LAMP
@danaluther
Verify the services have all launched
> docker service ls
01_LAMP
@danaluther
Verify the services have all launched
> docker service ls
01_LAMP
⚠ Common “Gotcha”
@danaluther
No public port for MySQL unless you *want* to expose it externally.
@danaluther01_LAMP
@danaluther01_LAMP
SIDEBAR:
@danaluther
What’s in a stock PHP image?
> docker run --rm php:7.4-fpm php-fpm -m
SIDEBAR:
@danaluther
What’s in a stock PHP image?
@danaluther
Creating our custom PHP image
Add the mysqli and PDO_mysql
extensions
Use build args in the Dockerfile
ARG PHP_TARGET=7.4-apache
FROM php:$PHP_TARGET
RUN docker-php-ext-install 
-j$(nproc) mysqli pdo_mysql
02_LAMP
@danaluther
Enabling Buildkit
@danaluther
Creating our custom PHP image
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.4-apache-mysql .
From the /images/ directory:
02_LAMP
@danaluther
Creating our custom PHP image
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.4-apache-mysql .
From the /images/ directory:
02_LAMP
@danaluther
Update our LAMP stack
version: "3.7"
services:
php:
# Custom PHP Image - see /images/Readme.md
image: dhluther/php:7.4-apache-mysql
ports:
- 80:80
volumes:
- ./src:/var/ www/html
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_pwd
secrets:
- db_pwd
secrets:
db_pwd:
file: ./root_db_password.txt
02_LAMP
@danaluther
Re-deploy the LAMP stack
> docker stack deploy -c docker-compose.yml hod
@danaluther
Re-deploy the LAMP stack
> docker stack deploy -c docker-compose.yml hod
@danaluther02_LAMP
@danaluther
<?
/**
* mysql-check.php
*/
try
{
$db = new PDO('mysql:host=db', 'root', 'sup3rs3cr3tp4ssw0rd');
echo 'MySQL Version: ',
$db ->getAttribute(PDO ::ATTR_CLIENT_VERSION);
} catch (Exception $e)
{
echo 'Aw shucks pardner, ', $e ->getMessage();
}
02_LAMP
@danaluther
Checking the service logs
02_LAMP
> docker service logs hod_php
@danaluther
Checking the service logs
02_LAMP
> docker service logs hod_php
@danaluther
Take the stack down
02_LAMP
> docker stack rm hod
@danaluther
Basic LEMP Stack
docker-compose.yml
php:7.4-fpm
mysql
nginx
03_LEMP
@danaluther
Basic LEMP Stack
03_LEMP
version: "3.7"
services:
php:
image: dhluther/php:7.4-fpm-mysql
volumes:
- ./src:/var/ www/html
…db…
web:
image: nginx
ports:
- 80:80
- 443:443
volumes:
- ./src:/var/ www/html
configs:
- source: nginx-conf
target: /etc/nginx/conf.d/default.conf
secrets:
db_pwd:
file: ./root_db_password.txt
configs:
nginx-conf:
file: ./nginx/default.conf
@danaluther
Creating our custom PHP-FPM image
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.4-fpm-mysql . 
--build-arg PHP_TARGET=7.4-fpm
From the /images/ directory:
03_LEMP
@danaluther03_LEMP
@danaluther
Deploy the LEMP stack
> docker stack deploy -c docker-compose.yml hod
03_LEMP
@danaluther03_LEMP
@danaluther03_LEMP
⚠ Common “Gotcha”
@danaluther
NO PERSISTENT DATA!
03_LEMP
⚠ Common “Gotcha”
@danaluther
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_pwd
secrets:
- db_pwd
NO PERSISTENT DATA!
03_LEMP
⚠ Common “Gotcha”
@danaluther
PERSISTENT DATA!
04_LEMP
⚠ Common “Gotcha”
@danaluther
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_pwd
volumes:
- ./data:/var/lib/mysql
secrets:
- db_pwd
PERSISTENT DATA!
04_LEMP
@danaluther
Fresh deploy the Stack
04_LEMP
> docker stack rm hod
> docker stack deploy -c docker-compose.yml hod
@danaluther
Quick Break - Stretch!
@danaluther
The stack is standard, but are we?
@danaluther
The stack is standard, but are we?
Customized config files:
php.ini and php.conf
my.conf
nginx.conf
@danaluther
The stack is standard, but are we?
Customized config files:
php.ini and php.conf
my.conf
nginx.conf
Customized images:
my/php
my/mysql
my/nginx
@danaluther
Basic LEMP Stack (flashback)
03_LEMP
version: "3.7"
services:
php:
image: dhluther/php:7.4-fpm-mysql
volumes:
- ./src:/var/ www/html
…db…
web:
image: nginx
ports:
- 80:80
- 443:443
volumes:
- ./src:/var/ www/html
configs:
- source: nginx-conf
target: /etc/nginx/conf.d/default.conf
secrets:
db_pwd:
file: ./root_db_password.txt
configs:
nginx-conf:
file: ./nginx/default.conf
@danaluther
What’s in the default nginx.conf?
> docker run --rm nginx cat /etc/nginx/nginx.conf
@danaluther
@danaluther05_LEMP
# Max file size for uploads
client_max_body_size 20m;
# Sets the cache for 1k items for 1 minute
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
# GZIP compression settings, text/html is automatically compressed
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_min_length 350;
gzip_proxied any;
gzip_types application/atom+xml application/rss+xml application/x-javascript application/javascript application/json text/plain text/css text/x-
component text/x-cross-domain-policy text/javascript;
# disable auto-index across the board by default
autoindex off;
# disable server side includes by default
ssi off;
@danaluther
Update NGiNX configs
05_LEMP
version: "3.7"
services:
php:
image: dhluther/php:7.4-fpm-mysql
volumes:
- ./src:/var/ www/html
…db…
web:
…
configs:
- source: nginx-conf
target: /etc/nginx/conf.d/default.conf
- source: nginx-base—conf
target: /etc/nginx/nginx.conf
secrets:
db_pwd:
file: ./root_db_password.txt
configs:
nginx-conf:
file: ./nginx/default.conf
nginx-base-conf:
file: ./nginx/nginx.conf
@danaluther
What’s in our PHP config?
@danaluther
What might you need to customize?
Timezone setting
Error reporting
Output caching and buffering
Listen directives
Ping/Status directives
Timeouts and extension limitations
@danaluther
Create custom .ini and .conf files
tz.ini — /usr/local/etc/php/conf.d/
custom.ini — /usr/local/etc/php/conf.d/
www.mysite.conf — /usr/local/etc/php-fpm.d/
05_LEMP
@danaluther
Update php image Dockerfile
05_LEMP
@danaluther
Build the php image
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.4-fpm-mysql-c 
--target=customized . 
--build-arg PHP_TARGET=7.4-fpm
05_LEMP
@danaluther
Build the php image
05_LEMP
@danaluther
Update compose with new php image
php:
# Custom PHP Image - see /images/Readme.md
image: dhluther/php:7.4-fpm-mysql-c
volumes:
- ./src:/var/www/html
@danaluther
Deploy stack updates
> docker stack deploy -c docker-compose.yml hod
@danaluther
Deploy stack updates
> docker stack deploy -c docker-compose.yml hod
@danaluther
Verify ini files loaded
@danaluther
Head to the watering hole!
(aka coffee break)
@danaluther
Great - we match production.
But what about testing??
@danaluther
Add xdebug and blackfire probe
07_LEMP
@danaluther
Build the debug image
07_LEMP
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.4-debug 
--target=debug . 
--build-arg PHP_TARGET=7.4-fpm
@danaluther
Build the debug image
07_LEMP
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.4-debug 
--target=debug . 
--build-arg PHP_TARGET=7.4-fpm
@danaluther
Build the debug image
07_LEMP
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.4-debug 
--target=debug . 
--build-arg PHP_TARGET=7.4-fpm
SIDEBAR:
@danaluther
https://blackfire.io/docs/integrations/docker
blackfire:
image: blackfire/blackfire
ports:
- "8707:8707"
environment:
# Tokens for your account
- BLACKFIRE_CLIENT_ID =<insert id here>
- BLACKFIRE_CLIENT_TOKEN =<insert token here>
# Tokens for your environment
- BLACKFIRE_SERVER_ID =<insert id here>
- BLACKFIRE_SERVER_TOKEN =<insert token here>
- BLACKFIRE_LOG_LEVEL=4
@danaluther
Deploy stack updates
> docker stack deploy -c docker-compose.yml hod
07_LEMP
@danaluther
Deploy stack updates
> docker stack deploy -c docker-compose.yml hod
07_LEMP
@danaluther07_LEMP
@danaluther07_LEMP
@danaluther
What and how do we want to test?
Use composer to require testing framework
@danaluther
Update compose with composer
composer:
image: composer:latest
command: ['bash','-c',"sleep infinity"]
volumes:
- ./src:/var/ www/html
08_LEMP
@danaluther
Deploy stack updates
> docker stack deploy -c docker-compose.yml hod
08_LEMP
@danaluther
Deploy stack updates
> docker stack deploy -c docker-compose.yml hod
08_LEMP
@danaluther
Initialize composer
> docker exec -it $(docker ps -lq -f name=hod_composer) 
bash
08_LEMP
@danaluther
Initialize composer
> docker exec -it $(docker ps -lq -f name=hod_composer) 
bash
08_LEMP
SIDEBAR:
@danaluther
> docker ps -lq -f name=stack_service
The command to rule them all …
> docker exec -it 36fce0da4a8f bash
> docker exec -it $(docker ps -lq -f name=hod_php) 
bash
@danaluther
Initialize composer
> docker exec -it $(docker ps -lq -f name=hod_composer) 
bash
08_LEMP
@danaluther
Require codeception
bash-5.0# composer require codeception/codeception --dev
08_LEMP
@danaluther
Alternately … composer install
bash-5.0# composer install
09_LEMP
@danaluther
Confirm codeception installation
09_LEMP
@danaluther
Access via a php container
> docker exec -it $(docker ps -lq -f name=hod_php) 
bash
09_LEMP
@danaluther
Verify that you can run unit tests
10_LEMP
@danaluther
Enable headless browsers for testing
@danaluther
Enable headless browsers for testing
Update docker-compose.yml with Chrome and Firefox images
@danaluther
Enable headless browsers for testing
Update docker-compose.yml with Chrome and Firefox images
Default to 0 containers - scale the service up/down as needed
@danaluther
Enable headless browsers for testing
Update docker-compose.yml with Chrome and Firefox images
Default to 0 containers - scale the service up/down as needed
Take advantage of x-defaults in the .yml to keep the compose file dry
@danaluther
Setting up x-defaults
x-defaults:
network: &network
networks:
- net
selenium-services: &selenium-svc
environment:
# Required to avoid container startup hanging sometimes in
# some environments
JAVA_OPTS: -Djava.security.egd=file:/dev/./urandom
ports:
- "4444:4444"
deploy:
replicas: 0
restart_policy:
condition: on-failure
<<: *network
10_LEMP
@danaluther
Implementing x-default network
php:
# Custom PHP Image - see /images/Readme.md
image: dhluther/php:7.4-debug
volumes:
- ./src:/var/ www/html
<<: *network
…
networks:
net:
10_LEMP
@danaluther
Setting up Chrome and Firefox
#Used for Acceptance Tests for Firefox
firefox:
image: selenium/standalone-firefox-debug:2.53.0
<<: *selenium-svc
#Used for Acceptance Tests for Chrome
chrome:
image: selenium/standalone-chrome-debug
<<: *selenium-svc
ports:
- "4443:4444"
10_LEMP
@danaluther
Deploy and Scale services
10_LEMP
@danaluther
What if we forget to scale up chrome?
10_LEMP
@danaluther
So how do we swap out php
versions?
@danaluther
Build the 7.3-fpm image
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.3-fpm-mysql-c 
--target=customized . 
--build-arg PHP_TARGET=7.3-fpm
10_LEMP
@danaluther
Build the 7.3-fpm image
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.3-fpm-mysql-c 
--target=customized . 
--build-arg PHP_TARGET=7.3-fpm
10_LEMP
> docker image build -f Dockerfile-php-mysql 
-t dhluther/php:7.3-debug 
--target=debug . 
--build-arg PHP_TARGET=7.3-fpm
@danaluther
Build the 7.3-fpm image
10_LEMP
@danaluther
Update the service
> docker service update 
--image=dhluther/php:7.3-fpm-mysql-c 
hod_php
@danaluther
Update the service
> docker service update 
--image=dhluther/php:7.3-fpm-mysql-c 
hod_php
@danaluther
Run our unit test
@danaluther
@danaluther
Verify the MySQL page
@danaluther
Roll back the service
> docker service rollback hod_php
@danaluther
But what about additional services?
@danaluther
Add new services to our stack
phpMyAdmin — https://www.phpmyadmin.net/
Redis — https://redis.io/
@danaluther
Define the phpMyAdmin service
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
deploy:
replicas: 1
restart_policy:
condition: on-failure
ports:
- 8081:80
<<: *network
volumes:
- /sessions
11_LEMP
@danaluther
Deploy stack updates
> docker stack deploy -c docker-compose.yml hod
11_LEMP
@danaluther
localhost:8081
@danaluther
Define the redis service
redis:
image: redis:latest
volumes:
- ./data_redis:/data
deploy:
placement:
constraints: [node.role == manager]
<<: *network
12_LEMP
@danaluther
Deploy stack updates
> docker stack deploy -c docker-compose.yml hod
12_LEMP
@danaluther
Verify redis is running
@danaluther
Shut it down!
> docker stack rm hod
> docker swarm leave --force
@danaluther
Questions??
🤔
?
? ?
?
https://www.linkedin.com/in/danaluther
dluther@envisageinternational.com
https://git.io/JvUy5

Mais conteúdo relacionado

Mais procurados

Reusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesReusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesYevgeniy Brikman
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabricandymccurdy
 
Scaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on OpenstackScaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on OpenstackBobby DeVeaux, DevOps Consultant
 
Transforming Infrastructure into Code - Importing existing cloud resources u...
Transforming Infrastructure into Code  - Importing existing cloud resources u...Transforming Infrastructure into Code  - Importing existing cloud resources u...
Transforming Infrastructure into Code - Importing existing cloud resources u...Shih Oon Liong
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet CampPuppet
 
MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011Mike Willbanks
 
WordPress Development Environments
WordPress Development Environments WordPress Development Environments
WordPress Development Environments Ohad Raz
 
Configuring Highly Scalable Compile Masters, Vasco Cardoso, AWS
Configuring Highly Scalable Compile Masters, Vasco Cardoso, AWSConfiguring Highly Scalable Compile Masters, Vasco Cardoso, AWS
Configuring Highly Scalable Compile Masters, Vasco Cardoso, AWSPuppet
 
Drush in the Composer Era
Drush in the Composer EraDrush in the Composer Era
Drush in the Composer EraPantheon
 
Cooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with JitterbugCooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with JitterbugDavid Golden
 
Docker for Developers - php[tek] 2017
Docker for Developers - php[tek] 2017Docker for Developers - php[tek] 2017
Docker for Developers - php[tek] 2017Chris Tankersley
 
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, OrchestrationThe Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, OrchestrationErica Windisch
 
Porting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability SystemsPorting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability SystemsMarcelo Pinheiro
 
Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016Ben Hall
 
Automated Java Deployments With Rpm
Automated Java Deployments With RpmAutomated Java Deployments With Rpm
Automated Java Deployments With RpmMartin Jackson
 
Deploying applications to Windows Server 2016 and Windows Containers
Deploying applications to Windows Server 2016 and Windows ContainersDeploying applications to Windows Server 2016 and Windows Containers
Deploying applications to Windows Server 2016 and Windows ContainersBen Hall
 
Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)Nicola Paolucci
 
The How and Why of Windows containers
The How and Why of Windows containersThe How and Why of Windows containers
The How and Why of Windows containersBen Hall
 

Mais procurados (20)

Reusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesReusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modules
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabric
 
Scaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on OpenstackScaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on Openstack
 
Transforming Infrastructure into Code - Importing existing cloud resources u...
Transforming Infrastructure into Code  - Importing existing cloud resources u...Transforming Infrastructure into Code  - Importing existing cloud resources u...
Transforming Infrastructure into Code - Importing existing cloud resources u...
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
 
MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011
 
WordPress Development Environments
WordPress Development Environments WordPress Development Environments
WordPress Development Environments
 
Configuring Highly Scalable Compile Masters, Vasco Cardoso, AWS
Configuring Highly Scalable Compile Masters, Vasco Cardoso, AWSConfiguring Highly Scalable Compile Masters, Vasco Cardoso, AWS
Configuring Highly Scalable Compile Masters, Vasco Cardoso, AWS
 
Drush in the Composer Era
Drush in the Composer EraDrush in the Composer Era
Drush in the Composer Era
 
Cooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with JitterbugCooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with Jitterbug
 
Docker for Developers - php[tek] 2017
Docker for Developers - php[tek] 2017Docker for Developers - php[tek] 2017
Docker for Developers - php[tek] 2017
 
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, OrchestrationThe Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
 
Porting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability SystemsPorting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability Systems
 
Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016
 
Scaling Django
Scaling DjangoScaling Django
Scaling Django
 
BPMS1
BPMS1BPMS1
BPMS1
 
Automated Java Deployments With Rpm
Automated Java Deployments With RpmAutomated Java Deployments With Rpm
Automated Java Deployments With Rpm
 
Deploying applications to Windows Server 2016 and Windows Containers
Deploying applications to Windows Server 2016 and Windows ContainersDeploying applications to Windows Server 2016 and Windows Containers
Deploying applications to Windows Server 2016 and Windows Containers
 
Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)
 
The How and Why of Windows containers
The How and Why of Windows containersThe How and Why of Windows containers
The How and Why of Windows containers
 

Semelhante a SEO-Optimized Title for Hands-on Docker Workshop

Docker for Web Developers: A Sneak Peek
Docker for Web Developers: A Sneak PeekDocker for Web Developers: A Sneak Peek
Docker for Web Developers: A Sneak Peekmsyukor
 
Docker for developers on mac and windows
Docker for developers on mac and windowsDocker for developers on mac and windows
Docker for developers on mac and windowsDocker, Inc.
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdfOKLABS
 
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOpsОмские ИТ-субботники
 
Dockerize Laravel Application
Dockerize Laravel ApplicationDockerize Laravel Application
Dockerize Laravel ApplicationAfrimadoni Dinata
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作Philip Zheng
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to DockerLuong Vo
 
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and BeyondDrupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and BeyondDrupalDay
 
DCEU 18: Developing with Docker Containers
DCEU 18: Developing with Docker ContainersDCEU 18: Developing with Docker Containers
DCEU 18: Developing with Docker ContainersDocker, Inc.
 
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google CloudDrupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google CloudDropsolid
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleStein Inge Morisbak
 
Super powered Drupal development with docker
Super powered Drupal development with dockerSuper powered Drupal development with docker
Super powered Drupal development with dockerMaciej Lukianski
 
Using Docker For Development
Using Docker For DevelopmentUsing Docker For Development
Using Docker For DevelopmentLaura Frank Tacho
 
Docker orchestration v4
Docker orchestration v4Docker orchestration v4
Docker orchestration v4Hojin Kim
 
Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020CloudHero
 
Automating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyondAutomating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyondNuvole
 
Lean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushLean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushPantheon
 

Semelhante a SEO-Optimized Title for Hands-on Docker Workshop (20)

Docker for Web Developers: A Sneak Peek
Docker for Web Developers: A Sneak PeekDocker for Web Developers: A Sneak Peek
Docker for Web Developers: A Sneak Peek
 
Docker for developers on mac and windows
Docker for developers on mac and windowsDocker for developers on mac and windows
Docker for developers on mac and windows
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
 
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
 
Dockerize Laravel Application
Dockerize Laravel ApplicationDockerize Laravel Application
Dockerize Laravel Application
 
Learning Docker with Thomas
Learning Docker with ThomasLearning Docker with Thomas
Learning Docker with Thomas
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and BeyondDrupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
 
DCEU 18: Developing with Docker Containers
DCEU 18: Developing with Docker ContainersDCEU 18: Developing with Docker Containers
DCEU 18: Developing with Docker Containers
 
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google CloudDrupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
 
Super powered Drupal development with docker
Super powered Drupal development with dockerSuper powered Drupal development with docker
Super powered Drupal development with docker
 
Using Docker For Development
Using Docker For DevelopmentUsing Docker For Development
Using Docker For Development
 
Docker orchestration v4
Docker orchestration v4Docker orchestration v4
Docker orchestration v4
 
Docker orchestration
Docker orchestrationDocker orchestration
Docker orchestration
 
Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020
 
Automating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyondAutomating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyond
 
Lean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushLean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and Drush
 
Docker, c'est bonheur !
Docker, c'est bonheur !Docker, c'est bonheur !
Docker, c'est bonheur !
 

Mais de Dana Luther

Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Dana Luther
 
How to analyze your codebase with Exakat using Docker - Longhorn PHP
How to analyze your codebase with Exakat using Docker - Longhorn PHPHow to analyze your codebase with Exakat using Docker - Longhorn PHP
How to analyze your codebase with Exakat using Docker - Longhorn PHPDana Luther
 
Keep it Secret, Keep it Safe - Docker Secrets and DI
Keep it Secret, Keep it Safe - Docker Secrets and DIKeep it Secret, Keep it Safe - Docker Secrets and DI
Keep it Secret, Keep it Safe - Docker Secrets and DIDana Luther
 
Integrated Feature Management - Using Feature Flags - PHPSerbia
Integrated Feature Management - Using Feature Flags - PHPSerbiaIntegrated Feature Management - Using Feature Flags - PHPSerbia
Integrated Feature Management - Using Feature Flags - PHPSerbiaDana Luther
 
Integrated Feature Management - Using Feature Flags - MidwestPHP
Integrated Feature Management - Using Feature Flags - MidwestPHPIntegrated Feature Management - Using Feature Flags - MidwestPHP
Integrated Feature Management - Using Feature Flags - MidwestPHPDana Luther
 
Integrated Feature Management - Using Feature Flags - SunshinePHP
Integrated Feature Management - Using Feature Flags - SunshinePHPIntegrated Feature Management - Using Feature Flags - SunshinePHP
Integrated Feature Management - Using Feature Flags - SunshinePHPDana Luther
 
Converting your DEV Environment to a Docker Stack - ZCOE18
Converting your DEV Environment to a Docker Stack - ZCOE18Converting your DEV Environment to a Docker Stack - ZCOE18
Converting your DEV Environment to a Docker Stack - ZCOE18Dana Luther
 
Converting Your DEV Environment to a Docker Stack
Converting Your DEV Environment to a Docker StackConverting Your DEV Environment to a Docker Stack
Converting Your DEV Environment to a Docker StackDana Luther
 
Code Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsCode Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsDana Luther
 

Mais de Dana Luther (9)

Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
 
How to analyze your codebase with Exakat using Docker - Longhorn PHP
How to analyze your codebase with Exakat using Docker - Longhorn PHPHow to analyze your codebase with Exakat using Docker - Longhorn PHP
How to analyze your codebase with Exakat using Docker - Longhorn PHP
 
Keep it Secret, Keep it Safe - Docker Secrets and DI
Keep it Secret, Keep it Safe - Docker Secrets and DIKeep it Secret, Keep it Safe - Docker Secrets and DI
Keep it Secret, Keep it Safe - Docker Secrets and DI
 
Integrated Feature Management - Using Feature Flags - PHPSerbia
Integrated Feature Management - Using Feature Flags - PHPSerbiaIntegrated Feature Management - Using Feature Flags - PHPSerbia
Integrated Feature Management - Using Feature Flags - PHPSerbia
 
Integrated Feature Management - Using Feature Flags - MidwestPHP
Integrated Feature Management - Using Feature Flags - MidwestPHPIntegrated Feature Management - Using Feature Flags - MidwestPHP
Integrated Feature Management - Using Feature Flags - MidwestPHP
 
Integrated Feature Management - Using Feature Flags - SunshinePHP
Integrated Feature Management - Using Feature Flags - SunshinePHPIntegrated Feature Management - Using Feature Flags - SunshinePHP
Integrated Feature Management - Using Feature Flags - SunshinePHP
 
Converting your DEV Environment to a Docker Stack - ZCOE18
Converting your DEV Environment to a Docker Stack - ZCOE18Converting your DEV Environment to a Docker Stack - ZCOE18
Converting your DEV Environment to a Docker Stack - ZCOE18
 
Converting Your DEV Environment to a Docker Stack
Converting Your DEV Environment to a Docker StackConverting Your DEV Environment to a Docker Stack
Converting Your DEV Environment to a Docker Stack
 
Code Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsCode Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application Migrations
 

Último

Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作ys8omjxb
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012rehmti665
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationLinaWolf1
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa494f574xmv
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Excelmac1
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一z xss
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMartaLoveguard
 
Intellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptxIntellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptxBipin Adhikari
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Paul Calvano
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Sonam Pathan
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxDyna Gilbert
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predieusebiomeyer
 
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一Fs
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Sonam Pathan
 
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书rnrncn29
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一Fs
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhimiss dipika
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书zdzoqco
 

Último (20)

Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 Documentation
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptx
 
Intellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptxIntellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptx
 
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptx
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predi
 
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
 
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
 
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhi
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
 

SEO-Optimized Title for Hands-on Docker Workshop