├── .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 | --------------------------------------------------------------------------------