+ All Categories
Home > Software > 7 reasons to start using Docker

7 reasons to start using Docker

Date post: 20-Aug-2015
Category:
Upload: taras-lyapun
View: 2,244 times
Download: 2 times
Share this document with a friend
44
7 REASONS TO START USING DOCKER TARAS LYAPUN
Transcript

7 REASONS TO START USING DOCKER

TARAS LYAPUN

2https://flic.kr/p/ddR3Ld

DOCKER IS NOT A NEW VAGRANT!

3

REASON #1

LINUX CONTAINER

• OPERATING SYSTEM–LEVEL VIRTUALIZATION

• CGROUPS

• NAMESPACE

4

5

6

VIRTUAL MACHINE CONTAINER

ISOLATION COMPLETE ALMOST COMPLETE

DENSITY x1 x3

OVERHEAD HIGH LOW

STARTUP SPEED 30 - 60 sec ~1 second

DOCKER IS SIMPLE!

7

REASON #2

DOCKERFILE

8

FROM ubuntu RUN apt-get install -y python ADD ./app /app RUN pip install -r /app/requirements.txt WORKDIR /app EXPOSE 8000 VOLUME /app/logs CMD /app/gunicorn.sh

COMMAND LINE INTERFACE

9

~ docker build -t test-image .

~ docker run -d -p 8000:8000 \ -v /var/logs/docker:/app/logs \ —restart=always \ test-image

~ docker push your-repo/test-image

IDENTITY AND REPEATABILITY OF DEV,

TEST AND PROD ENVIRONMENT

10

REASON #3

VAGRANT

11

DOCKER

12

FIG

13

web: build: . command: python app.py links: - db ports: - "8000:8000" db: image: postgres

~ fig up

http://www.fig.sh/

IDEAL CI + CD*

14

*from my point of view

SIMPLE DEPLOYMENT

15

REASON #4

BEFORE DOCKER

16

AFTER DOCKER

17

BEFORE DOCKER• ---

• # INSTALL ELASTICSEARCH

• # INSTALL APT KEY

• - APT_KEY: URL=HTTP://PACKAGES.ELASTICSEARCH.ORG/GPG-KEY-ELASTICSEARCH STATE=PRESENT

• # SET DEDICATED REPOSITORY

• - APT_REPOSITORY: REPO='DEB HTTP://PACKAGES.ELASTICSEARCH.ORG/ELASTICSEARCH/{{ES_VERSION}}/DEBIAN STABLE MAIN' STATE=PRESENT

• # INSTALL ELASTICSEARCH WITH DEPENDANCIES

• - NAME: INSTALL ELASTICSEARCH

• APT: NAME={{ ITEM }} STATE=LATEST FORCE=YES

• TAGS: ELASTICSEARCH

• WITH_ITEMS:

• - ELASTICSEARCH

• - OPENJDK-7-JRE-HEADLESS

• - OPENNTPD

• NOTIFY: INIT ELASTICSEARCH

• # SET LIMITS.CONF

• - NAME: LIMITS.CONF TUNING

• LINEINFILE: DEST=/ETC/SECURITY/LIMITS.CONF LINE="{{ ITEM }}"

• TAGS: ELASTICSEARCH

• WITH_ITEMS:

• - 'ELASTICSEARCH SOFT NOFILE 32000'

• - 'ELASTICSEARCH HARD NOFILE 32000'

• # ENSURE SERVICE STARTED

• - SERVICE: NAME=ELASTICSEARCH STATE=STARTED

• # INSTALL PLUGINS

• - INCLUDE: PLUGINS.YML

18

AFTER DOCKER

~ DOCKER PULL DOCKERFILE/ELASTICSEARCH

~ DOCKER RUN -D -P 9200:9200 -V /VAR/DATA:/DATA \

DOCKERFILE/ELASTICSEARCH

19

• ---

• # INSTALL ELASTICSEARCH

• # INSTALL APT KEY

• - APT_KEY: URL HTTPSTATE=PRESENT

• # SET DEDICATED REPOSITORY

