Skip to main content

Docker

currently with docker you are limited to only linux machines and apps. It is like installing various zip files on your os.
because of the use of base image we can save space.All the containers use the same base image. If you want 100 containers in traditional vm env you would have needed 100GB space considering 1gb per image but with docker you will need only 1gb of space. Suppose if you need emacs and apache then docker will add to separate images for it on top of each other and with the base image it will form a union image. this image is readonly so to write in it docker will place a writable container and the whole set container:image(apache)+image(emacs)+base image will make a whole container in the docker.  But the writable container is not persistent. Docker boots the image/ image layers on top f each other.
apt-cache search docker.io ---will display a list of packages containing docker
apt-chache show docker.io ---- will display all details of packaage
Check if it is latest version.
Docker guys have provided us with a script get.docker.com. it has the script for installation.
This is to be executed .
wget -qO- https://get.docker.com/ | sh to install docker latest.
If you want to add non root user in docker then execute the following command:
sudo usermod -aG docker your-user
check by id your-user to check in which group  user is present it should be present in docker group.
all images are present in registry. docker own registry at docker hub. first you will need to pull the docker images from the registry with docker pull command. After that you can use docker run. If you have specified which images to use then docker will automatically pull the images from registry while docker run is executed. the registry of docker is hub.docker.com
You can search using docker search mysql
to download use docker pull ubuntu
always pull the latest you can also use docker pull ubuntu:latest it is same. :latest is called image tag or the container tag. you can pull using version as well: docker pull ubuntu:14.04
To check what images you have you can issue the docker images command
To start a container use
docker run -ti ubuntu:14.04 /bin/bash -t for terminal i for interactive
to quit container without stopping it press CTRL+P+Q
to check which docker containers are running then command docker ps
to attach to running container use command docker attach <container id>/<container name>
To exit docker and stop the container as well press CTRL+D
To list all the containers even the which that are not running use command docker ps -a
If you exit with ctrl + d and want to start the container again then you can use the command docker start <container-name> 
This will start container in the background
To display docker processes use command docker top / docker top <container-name>
to stop use docker stop <container-name>
in /var/lib there is a folder docker. in that you will have folder container in that you can see folders of running containers with their long ids. In that folders you can see the following files:
<id>-json.log, hosts, config.json, resolv.json, hostconfig.json, resolv.conf.hash, hostname.
In hostname file you will have the short id of container which is shorter version of the long id.
you can also run docker run -ti ubuntu:12.04 /bin/bash it will download automatically.
If you dont want to immediately attach to the container then you can run docker in detached mode:
docker run -d -ti ubuntu:14.04 --name=duck /bin/bash
-d for detached
-ti also because if you dont give you wont be able to login into it.
But it is not persistant if you want the docker container to be persistent then you can use the command:
docker run -ti -v /data --name=duck2 ubuntu:14.04 /bin/bash
-v for volume you have to give it a mount point it will create this mount point inside the container folder.
name should not be same as previous
When in bash inside the container goto /dataand then start working and creat files.
then after quiting the container with ctrl+p+q then in your local machine goto /var/lib/volumes/<container-long-id>/_data you can find all your files here.
If you remove from inside container it will be removed from local machine as well
If you want to attach local directory to continer then
docker run -ti -v /srv/duck3:/data --name=duck3 ubuntu:14.04 /bin/bash
/srv/duck3 local dir
/data container dir
docker run -d -p 3306 -ti mysql /bin/bash
-p for port
this will open port 3306 and nat it to external port.
you check by this command locally iptables -L -t nat
-L list
-t for table nat
it will nat to random port if want to pen specific port
docker run -d -ti -p 3306:3306 mysql /bin/bash
you can also specify the specific ip address if you want with -p <ip>:3306:3306
if you and your friend have vm and want to sync up you may have to transfer 20gb of file. but with docker docker diff to check the difference then docker commit then docker push which will only be the change.
docker containers: are actual containers running the applications and includes os, user added files, and meta data
docker images: helps to launch docker containers
docker file: is a file containing instructions that help automate image creation
layer: each file system that is stacked when docker mounts rootfs.
Install docker using:
sudo rpm install docker
docker commands:
docker pull: pull a pre-built image from public repos
docker run: run in 3 modes background,foreground,interactive
docker logs: logs of running logs
docker commit: save container state
docker images: list of all images
docker diff: changes in files and directories
docker build: build docker images from
dockerfiles
docker inspect: low level info about containers
docker attach: interact with running container
docker kill: kill a container
it is beneficial to separate every server like in lamp have separate php, mysql,apache in diff containers
you can use a supervisor -n to it
docker file:
automates image creation process
set of instruction to create an image
syntax: instruction argument
how docker files different:
dockerfiles run in layers
after every command a new layer is created.
if there is a mistake in line 29 of 30 if you corect in docker then first 28 skip because already run and just resolving the issue.
Dockerfile commands:
MAINTAINER <author name> sets autho name
RUN <command> execute command
ADD <src><dest> copy files from one location to another
from local machine to inside docker
CMD["executable","param1","param2"] provides default for executing container
EXPOSE <port>port on which container might get deprecated
ENTRYPOINT ["executable","param1"...] configure container as exe from where you want to start execution
WORKDIR /path set working dir
ENV <key> <value> set env variables
USER <uid> set UID for use when running an image
VOLUME ["/data"] enable access to a directory from a working container mount from host to docker
docker create   -----using dockerfile
Layering issue with dockerfile is that docker is restarted after every command you will losse any environment variable
If you want to run a if then you will have to write it on a single line.
you can override this in command line
if container when you execute CMD  and command as main command and if that command quits or goes in background.
boot2docker to bootstrap instead of chef

