├── .gitignore
├── README.md
├── auto-build
├── Dockerfile
├── app.py
├── docker-compose.yml
├── hooks
│ ├── build
│ └── push
└── requirements.txt
├── auto-cache-from
├── Dockerfile
├── app.py
├── docker-compose.yml
├── hooks
│ ├── build
│ └── push
└── requirements.txt
├── auto-test
├── Dockerfile
├── Dockerfile.test
├── app.py
├── docker-compose.yml
├── hooks
│ ├── build
│ ├── push
│ └── test
├── requirements.txt
└── test.sh
├── docker
└── docker-compose.yml
├── dockerize
├── Dockerfile
├── app.py
├── docker-compose.yml
└── requirements.txt
├── extends
└── docker-compose.yml
├── flask-alpine
├── Dockerfile
├── app.py
└── requirements.txt
├── flask-build-cache
├── Dockerfile
├── app.py
└── requirements.txt
├── flask-ubuntu
├── Dockerfile
├── app.py
└── requirements.txt
├── go-multi-stage
├── Dockerfile
└── app.go
├── go-tests
├── app.go
├── app_test.go
└── docker-compose.yml
├── import
├── docker-compose.17.07.yml
├── docker-compose.override.yml
└── docker-compose.yml
└── local
├── app.py
└── docker-compose.yml
/.gitignore:
--------------------------------------------------------------------------------
1 | demo
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # docker-for-devs
2 |
3 | Ejemplos para el curso de docker de openwebinars
4 |
--------------------------------------------------------------------------------
/auto-build/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:2.7
2 |
3 | WORKDIR /app
4 |
5 | EXPOSE 5000
6 |
7 | ENV NAME World
8 |
9 | CMD ["python", "app.py"]
10 |
11 | ADD requirements.txt /app/requirements.txt
12 | RUN pip install -r requirements.txt
13 |
14 | ADD app.py /app/app.py
15 |
--------------------------------------------------------------------------------
/auto-build/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from redis import Redis, RedisError
3 | import socket
4 |
5 |
6 | app = Flask(__name__)
7 | redis = Redis(host="redis")
8 |
9 |
10 | @app.route("/")
11 | def hello():
12 | try:
13 | visits = redis.incr('counter')
14 | except RedisError:
15 | visits = "counter disabled. Cannot connect to Redis."
16 |
17 | html = "
Hola Openwebinars!
" \
18 | "Hostname: {hostname}
" \
19 | "Visits: {visits}
" \
20 | "
"
21 |
22 | return html.format(hostname=socket.gethostname(), visits=visits)
23 |
24 | if __name__ == "__main__":
25 | app.run(host="0.0.0.0", port=5000)
26 |
--------------------------------------------------------------------------------
/auto-build/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | web:
4 | image: pchico83/ci
5 | build: .
6 | depends_on:
7 | - redis
8 | ports:
9 | - 5000:5000
10 | redis:
11 | image: redis
12 |
--------------------------------------------------------------------------------
/auto-build/hooks/build:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | docker-compose build
6 |
--------------------------------------------------------------------------------
/auto-build/hooks/push:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | docker-compose push
6 |
--------------------------------------------------------------------------------
/auto-build/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask
2 | Redis
3 |
--------------------------------------------------------------------------------
/auto-cache-from/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:2.7
2 |
3 | WORKDIR /app
4 |
5 | EXPOSE 5000
6 |
7 | ENV NAME World
8 |
9 | CMD ["python", "app.py"]
10 |
11 | ADD requirements.txt /app/requirements.txt
12 | RUN pip install -r requirements.txt
13 |
14 | ADD app.py /app/app.py
15 |
--------------------------------------------------------------------------------
/auto-cache-from/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from redis import Redis, RedisError
3 | import socket
4 |
5 |
6 | app = Flask(__name__)
7 | redis = Redis(host="redis")
8 |
9 |
10 | @app.route("/")
11 | def hello():
12 | try:
13 | visits = redis.incr('counter')
14 | except RedisError:
15 | visits = "counter disabled. Cannot connect to Redis."
16 |
17 | html = "Hola Openwebinars!
" \
18 | "Hostname: {hostname}
" \
19 | "Visits: {visits}
" \
20 | "
"
21 |
22 | return html.format(hostname=socket.gethostname(), visits=visits)
23 |
24 | if __name__ == "__main__":
25 | app.run(host="0.0.0.0", port=5000)
26 |
--------------------------------------------------------------------------------
/auto-cache-from/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | web:
4 | image: pchico83/ci
5 | build:
6 | cache_from:
7 | - pchico83/ci
8 | context: .
9 | depends_on:
10 | - redis
11 | ports:
12 | - 5000:5000
13 | redis:
14 | image: redis
15 |
--------------------------------------------------------------------------------
/auto-cache-from/hooks/build:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | echo "Pulling pchico83/ci..."
6 | docker pull pchico83/ci > /dev/null
7 | echo "done!"
8 | docker-compose build
9 |
--------------------------------------------------------------------------------
/auto-cache-from/hooks/push:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | docker-compose push
6 |
--------------------------------------------------------------------------------
/auto-cache-from/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask
2 | Redis
3 |
--------------------------------------------------------------------------------
/auto-test/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:2.7
2 |
3 | WORKDIR /app
4 |
5 | EXPOSE 80
6 |
7 | ENV NAME World
8 |
9 | CMD ["python", "app.py"]
10 |
11 | ADD requirements.txt /app/requirements.txt
12 | RUN pip install -r requirements.txt
13 |
14 | ADD app.py /app/app.py
--------------------------------------------------------------------------------
/auto-test/Dockerfile.test:
--------------------------------------------------------------------------------
1 | FROM alpine:3.6
2 |
3 | RUN apk add --no-cache curl
4 |
5 | WORKDIR /ci
6 |
7 | ADD test.sh /ci/test.sh
8 |
--------------------------------------------------------------------------------
/auto-test/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from redis import Redis, RedisError
3 | import socket
4 |
5 |
6 | app = Flask(__name__)
7 | redis = Redis(host="redis")
8 |
9 |
10 | @app.route("/")
11 | def hello():
12 | try:
13 | visits = redis.incr('counter')
14 | except RedisError:
15 | visits = "counter disabled. Cannot connect to Redis."
16 |
17 | html = "Hola Openwebinars!
" \
18 | "Hostname: {hostname}
" \
19 | "Visits: {visits}
" \
20 | "
"
21 |
22 | return html.format(hostname=socket.gethostname(), visits=visits)
23 |
24 | if __name__ == "__main__":
25 | app.run(host="0.0.0.0", port=5000)
26 |
--------------------------------------------------------------------------------
/auto-test/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | web:
4 | image: pchico83/ci
5 | build:
6 | cache_from:
7 | - pchico83/ci
8 | context: .
9 | depends_on:
10 | - redis
11 | ports:
12 | - 5000:5000
13 | redis:
14 | image: redis
15 | test:
16 | build:
17 | context: .
18 | dockerfile: Dockerfile.test
19 | depends_on:
20 | - web
21 | command: sh /ci/test.sh
22 |
--------------------------------------------------------------------------------
/auto-test/hooks/build:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | echo "Pulling pchico83/ci..."
6 | docker pull pchico83/ci > /dev/null
7 | echo "done!"
8 | docker-compose build web
9 |
--------------------------------------------------------------------------------
/auto-test/hooks/push:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | docker-compose push
6 |
--------------------------------------------------------------------------------
/auto-test/hooks/test:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | docker-compose run --rm test
6 |
--------------------------------------------------------------------------------
/auto-test/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask
2 | Redis
3 |
--------------------------------------------------------------------------------
/auto-test/test.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | sleep 3
4 | if curl web:5000 | grep -q 'Hola Openwebinars!'; then
5 | echo "Tests passed!"
6 | exit 0
7 | else
8 | echo "Tests failed!"
9 | exit 1
10 | fi
--------------------------------------------------------------------------------
/docker/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | docker:
4 | image: docker:17.10
5 | volumes:
6 | - /var/run/docker.sock:/var/run/docker.sock
7 | entrypoint: docker
8 | command: ps
9 |
--------------------------------------------------------------------------------
/dockerize/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:2.7
2 |
3 | WORKDIR /app
4 |
5 | EXPOSE 5000
6 |
7 | ADD requirements.txt /app/requirements.txt
8 | RUN pip install -r requirements.txt
9 |
10 | ADD app.py /app/app.py
11 | CMD ["python", "app.py"]
12 |
--------------------------------------------------------------------------------
/dockerize/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from redis import Redis, RedisError
3 | import socket
4 |
5 |
6 | app = Flask(__name__)
7 | redis = Redis(host="redis")
8 |
9 |
10 | @app.route("/")
11 | def hello():
12 | try:
13 | visits = redis.incr('counter')
14 | except RedisError:
15 | visits = "counter disabled. Cannot connect to Redis."
16 |
17 | html = "Hello Code Europe!
" \
18 | "Hostname: {hostname}
" \
19 | "Visits: {visits}
" \
20 | "
"
21 |
22 | return html.format(hostname=socket.gethostname(), visits=visits)
23 |
24 | if __name__ == "__main__":
25 | app.run(host="0.0.0.0", port=5000)
26 |
--------------------------------------------------------------------------------
/dockerize/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | web:
4 | image: pchico83/dockerize
5 | build: .
6 | depends_on:
7 | - redis
8 | ports:
9 | - 5000:5000
10 | redis:
11 | image: redis
12 |
--------------------------------------------------------------------------------
/dockerize/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask
2 | Redis
3 |
--------------------------------------------------------------------------------
/extends/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | docker:
4 | image: docker:17.10
5 | volumes:
6 | - /var/run/docker.sock:/var/run/docker.sock
7 | entrypoint: docker
8 | command: ps
9 |
10 | docker_17_09:
11 | extends: docker
12 | image: docker:17.09
13 |
--------------------------------------------------------------------------------
/flask-alpine/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine:3.1
2 |
3 | RUN apk add --update python py-pip
4 |
5 | WORKDIR /app
6 | COPY . /app
7 | RUN pip install -r requirements.txt
8 | ENTRYPOINT ["python"]
9 | CMD ["app.py"]
10 |
--------------------------------------------------------------------------------
/flask-alpine/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 |
3 |
4 | app = Flask(__name__)
5 |
6 |
7 | @app.route('/')
8 | def hello_world():
9 | return 'Flask Dockerized'
10 |
11 |
12 | if __name__ == '__main__':
13 | app.run(debug=True,host='0.0.0.0')
14 |
--------------------------------------------------------------------------------
/flask-alpine/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask==1.0
2 |
--------------------------------------------------------------------------------
/flask-build-cache/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine:3.1
2 |
3 | RUN apk add --update python py-pip
4 |
5 | WORKDIR /app
6 | COPY requirements.txt /app
7 | RUN pip install -r requirements.txt
8 | COPY . /app
9 |
10 | ENTRYPOINT ["python"]
11 | CMD ["app.py"]
12 |
--------------------------------------------------------------------------------
/flask-build-cache/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 |
3 |
4 | app = Flask(__name__)
5 |
6 |
7 | @app.route('/')
8 | def hello_world():
9 | return 'Flask Dockerized'
10 |
11 |
12 | if __name__ == '__main__':
13 | app.run(debug=True,host='0.0.0.0')
14 |
--------------------------------------------------------------------------------
/flask-build-cache/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask==1.0
2 |
--------------------------------------------------------------------------------
/flask-ubuntu/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:18.04
2 |
3 | RUN apt-get update -y
4 | RUN apt-get install -y python-pip python-dev build-essential
5 |
6 | WORKDIR /app
7 | COPY . /app
8 | RUN pip install -r requirements.txt
9 | ENTRYPOINT ["python"]
10 | CMD ["app.py"]
11 |
--------------------------------------------------------------------------------
/flask-ubuntu/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 |
3 |
4 | app = Flask(__name__)
5 |
6 |
7 | @app.route('/')
8 | def hello_world():
9 | return 'Flask Dockerized'
10 |
11 |
12 | if __name__ == '__main__':
13 | app.run(debug=True,host='0.0.0.0')
14 |
--------------------------------------------------------------------------------
/flask-ubuntu/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask==1.0
2 |
--------------------------------------------------------------------------------
/go-multi-stage/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM golang:1.13 as builder
2 | WORKDIR /go/src/github.com/pchico/docker-for-devs/go-multi-stage
3 | RUN go get github.com/sirupsen/logrus
4 | COPY app.go .
5 | RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
6 |
7 | FROM alpine:latest
8 | WORKDIR /root/
9 | COPY --from=builder /go/src/github.com/pchico/docker-for-devs/go-multi-stage/app .
10 | CMD ["./app"]
11 |
--------------------------------------------------------------------------------
/go-multi-stage/app.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import log "github.com/sirupsen/logrus"
4 |
5 | func main() {
6 | var logger log.FieldLogger = log.StandardLogger()
7 | logger.Info("Hola Openwebinars!")
8 | }
--------------------------------------------------------------------------------
/go-tests/app.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | func getInteger() int {
4 | return 4
5 | }
6 |
--------------------------------------------------------------------------------
/go-tests/app_test.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "testing"
4 |
5 | func TestGestInteger(t *testing.T) {
6 | value := getInteger()
7 | if value != 4 {
8 | t.Fatalf("Wrong value: %d", value)
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/go-tests/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.2'
2 | services:
3 | test:
4 | image: golang:${GO_VERSION:-1.9}
5 | working_dir: /go/src/app
6 | volumes:
7 | - ${PWD}:/go/src/app
8 | command: go test ./...
9 |
--------------------------------------------------------------------------------
/import/docker-compose.17.07.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | docker:
4 | image: docker:17.07
5 |
--------------------------------------------------------------------------------
/import/docker-compose.override.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | docker:
4 | image: docker:17.09
5 |
--------------------------------------------------------------------------------
/import/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | docker:
4 | image: docker:17.10
5 | volumes:
6 | - /var/run/docker.sock:/var/run/docker.sock
7 | entrypoint: docker
8 | command: ps
9 |
--------------------------------------------------------------------------------
/local/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from redis import Redis, RedisError
3 | import socket
4 |
5 |
6 | app = Flask(__name__)
7 | redis = Redis(host="localhost")
8 |
9 |
10 | @app.route("/")
11 | def hello():
12 | try:
13 | visits = redis.incr('counter')
14 | except RedisError:
15 | visits = "counter disabled. Cannot connect to Redis."
16 |
17 | html = "Hello Code Europe!
" \
18 | "Hostname: {hostname}
" \
19 | "Visits: {visits}
" \
20 | "
"
21 |
22 | return html.format(hostname=socket.gethostname(), visits=visits)
23 |
24 | if __name__ == "__main__":
25 | app.run(host="0.0.0.0", port=5000)
26 |
--------------------------------------------------------------------------------
/local/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.2"
2 | services:
3 | cache:
4 | image: redis
5 | ports:
6 | - 6379:6379
7 |
--------------------------------------------------------------------------------