├── README.md
├── Dockerfile
├── docker-compose.yml
├── prod.yml
├── app
├── templates
│ └── index.html
├── app.py
└── test.py
└── .circleci
└── config.yml
/README.md:
--------------------------------------------------------------------------------
1 | # dockerapp
2 | Project source code for James Lee's Docker course.
3 |
4 | Check out our latest DevOps PDF book.
5 |
6 | https://www.level-up.one/devops-pdf-book/
7 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.5
2 | RUN pip install Flask==0.11.1 redis==2.10.5
3 | RUN useradd -ms /bin/bash admin
4 | USER admin
5 | COPY app /app
6 | WORKDIR /app
7 | CMD ["python", "app.py"]
8 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.0"
2 | services:
3 | dockerapp:
4 | build: .
5 | ports:
6 | - "5000:5000"
7 | depends_on:
8 | - redis
9 | redis:
10 | image: redis:3.2.0
11 |
--------------------------------------------------------------------------------
/prod.yml:
--------------------------------------------------------------------------------
1 | version: "3.0"
2 | services:
3 | dockerapp:
4 | image: jleetutorial/dockerapp
5 | ports:
6 | - "5000:5000"
7 | depends_on:
8 | - redis
9 | redis:
10 | image: redis:3.2.0
11 |
--------------------------------------------------------------------------------
/app/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | key value lookup service
4 |
5 |
6 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask, request, render_template
2 | import redis
3 |
4 | app = Flask(__name__)
5 | default_key = '1'
6 | cache = redis.StrictRedis(host='redis', port=6379, db=0)
7 | cache.set(default_key, "one")
8 |
9 | @app.route('/', methods=['GET', 'POST'])
10 | def mainpage():
11 |
12 | key = default_key
13 | if 'key' in request.form:
14 | key = request.form['key']
15 |
16 | if request.method == 'POST' and request.form['submit'] == 'save':
17 | cache.set(key, request.form['cache_value'])
18 |
19 | cache_value = None;
20 | if cache.get(key):
21 | cache_value = cache.get(key).decode('utf-8')
22 |
23 | return render_template('index.html', key=key, cache_value=cache_value)
24 |
25 | if __name__ == '__main__':
26 | app.run(host='0.0.0.0')
27 |
--------------------------------------------------------------------------------
/app/test.py:
--------------------------------------------------------------------------------
1 | import unittest
2 | import app
3 |
4 | class TestDockerapp(unittest.TestCase):
5 |
6 | def setUp(self):
7 | self.app = app.app.test_client()
8 |
9 | def test_save_value(self):
10 | response = self.app.post('/', data=dict(submit='save', key='2', cache_value='two'))
11 | assert response.status_code == 200
12 | assert b'2' in response.data
13 | assert b'two' in response.data
14 |
15 | def test_load_value(self):
16 | self.app.post('/', data=dict(submit='save', key='2', cache_value='two'))
17 | response = self.app.post('/', data=dict(submit='load', key='2'))
18 | assert response.status_code == 200
19 | assert b'2' in response.data
20 | assert b'two' in response.data
21 |
22 | if __name__=='__main__':
23 | unittest.main()
24 |
--------------------------------------------------------------------------------
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | jobs:
3 | build:
4 | working_directory: /dockerapp
5 | docker:
6 | - image: docker:17.05.0-ce-git
7 | steps:
8 | - checkout
9 | - setup_remote_docker
10 | - run:
11 | name: Install dependencies
12 | command: |
13 | apk add --no-cache py-pip=9.0.0-r1
14 | pip install docker-compose==1.15.0
15 | - run:
16 | name: Run tests
17 | command: |
18 | docker-compose up -d
19 | docker-compose run dockerapp python test.py
20 | - deploy:
21 | name: Push application Docker image
22 | command: |
23 | docker login -e $DOCKER_HUB_EMAIL -u $DOCKER_HUB_USER_ID -p $DOCKER_HUB_PWD
24 | docker tag dockerapp_dockerapp $DOCKER_HUB_USER_ID/dockerapp:$CIRCLE_SHA1
25 | docker tag dockerapp_dockerapp $DOCKER_HUB_USER_ID/dockerapp:latest
26 | docker push $DOCKER_HUB_USER_ID/dockerapp:$CIRCLE_SHA1
27 | docker push $DOCKER_HUB_USER_ID/dockerapp:latest
28 |
--------------------------------------------------------------------------------