Comments

Post a Comment

Popular posts from this blog

Terraform

Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. Terraform can manage existing and popular service providers as well as custom in-house solutions. Configuration files describe to Terraform the components needed to run a single application or your entire datacenter. Terraform generates an execution plan describing what it will do to reach the desired state, and then executes it to build the described infrastructure. As the configuration changes, Terraform is able to determine what changed and create incremental execution plans which can be applied. The infrastructure Terraform can manage includes low-level components such as compute instances, storage, and networking, as well as high-level components such as DNS entries, SaaS features, etc. The key features of Terraform are: Infrastructure as Code : Infrastructure is described using a high-level configuration syntax. This allows a blueprint of your datacenter to be versioned and

Java 8 coding challenge: Roy and Profile Picture

Problem:  Roy wants to change his profile picture on Facebook. Now Facebook has some restriction over the dimension of picture that we can upload. Minimum dimension of the picture can be  L x L , where  L  is the length of the side of square. Now Roy has  N  photos of various dimensions. Dimension of a photo is denoted as  W x H where  W  - width of the photo and  H  - Height of the photo When any photo is uploaded following events may occur: [1] If any of the width or height is less than L, user is prompted to upload another one. Print " UPLOAD ANOTHER " in this case. [2] If width and height, both are large enough and (a) if the photo is already square then it is accepted. Print " ACCEPTED " in this case. (b) else user is prompted to crop it. Print " CROP IT " in this case. (quotes are only for clarification) Given L, N, W and H as input, print appropriate text as output. Input: First line contains  L . Second line contains  N , number of

Salt stack issues

The function “state.apply” is running as PID Restart salt-minion with command:  service salt-minion restart No matching sls found for ‘init’ in env ‘base’ Add top.sls file in the directory where your main sls file is present. Create the file as follows: 1 2 3 base: 'web*' : - apache If the sls is present in a subdirectory elasticsearch/init.sls then write the top.sls as: 1 2 3 base: '*' : - elasticsearch.init How to execute saltstack-formulas create file  /srv/pillar/top.sls  with content: base : ' * ' : - salt create file  /srv/pillar/salt.sls  with content: salt : master : worker_threads : 2 fileserver_backend : - roots - git gitfs_remotes : - git://github.com/saltstack-formulas/epel-formula.git - git://github.com/saltstack-formulas/git-formula.git - git://github.com/saltstack-formulas/nano-formula.git - git://github.com/saltstack-f