1. Use case
1.1. Developers
1.1.1. wrap test and build actions in docker
1.1.2. your applications work on any machine
1.1.3. run production-like environment locally
1.1.4. fast track your changes to production
1.2. Operations
1.2.1. build continuous delivery pipelines
1.2.2. automate test, build, release and deploy
1.2.3. set continuous delivery systems
1.2.4. infrastructure as code
1.3. architects
1.3.1. application agnostic methodology
1.3.2. run on any continuous delivery system
1.3.3. immutable infrastructure
1.3.4. infrastructure as code
2. prerequisites
2.1. Docker
2.1.1. Docker Engine
2.1.2. Docker Compose
2.2. Ansible
2.2.1. Configuration management
2.3. Application delivery
2.3.1. continuous integration
2.3.2. application testing
3. create the sample application
3.1. Sample application
3.1.1. Why a python sample application
3.1.1.1. easy to develop
3.1.1.1.1. develop from text editor functionality within minutes test driven
3.1.1.2. Django REST
3.1.1.2.1. RESTful services model driven web interface
3.1.1.3. difficult to deploy
3.1.1.3.1. dependency management
3.1.1.3.2. packaging
3.1.1.3.3. virtual environments
3.1.2. Django REST Framework web service
3.1.2.1. Based up http://todobackend.com
3.1.2.2. architecture
3.1.2.2.1. Untitled
3.1.2.3. front end interface
3.1.2.4. back end interface
3.1.2.5. differences
3.1.3. create the todobackend web service
3.1.3.1. initial setup
3.1.3.1.1. virtual environments
3.1.3.2. creating models
3.1.3.3. creating serializers
3.1.3.3.1. serialization
3.1.3.4. creating views
3.1.3.4.1. views
3.1.3.5. configuring routing
3.1.3.5.1. routing
3.1.3.6. test driving the application
3.2. unit tests
3.3. Integration tests
3.3.1. Unit tests vs Integration tests
3.3.1.1. Untitled
3.3.2. configure integration tests settings
3.3.2.1. configuration settings
3.3.2.1.1. settings for different env
3.3.2.2. change default settings layout
3.3.2.2.1. Untitled
3.4. Acceptance tests
3.4.1. initial setup
3.4.2. writing acceptance tests
3.4.3. running acceptance tests
3.5. test the user interface
3.5.1. install the todobackend client
3.5.2. verify the user interface
3.6. summary
3.6.1. sample application
3.6.1.1. how to configure
3.6.1.2. how to run
3.6.1.3. how to test
3.6.2. testing
3.6.2.1. unit and integration tests
3.6.2.2. acceptance tests using node.js
3.6.2.3. manual testing
4. Unit/Integration testing using Docker
4.1. test stage
4.1.1. Unit and integration testing
4.1.2. use docker to wrap test runners
4.1.2.1. e.g. maven, gradle (Java)
4.1.2.2. e.g. manage.py ( python Django )
4.2. docker images
4.3. docker and docker compose building blocks
4.4. test workflow using Docker
4.4.1. Untitled
4.5. docker image hierarchy
4.5.1. base, release image
4.5.1.1. Untitled
4.5.2. base, development, release image
4.5.2.1. Untitled
4.5.3. organizational image
4.5.3.1. Untitled
4.6. create a base image
4.6.1. establish application runtime environment
4.6.2. demo
4.6.2.1. initial setup
4.6.2.1.1. folder structure
4.6.2.1.2. separate the base image
4.6.2.2. choose parent image
4.6.2.3. describe operating system packages
4.6.2.4. establish/activate the virtual environment
4.6.2.4.1. Untitled
4.6.2.4.2. docker and the parent process (PID 1)
4.6.2.5. build the base image
4.7. create a development image
4.7.1. add test and build dependencies
4.7.2. run tests
4.7.3. demo: create the development image
4.7.3.1. build the development image
4.7.3.1.1. folder structure
4.7.3.1.2. rebuild the development image
4.7.3.2. create application requirements files
4.7.3.2.1. Untitled
4.7.3.3. develop image review
4.7.3.3.1. Untitled
4.7.3.3.2. Untitled
4.7.3.3.3. Untitled
4.7.3.4. test the development image
4.7.3.4.1. docker build context
4.7.3.5. reduce testing time
4.7.3.5.1. volume containers
4.7.3.6. use different test settings
4.7.3.6.1. connect to MySQL - Single Container
4.7.3.6.2. connect to MySQL - Docker Host
4.7.3.6.3. connect to MySQL - Multi Container
4.7.4. demo: create a multi-container env using docker compose
4.7.4.1. docker compose file
4.7.4.1.1. Untitled
4.7.4.1.2. Untitled
4.7.4.1.3. Untitled
4.7.4.1.4. Untitled
4.7.4.2. create a docker compose file
4.7.4.3. running tests using docker compose
4.7.4.3.1. Untitled
4.7.4.4. solving how to wait for a dependent service to initialize
4.7.4.4.1. Untitled
4.7.4.4.2. Untitled
4.8. docker compose
4.8.1. create a complex test environment
4.8.2. orchestrate unit and integration tests
4.9. others
4.9.1. course folder structure
4.9.1.1. Untitled
4.9.2. ansible playbook
4.9.2.1. Untitled
4.9.3. test environment
4.9.3.1. Untitled
4.10. summary
4.10.1. unit and integration test infrastructure
4.10.1.1. base image
4.10.1.2. development image
4.10.1.3. running tests using docker
4.10.2. docker compose
4.10.2.1. multi-container environment
4.10.2.2. integration testing between multiple containers
4.10.2.3. agent services to help orchestrate testing
5. Build artifacts using docker
5.1. build stage
5.1.1. application artifacts
5.1.1.1. Python Wheels
5.1.1.2. Java JAR files
5.1.2. must represent as tested application state
5.1.3. creates a deployable artifact
5.2. build workflow
5.2.1. Untitled
5.3. build stage
5.3.1. application artifact types
5.3.1.1. source distribution vs built distribution
5.3.1.1.1. Untitled
5.3.2. add package metadata to application
5.3.2.1. package metadata
5.3.2.1.1. Untitled
5.3.2.2. Untitled
5.3.2.3. Untitled
5.3.3. test and build consistency
5.3.3.1. Untitled
5.3.3.2. Untitled
5.3.4. build cache
5.3.4.1. Untitled
5.3.5. create a builder service
5.3.6. build and publish python wheels
5.3.6.1. build process
5.3.6.1.1. Untitled
5.3.6.2. publish application artifacts
5.3.6.2.1. Untitled
5.4. summary
5.4.1. builds application artifacts
5.4.2. source vs built distributions
5.4.3. python wheels
5.4.4. builds using test environment
5.4.5. test and build consistency
5.4.6. publishes locally for later stages
6. create releases using Docker
6.1. release workflow
6.1.1. Untitled
6.2. serve the application
6.2.1. Untitled
6.2.2. Untitled
6.3. release stage
6.3.1. create application release settings
6.3.1.1. Untitled
6.3.2. create a release image
6.3.2.1. Untitled
6.3.3. describe the release environment
6.3.3.1. release env design
6.3.3.1.1. Untitled
6.3.3.2. release env folder structure
6.3.3.2.1. Untitled
6.3.3.2.2. Untitled
6.3.4. test the release image
6.3.4.1. release env issues
6.3.4.1.1. Untitled
6.3.4.2. bootstrap the application
6.3.4.2.1. initialization tasks
6.3.4.2.2. start the application
6.3.4.2.3. review
6.3.5. demo: acceptance testing
6.3.5.1. create the test service
6.3.5.1.1. release environment design
6.3.5.1.2. acceptance tests folder structure
6.3.5.2. run acceptance tests
6.3.5.3. publish the release image
6.4. workflow review
6.4.1. test environment
6.4.1.1. Untitled
6.4.2. release environment
6.4.2.1. Untitled
6.5. summary
6.5.1. create release image from application build artifacts
6.5.2. verifies application passes acceptance tests in a release environment
6.5.3. runs from a release environment
6.5.4. requires initialization tasks
6.5.5. release image ready to be published and deployed if all tests pass
7. Continuous delivery automation
7.1. test, build and release automation
7.1.1. GUN make build system
7.1.2. automate the workflow
7.2. demo
7.2.1. workflow automation strategy
7.2.1.1. Untitled
7.2.2. why make?
7.2.2.1. designed for the shell
7.2.2.2. simple, imperative format
7.2.2.3. popular
7.2.2.3.1. installed by default on OS X
7.2.2.3.2. packaged for all major Linux distributions
7.2.3. create a makefile
7.2.3.1. makefile location
7.2.3.1.1. Untitled
7.2.4. describe the workflow
7.2.4.1. run docker compose
7.2.4.1.1. Untitled
7.2.5. test the workflow
7.2.6. parameterizing the workflow
7.2.6.1. docker compose default project naming
7.2.6.1.1. Untitled
7.3. demo
7.3.1. create github repositories
7.3.1.1. Untitled
7.3.2. create docker hub repositories
7.3.2.1. Untitled
7.3.3. create automated builds
7.4. summary
7.4.1. continuous delivery automation
7.4.1.1. make build system
7.4.1.2. make test, make build, make release
7.4.1.3. makefile variables
7.4.2. workflow infrastructure
7.4.2.1. github
7.4.2.2. docker hub
7.4.2.3. automated image builds
8. Enhance the workflow
8.1. production ready
8.2. error / failure handling
8.3. tag publish
8.4. dangling images and volumes
8.4.1. Untitled
8.4.2. Untitled
8.5. improving user feedback
8.6. making the workflow self-contained
8.6.1. workflow system architecture
8.6.1.1. Untitled
8.6.2. docker machine local environment
8.6.2.1. Untitled
8.6.3. sharing files
8.6.3.1. the problem of volume mapping
8.6.3.1.1. Untitled
8.6.3.2. sharing files from the docker client
8.6.3.2.1. Untitled
8.6.3.3. sharing files from the docker host
8.6.3.3.1. Untitled
8.6.3.4. sharing files using the docker remote API
8.6.3.4.1. Untitled
8.7. ensure self containment
8.8. producing test reports
8.8.1. accessing test reports
8.8.1.1. Untitled
8.9. handling errors
8.9.1. make error handling
8.9.1.1. Untitled
8.9.2. docker compose error handling
8.9.2.1. Untitled
8.9.3. docker compose strategy for short lived tasks
8.9.3.1. Untitled
8.9.4. docker compose strategy if files are needed
8.9.4.1. Untitled
8.10. ensuring consistency
8.10.1. Untitled
8.10.2. docker image caching
8.10.2.1. Untitled
8.10.3. ensure docker images are up to date
8.10.3.1. Untitled
8.10.3.2. Untitled
8.10.4. build up to date docker images
8.10.4.1. Untitled
8.10.4.2. Untitled
8.10.4.3. Untitled
8.10.4.4. Untitled
8.10.4.5. Untitled
8.10.4.6. Untitled
8.10.4.7. Untitled
8.10.4.8. Untitled
8.10.4.9. Untitled
8.10.4.10. Untitled
8.10.5. docker image consistency
8.10.5.1. Untitled
8.11. tagging the release image
8.11.1. logical tags
8.11.1.1. Untitled
8.11.1.2. Untitled
8.11.2. build tags
8.11.2.1. Untitled
8.11.3. tagging strategy
8.11.3.1. Untitled
8.11.3.2. Untitled
8.11.3.3. Untitled
8.12. publishing the release image
9. Continuous integration using Jenkins
9.1. Untitled
9.2. test, build and release using the pipeline plugin
9.3. jenkins in a container
9.4. configure and test our workflow
9.5. demo: setting up jenkins locally
9.5.1. create a jenkins image
9.5.1.1. docker socket file on docker machine
9.5.1.1.1. Untitled
9.5.1.2. share the docker socket file
9.5.1.2.1. Untitled
9.5.1.3. persist jenkins data
9.5.1.3.1. Untitled
9.5.1.3.2. Untitled
9.5.2. configure the workflow
9.5.3. test the workflow
9.5.4. create a self-defined workflow
9.5.4.1. Untitled
9.5.5. test failures