• - APT_REPOSITORYELASTICSEARCH/{{ES

• # INSTALL ELASTICSEARCH

• - NAME: INSTALL ELASTICSEARCH

• APT: NAME={{ ITEM

• TAGS: ELASTICSEARCH

• WITH_ITEMS:

• - ELASTICSEARCH

• - OPENJDK-7-JRE

• - OPENNTPD

• NOTIFY

• # SET LIMITS

• - NAME LIMITS

• LINEINFILE

• TAGS: ELASTICSEARCH

• WITH_ITEMS

• - 'ELASTICSEARCH

• - 'ELASTICSEARCH

• # ENSURE

• - SERVICE

• # INSTALL

• - INCLUDE

DOCKERFILE

20

FROM ubuntu RUN apt-get install -y python ADD ./app /app RUN pip install -r /app/requirements.txt WORKDIR /app EXPOSE 8000 VOLUME /app/logs CMD /app/gunicorn.sh

SIMPLE ROLLBACK

~ DOCKER STOP NEW_CONTAINER

~ DOCKER START OLD_CONTAINER

21

IMAGE REUSE

FROM IDEAL-PYTHON-ENVIRONMENT

# SPECIFIC CODE

22

EASY TO BUILD YOUR OWN PLATFORM

23

REASON #5

WHY MAY YOU NEED PAAS?

• A LOT OF PROJECTS

• SERVICE-ORIENTED ARCHITECTURE

• A LOT OF TESTING ENVIRONMENTS

• CONTINUOUS DEPLOYMENT

• SCALABILITY

24

OPENSOURCE PAAS BUILT WITH DOCKER

• DOKKU

• DEIS

• FLYNN

• BUILD YOUR OWN

25

DOCKER FORCES YOU TO THINK ABOUT

SCALE

26

REASON #6

THE TWELVE-FACTOR APP

• DECLARATIVE FORMAT FOR SETUP AUTOMATION

• CLEAN CONTRACT WITH UNDERLYING OS

• SUITABLE FOR DEPLOYMENT ON MODERN CLOUD PLATFORMS

• MINIMIZE DIVERGENCE BETWEEN DEV AND PROD

• CAN SCALE UP WITHOUT SIGNIFICANT CHANGES TO TOOLING

OR ARCHITECTURE

27http://12factor.net

1. CODEBASE

28

One codebase tracked in revision control, many deploys

2. DEPENDENCIES

29

Explicitly declare and isolate dependencies

3. CONFIG

30

Store config in the environment

• SETTINGS_LOCAL.PY

• ~ DOCKER RUN -D -E SMTP_SERVER_PASSWORD=12345 \ PROJECT/APP

4. BACKING SERVICES

31

Treat backing services as attached resources

• DOCKER RUN -D —NAME=DB POSTGRES

• DOCKER RUN -D —LINK DB:DB PROJECT/APP

• MULTIHOST: HTTP://STACKOVERFLOW.COM/QUESTIONS/18285212/HOW-TO-SCALE-DOCKER-CONTAINERS-IN-PRODUCTION

5. BUILD, CONFIG, RELEASE

32

Strictly separate build and run stages

BUILD: DOCKER BUILD .

CONFIG: DOCKER CREATE

RELEASE: DOCKER START

6. PROCESSES

33

Execute the app as one or more stateless processes

DOCKER CONTAINER STATELESS BY DEFAULT

7. PORT BINDING

34

Export services via port binding

~ DOCKER RUN -P 8000:80 PROJECT/APP

8. CONCURRENCY

35

Scale out via the process model

9. DISPOSABILITY

36

Maximize robustness with fast startup and graceful shutdown

~ DOCKER STOP CONTAINER_NAME ~ DOCKER START CONTAINER_NAME

10. DEV/PROD PARITY

37

Keep development, staging, and production as similar as possible

SLIDE # 11

11. LOGS

38

Treat logs as event streams

~ DOCKER LOGS CONTAINER_NAME

12. ADMIN PROCESSES

39

Run admin/management tasks as one-off processes

~ DOCKER RUN PROJECT/APP /BIN/RUN_GUNICORN.SH

~ DOCKER RUN PROJECT/APP /BIN/RUN_CELERY.SH

~ DOCKER RUN PROJECT/APP PYTHON MANAGE.PY MIGRATE

~ DOCKER EXEC CONTAINER_NAME PYTHON MANAGE.PY ANYTHING

DOCKER IS A NEW BUZZ WORD*

40

REASON #7

* in a good sense

INTEREST GROWING

41

March 2013 October 2014

CRIU

•FREEZE A RUNNING APPLICATION

•CHECKPOINT IT TO A HARD DRIVE

•RESTORE AND RUN THE APPLICATION

42

CORE OS

• NEW RE-ARCHITECTED LINIX DISTRIBUTION

• MINIMAL RAM USAGE

• APPLICATIONS RUN AS DOCKER CONTAINERS

• DESIGNED FOR SCALE

43

QUESTIONS, COMMENTS, THOUGHTS?

TARAS LIAPUN @TLYAPUN [email protected]

44


Recommended