2. • Open Source
• Container Technology
• Portable standard
• Runs on Linux (Microsoft,
MacOS, Solaris)
• Quickly scale
• Improve it efficiency
• SIMPLY SHARE APPLICATIONS
3. Containers are an app
level construct
VMs are an infrastructure level
construct to turn one machine
into many servers
4. Docker is not a lightweight VirtualBox
- it's about isolation.
- Containers run on Linux kernel of
host. Use de same kernel
- Containers are visible on host.
- Containers can’t access to host.
5. Speed
• No OS to boot =
applications online
in seconds
Portability
• Less dependencies
between process
layers = ability to
move between
infrastructure
Efficiency
• Less OS overhead
• Improved VM
density
7. Dockerfile
File like a script for build Docker images.
Image
The basis of a Docker container. The
content at rest.
Container
The image when it is ‘running.’ The
standard unit for app service.
Docker Engine
The software that executes commands for
containers. Networking and volumes are
part of Engine. Can be clustered together.
Registry
Stores, distributes and manages Docker
images.
Control Plane
Management plane for container and
cluster orchestration.
8. • Like a script for build Docker images
• Lightweight, stand-alone, executable
package
• Includes everything needed to run a
piece of software
• Including the code, a runtime,
libraries, environment variables, and
config files
Dockerfile
Docker Image
Script to build a image
Includes everything needed to
run an app
$ docker build –t name .
9. • Package format
• Layer incremental, copy on write
file system.
• “Application with all dependencies”
• How to get Docker Images?
Create image yourself
Get Prebuilt Image from Repository
(Docker Store)
$ docker images -ls
10. • Isolated runtime of Docker image
(Instance)
• Starts up in milliseconds
• Sandboxing uses Linux namespaces
and cgroups (RAM, CPU, filesystem)
isolated part of your Linux
• Open Container Standard / Linux
Foundation $ docker run -d –p 8080:9999 oracledatabase
11. • Docker image is not found?
-> pulled from registry
• Push your image to registry
docker push yourname/newimage
• Free account includes 1 private registry
• Also private, S3, Azure data store, Oracle
• Or use Github to export your images
15. 2004
Solaris Containers /
Zones technology
introduced
2008
Linux containers
(LXC 1.0)
introduced
2013
Solomon Hykes
starts Docker as an
internal project
within dotCloud
Mar 2013
Docker released
to open source
Feb 2016
Docker introduces first
commercial product – now
called Docker Enterprise
Edition
Today
Open source community includes:
- 3,300+ contributors
- 43,000+ stars
- 12,000+ forks
19. • It is possible
• Completely automated
• Support 11g and 12c
• Database is persistent (Share a host filesystem)
• Works like a normal database
• Customizable
• No OS Depended
• Supported by Oracle
• Prerequisite: Docker installed
20. Some Oracle database features are not supported in this Docker image
release:
• Automatic Memory Management (AMM)
• Multiples Oracle Homes
• Oracle Data Guard
• Multiples instances on the container
• Oracle Grid Infrastructure
21. Official Image from Docker Store:
https://store.docker.com/images/oracle-database-enterprise-edition
Official Image from Oracle Store:
https://container-registry.oracle.com/
Built your own Image from Official source for Docker configurations by
Oracle:
https://github.com/oracle/docker-images
22. 1. Login in Docker Store (create Docker account before)
$ docker run -d -it --name <Oracle-DB> store/oracle/database-
enterprise:12.2.0.1
2. Run Oracle Database Container. Where Oracle-DB is the container name
$ docker login
3. Connecting to the Database Container. The default password to connect to the database with sys
user is Oradoc_db1
$ docker exec -it <Oracle-DB> bash -c "source
/home/oracle/.bashrc; sqlplus /nolog"
See details:
https://store.docker.com/images/oracle-database-enterprise-edition/plans/08cf8677-bb8f-453c-b667-
6b0c24a388d4?tab=instructions
23. $ docker build --force-rm=true --no-cache=true -t
oracle/database:12.2.0.1-ee -f Dockerfile.ee .
1. Download the Github repository.
https://github.com/oracle/docker-images
2. On your PC Extract Repository
3. Copy Oracle Software for Linux x64 in the folder appropriate to version.
e.g. For Oracle Database 12.2 copy to folder ./docker-images/OracleDatabase/dockerfiles/12.2.0.1/
4. Build Image
e.g. Build Image for Oracle Database 12.2 Enterprise Edition
24. $ docker run --name testdb1
-p 1521:1521 -p 5500:5500
-e ORACLE_SID=dcdb
-e ORACLE_PWD=manager1
-e ORACLE_CHARACTERSET=WE8MSWIN1252
-e ORACLE_CONTAINERDB=false
oracle/database:12.2.0.1-ee
Container Name
Map Ports
Database name,
password and some
parameters
Image Name
See details:
https://github.com/oracle/docker-images/tree/master/OracleDatabase
Hypervisor based VM’s were a massive improvement over the one application on one server approach. But they were not without limitations.
First, each VM still required its own CPU, RAM, storage etc… and each VM needs to have an operating system installed. An entire operating system, which consumes a lot of resources but doesn’t provide us with much in return. We just have it there so we can run our application. And so the more VM’s you run, the more resources you need
Let’s start with an image. The image is the basis of a Docker container - it is the content library from which you build a container. So when you execute the command “docker run”, you use the image to create a container.
The container, itself, is a standard unit for each application service. The application service can be any size and each container is isolated from other containers.
Where the containers run is the Docker engine. The Engine is the software that installed in the host operating system which can be on-prem, on bare metal, in a virtual machine, in the cloud - wherever. The customer can interact with Engine in order to pull an image, build an image, run or stop a container, manage the resources. This is also where you can also define networks and volumes and how the container interacts with other containers. So the Engine can be standalone on a single host, or multiple engines can be clustered together.
Now we mentioned pulling an image to create a container. That is because all images are stored in what we call a registry. This is a library that stores and manages all of the images. So essentially a central repository. Admins can manage access permissions and what images can be shared within a team. From here, users can push or pull images to create content and check it in, share with team members, and deploy it into a container running on an Engine.
The Control Plane is a management tool that lets users look across their deployment of applications, containers, and clusters and orchestrate them.
Docker Limitations
• Cannot load kernel modules• Applications that manipulate namespaces• Kernel config per container• Some SW not (yet) supported when running in Docker container:
The Registry is a stateless, highly scalable server side application that stores and lets you distribute Docker images. The Registry is open-source, under the permissive Apache license.
Why use it
You should use the Registry if you want to:
tightly control where your images are being stored
fully own your images distribution pipeline
integrate image storage and distribution tightly into your in-house development workflow
https://docs.docker.com/registry/
https://container-registry.oracle.com/pls/apex/f?p=113:56:32560404372668::NO:::
https://www.datadoghq.com/docker-adoption/
And it is not just tech startups or small companies. Large organizations are adopting Docker Enterprise Edition at scale.