docker images -tree - Blog

advertisement
Johan Janssen, Info Support
Continuous delivery
Docker
Jenkins
Questions
Automate everything
Software quality
Continuous improvement
Regular deployments
Anyone can deploy
DevOps
End users
Automate environment provisioning
Automate application deployment
To enable continuous delivery
Quickly provision environments
Run the same software local and in the cloud
Easy to move software
Better performance
Higher availability
Cheaper
Disk space efficiency
Memory efficiency
Speed
Compatibility (run anywhere)
Isolation
Versioning
Internet of Things (Raspberry Pi etc.)
Simple general commands
No Domain Specific Language (DSL)
Configuration with operating system
commands
Since March 2013
8741 commits in 15 months
More than 460 570 contributors
Downloaded 2.75 13 million times
More than 14000 30000 Dockerized apps
>6500 Docker related projects on GitHub
More than 90 user groups
DockerCon (Europe)
Support from Google, VMWare, RackSpace, Red
Hat, IBM, Microsoft etcetera
Docker on Ubuntu 14.04
apt-get install docker.io
docker.io run -i -t ubuntu:saucy
/bin/bash
Main directory
BuildAndRunScript.sh
GeneralBase
Dockerfile
Sonar
Dockerfile
FROM ubuntu:saucy
RUN apt-get -y install software-propertiescommon
RUN add-apt-repository ppa:webupd8team/java
RUN apt-get update && apt-get -y upgrade
RUN echo "oracle-java7-installer
shared/accepted-oracle-license-v1-1
boolean true" | debconf-set-selections
RUN apt-get -y install oracle-java7-installer
ENV JAVA_HOME /usr/lib/jvm/java-7-oracle
FROM GeneralBase
RUN apt-get install -y wget unzip
RUN wget http://dist.sonar.codehaus.org/sonarqube4.2.zip
RUN unzip sonarqube-4.2.zip -d /opt
RUN rm sonarqube-4.2.zip
EXPOSE 9000
EXPOSE 9092
CMD ["/opt/sonarqube-4.2/bin/linux-x86-64/sonar.sh",
"console", "/bin/bash"]
Create the Dockerfiles
Build the containers:
<optional>cd GeneralBase
docker.io build -t GeneralBase .
cd .. </optional>
cd Sonar
docker.io build -t Sonar .
Start the container
docker.io run -p 9000:9000
–p 9092:9092 -d Sonar
# docker.io ps –a
CONTAINER ID: ecbecf77461b
CREATED: 32 minutes ago
STATUS: Up 32 minutes
PORTS: 0.0.0.0:9000->9000/tcp,
0.0.0.0:9092->9092/tcp
Start / stop / restart
docker [start/stop/restart]
containerid
Follow SystemOut and SystemErr
docker logs -f containerid
Show (running) containers
docker ps –a
Show processes running in container
docker top containerid
Show changes in the container
docker diff containerid
Stop all containers
docker.io stop $(docker.io ps -a -q)
Remove all containers
docker.io rm $(docker.io ps -a -q)
Remove all images
docker.io rmi $(docker.io images -q)
GeneralBase
AppServerBase
Environment D
Environment T
Environment A
Environment P
Jenkins
Sonar
JenkinsDataContainer
Gitblit
Nexus
Dockerfile
ENV JENKINS_HOME /var/JenkinsData
Docker commands
docker.io run -v /var/JenkinsData –name
JenkinsDataContainer ubuntu:saucy true
docker.io run -p 8080:8080 --volumes-from
JenkinsDataContainer -d Jenkins
# docker.io images --tree
└─ 179.9 MB Tags: ubuntu:saucy
└─253.6 MB
└─741.8 MB Tags: GeneralBase:latest
└─763.6 MB Tags: AppServerBase:latest
…
├─763.6 MB Tags: EnvironmentP:latest
└─865.6 MB Tags: Nexus:latest
└─808.3 MB Tags: Gitblit:latest
└─901.5 MB Tags: Sonar:latest
└─805.4 MB Tags: Jenkins:latest
real 4m11.729s
user 0m3.329s
sys 0m10.054s
Creating the Docker registry
docker run -p 5000:5000 registry
Modify container
Commit
docker.io commit 064f
192.168.56.31:5000/test-version-0.2
New containerid -> ff7e
Push
docker.io push
192.168.56.31:5000/test-version-0.2
Pull
docker.io pull 192.168.56.31:5000/
test-version-0.2
Run
docker.io run -i -t ff7e /bin/bash
View the changed container
docker images -tree
└─153b 194.2 MB test-version-0.1:latest
docker pull 192.168.56.31:5000/testversion-0.2
ff7e: Download complete
153b: Download complete
docker images -tree
└─153b 194.2 MB test-version-0.1:latest
└─ff7e 194.2 MB test-version-0.2:latest
Simple to use
Really popular
Used in many organizations
Regular updates
Big community creating plugins etc.
Most developers already use it
1
2
5
6
7
3
4
8
9
Continuous deployment
Continuous delivery
“Life is really simple, but we insist on making it
complicated.”
- Confucius
Use a (private) Docker registry
Use images from the registry instead of
export
Keep environmental settings separate
Use Jenkins to manage everything
Do not add extra functionality like OpenSSH
Think about topics such as security,
monitoring and logging
Separate concerns in separate containers
Inherit containers
johan.janssen@infosupport.com
http://blogs.infosupport.com/author/johanj/
Download