2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
Docker for Web Developers: A Sneak Peek
1. Docker for Web Developers:
A Sneak Peek
MOHD SYUKOR ABDUL
NOVEMBER 5, 2016
2. What is Docker?
2
Docker is a platform for developing, shipping and running applications using
container virtualization technology.
The Docker Platform consists of multiple products/tools:
Docker Engine
Docker Registry
Docker Machine
Docker Swarm
Docker Compose
Kitematic
Docker for Linux
Docker for Mac
Docker for Windows
Docker for Windows Server 2016
https://www.docker.com/
3. Why Docker?
3
Containers running on a
single machine share the
same operating system
kernel; they start instantly
and use less RAM. Images are
constructed from layered
filesystems and share
common files, making disk
usage and image downloads
much more efficient.
LIGHTWEIGHT
Docker containers are based
on open standards, enabling
containers to run on all major
Linux distributions and on
Microsoft Windows -- and on
top of any infrastructure.
OPEN
Containers isolate
applications from one
another and the underlying
infrastructure, while
providing an added layer of
protection for the application.
SECURE BY DEFAULT
7. Example Use Case: Development and Test in the Cloud
7
DEVELOPERS IT PRO
BUILD
Development Environments
SHIP
Secure Content & Collaboration
Developers
Version
control
Docker
Trusted Registry
QA / QE
Staging
9. Docker’s Commands
9
docker info # displays system wide information of Docker
docker build # Build an image from a Dockerfile
docker images # List all images on a Docker host
docker pull # Pull an image from a Registry
docker run # Run an image
docker ps # List all running and stopped instances
docker stop # Stop a running instances
docker rm # Remove an instance
docker rmi # Remove an image
docker stats # Show running containers‘ resource usage info
docker attach # Attach to a running container
docker logs # Fetch the logs of a container
docker inspect # Return low-level information on a container or image
docker history # Show the history of an image
AND MORE at https://docs.docker.com/engine/reference/commandline/
10. The Secret Recipe 1: Dockerfile
10
Dockerfiles = image build
script.
Simple syntax for building
images.
Automate and script the
images creation.
Dockerfile:
-------------------------------------------------------
FROM debian:jessie
ENV HTTPD_PREFIX /usr/local/apache2
ENV PATH $HTTPD_PREFIX/bin:$PATH
RUN mkdir -p "$HTTPD_PREFIX"
&& chown www-data:www-data "$HTTPD_PREFIX"
WORKDIR $HTTPD_PREFIX
RUN apt-get update
&& apt-get install -y --no-install-recommends
libapr1
libaprutil1
libaprutil1-ldap
libapr1-dev
libaprutil1-dev
libpcre++0
libssl1.0.0
&& rm -r /var/lib/apt/lists/*
COPY httpd-foreground /usr/local/bin/
EXPOSE 80
CMD ["httpd-foreground"]
-------------------------------------------------------
docker build -t my-apache2 .
11. The Secret Recipe 2: Docker Compose
11
Compose is a tool for
defining and running multi-
container Docker
applications.
The secret recipe is in the
docker-compose.yml file.
docker-compose.yml:
---------------------------------------------------
joomla:
image: joomla
links:
- joomladb:mysql
ports:
- 8080:80
joomladb:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: example
---------------------------------------------------
docker-compose up -d
12. Docker for PHP Developers
12
Dockerfile:
------------------------------------------------------------------
FROM php:7.0-apache
COPY src/ /var/www/html/
------------------------------------------------------------------
docker build -t my-php-app .
docker run -d --name my-running-app my-php-app
13. Docker for Java Developers
13
Dockerfile:
------------------------------------------------------------------------
FROM jboss/wildfly
ADD your-awesome-app.war /opt/jboss/wildfly/standalone/deployments/
------------------------------------------------------------------------
docker build --tag=wildfly-app .
docker run -it wildfly-app
14. Docker for Python Developers
14
Dockerfile:
-----------------------------------------------------------------------
FROM ubuntu:16.04
MAINTANER Your Name "youremail@domain.tld"
RUN apt-get update -y &&
apt-get install -y python-pip python-dev
COPY ./requirements.txt /app/requirements.txt
WORKDIR /app
RUN pip install -r requirements.txt
COPY . /app
ENTRYPOINT [ "python" ]
CMD [ "app.py" ]
-----------------------------------------------------------------------
docker build -t myflask1:latest .
docker run -d -p 5000:5000 myflask1
15. Docker for Node.js Developers
15
Dockerfile:
--------------------------------------------------------------------
FROM node
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
--------------------------------------------------------------------
docker build -t yourname/node-web-app .
docker run -p 49160:8080 -d yourname/node-web-app
16. Docker for Go Developers
16
$ docker run --rm -it -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.6 bash
$ for GOOS in darwin linux; do
> for GOARCH in 386 amd64; do
> go build -v -o myapp-$GOOS-$GOARCH
> done
> done
17. Docker for Database Server
17
MySQL Server:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8
MariaDB Server:
docker run --name some-mariadb -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb
Percona Server:
docker run --name some-percona -e MYSQL_ROOT_PASSWORD=my-secret-pw -d
percona:5.7.14
PostgreSQL Server:
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d
postgres:9.6
MongoDB Server:
docker run --name some-mongo -d mongo
18. Docker for WordPress
18
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password
-e MYSQL_DATABASE=wordpress -d mysql:5.7
docker run -e WORDPRESS_DB_PASSWORD=password -d --name wordpress
--link wordpressdb:mysql wordpress
19. Docker for Joomla
19
docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
docker run --name joomla1 --link mysql1:mysql -d joomla
docker run --name some-joomla --link mysql1:mysql -p 8080:80 -d joomla
docker run -d -p 80:80 -p 3306:3306 webkul/joomla:latest