Created by Gianluca Arbezzano
Gianluca Arbezzano Full Stack Developer Maintainer Doctrine Module and open source contributor |
To increase control of system
To mitigate the security issue
To gurantee scalability
Scalability <=> High avalability.
Scalability is the ability of a system, network, or process to handle a growing amount of work in a capable manner or its ability to be enlarged to accommodate that growth. cit. Wikipedia.
The differce between this peaks for a lot of time is unused
Disaster recovery
and we hide a lot of them!
I know what you think..
Each application require its server! cit. strong sysadmin
I am here to apply this concept at your experience
it is an operating-system-level virtualization environment for running multiple isolated Linux systems (containers) on a single Linux control host.
it is an operating-system-level virtualization environment for running multiple isolated Linux systems (containers) on a single Linux control host.
I love Wikipedia
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server
Commands:
attach Attach to a running container
build Build an image from a Dockerfile
images List images
kill Kill a running container
logs Fetch the logs of a container
ps List containers
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
search Search the Docker Hub for images
start Start one or more stopped containers
stop Stop a running container
FROM ubuntu
RUN dpkg-divert --local --rename --add /sbin/initctl
RUN ln -s /bin/true /sbin/initctl
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get -y install mysql-server
EXPOSE 3306
CMD ["/usr/bin/mysqld_safe"]
FROM php:5.6-apache
RUN a2enmod rewrite
RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
&& docker-php-ext-install gd
RUN docker-php-ext-install mysqli
VOLUME /var/www/html
RUN curl -o wordpress.tar.gz -SL https://wordpress.org/wordpress.tar.gz \
&& tar -xzf wordpress.tar.gz -C /usr/src/ \
&& rm wordpress.tar.gz \
&& chown -R www-data:www-data /usr/src/wordpress
CMD ["apache2-foreground"]
docker build -t gianarb/mysql .
Same stuff for wordpress
docker run -t mysql -p 3306:3306 gianarb/mysql
docker run -p 8080:80 -d --name wp1 --link wp.database.prod:mysql wordpress
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application’s services.
wp:
image: wordpress
ports:
- 8081:80
environment:
WORDPRESS_DB_HOST: wp1.database.prod
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: help_me
links:
- wp1.database.prod:mysql
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: help_me
Commands:
build Build or rebuild services
logs View output from containers
ps List containers
pull Pulls service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
up Create and start containers
it is a highly scalable, fast, container management service that makes it easy to run, stop, and manage Docker containers on a cluster of Amazon EC2 instances
by AWS
Container instance: An Amazon EC2 that is running the Amazon ECS Agent. It has been registered to ECS Cluster
Cluster: It is a pool of Container instances
Task definition: A description of an application that contains one or more container definitions
{
"family": "",
"containerDefinitions": [
}
}
Each Task definition running is a Task
ecs-cli configure \
--region eu-west-1 \
--cluster wps \
--access-key apikey \
--secret-key secreyKey
Create your cluster and confiugre your cli
ecs-cli up --keypair codemotion-ecs \
--capability-iam \
--size 1 \
--instance-type t2.medium
Configure Cluster and start first EC2
ecs-cli compose --file docker-compose.yml \
--project-name wp1 up
Up your first wordpress task, wp1
ecs-cli ps
See status of your tasks
COMMANDS:
configure Configures your AWS credentials
up Create the ECS Cluster
down Delete the ECS Cluster and associated resources
scale Modify the number of container instances.
ps List all of the running containers.
compose Execute docker-compose style commands
on an ECS cluster.
help, h Shows a list of commands or help for one command
docker-compose style commands?!
Now we have 2 wordpress that run on different ports 8080 and 8081
Our problem are not finished
high availability, load balancing, and proxying for TCP and HTTP-based applications. It is particularly suited for very high traffic web sites and powers quite a number of the world's most visited ones.
...
frontend wp_mananger
bind :80
acl host_wp1 hdr(host) -i wp1.gianarb.it
acl host_wp2 hdr(host) -i wp2.gianarb.it
use_backend backend_wp1 if host_wp1
use_backend backend_wp2 if host_wp2
backend backend_wp1
server server1 54.229.190.73:8080 check
backend backend_wp2
server server2 54.229.190.73:8081 check
Maybe this is not the best solution
AWS! AWS! AWS!
Manage a cluster of Linux containers as a single system to accelerate Dev and simplify Ops.
Kubernetes is an open source orchestration system for Docker containers.
Docker Swarm is native clustering for Docker. It allows you create and access to a pool of Docker hosts using the full suite of Docker tools
Instead of installing packages via yum or apt, CoreOS uses Linux containers to manage your services at a higher level of abstraction
Take your coupon
It'll not more a bad response