Docker Intermediate
Tags: devops, webdev, beginners, programming
Published: 2022-11-15 17:52:28

> Source from Zeal Vora,KPLABS Course(Premium Instructor at Udemy)
[Udemy](https://www.udemy.com/course/docker-certified-associate)

Zeal is one of my favorite author for docker. Please try to yourself 💖

**(Tip: HE is ready to give some discount for students 😜)**

Hi buddy, this is all are intermediate points. if you need to basic understanding please look at my previous docker beginner blog otherwise please ignore  
-----------------Table of content-----------------
------------------------------------------------------------------

1. Docker file

2. COPY VS ADD 

3. EXPOSE

4. HEALTH CHECK 

5. ENTRY POINT

6. WORKDIR

7. ENV

8. TAG

9. Docker commit

10. layer of docker images

11. Inspect 

12. Prune

13. Flattening image 

14. Docker registry

15. Apply the filters

16.Moving the image across the host

17.Build cache

------------------------------------------------------------------

**1.Docker file**

Every docker container based on images. Images based on docker files.

![docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vo4b78z6r4nibzjaf158.png)

Docker files contain the set of commands and microservice procedures. Docker file start FROM instructions its is a base image 

```
FROM busybox
ENV NGINX 1.2
RUN touch web-$NGINX.txt
CMD ["/bin/sh"]
```

** 2. COPY VS ADD **

Both command are copy the file from local to inside the container but depends on need it will change.

COPY = copy the files from local to inside the container
ADD = get the files from website like application zip files then 
      unzip the exact destination

```
COPY src dest
```
** 3. EXPOSE **

Expose command used for port documentation. Its helps to where we are going to run the port.so clear about the port mapping 

![docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e4cf8omx143anhvp63cx.JPG) 
 

```
EXPOSE port-no
```
**4. HEALTH CHECK** 

Health check is testing our application healthy or not. Its check some argument and true or false condition.
Condition is true application is healthy whether condition is false application is un-healthy

![docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lacgyvquw0r9615vz8cn.JPG)

```
HEALTHCHECK --interval=35s --timeout=4s CMD curl -f https://localhost/ || exit 1
```
**5. ENTRY POINT**

In Docker files, an ENTRYPOINT instruction is used to set executables that will always run when the container is initiated. Unlike CMD commands, ENTRYPOINT commands cannot be ignored or overridden—even when the container runs with command line arguments stated

Once container is start we will give the dynamic command options in entry point section

```
ENV name Darwin
ENTRYPOINT ["/bin/echo", "Welcome, $name"] 
```
**6. WORKDIR**

Containers default working directory is called WORKDIR. once execute the container we launch directly in which one we mention the WORKDIR argument. 

```
WORKDIR destination
``` 
**7. ENV**

ENV is a similar like system environment variable. Its works like key and value pair options inside of the container. We pass the dynamic value instead of ENV.

```
ENV command
```
**8. TAG**

Tag the image for reference. Help to improve the image information and maintenance

```
tag image-id tag-name
```
**9. Docker commit**

clone the running docker container for version maintenance and reusability.

```
docker commit container-id
```
**10. layer of docker images** 

Docker is the layer architecture so each docker file line represent the layer.Layer have a unique information 

![docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o66p12dxp336ju9wizu4.png)

**11. Inspect **

Docker image have a lot of information include date,command,size and os architect see the all info associate with the docker image.

```
docker inspect
```
 **12. Prune**

Clean-up the dangling and unused images with prune.It's helps to reduce the unused images and increase the system memory.

```
docker prune
```
**12. Flattening image** 

Use to create the single layer image.Its helps to manage the storage.single layer of image and fulfill the all requirement 

```
FROM debian:wheezy WORKDIR /tmp RUN wget -nv http://centurylinklabs.com/someutility-v1.0.0.tar.gz && \ tar -xvf someutility-v1.0.0.tar.gz && \ mv /tmp/someutility-v1.0.0/someutil /usr/bin/someutil && \ rm -rf /tmp/someutility-v1.0.0 && \ rm /tmp/someutility-v1.0.0.tar.gz

```
**13. Docker registry**

![docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7lqp0j9k3sltuvk8e34m.JPG)

Its help to maintain the image version in repository.similar to github method.we have two option private and public repository. push pull and tag in options are available with repository.

**15. Apply the filters** 

Public repository have a so many options in images.official and unofficial image options are available so filiter help to getting the exact image option.

```
docker search image name
```

```
--filter , -f		Filter output based on conditions provided
--format		Pretty-print search using a Go template
--limit	number	        Max number of search results
--no-trunc		Don't truncate output
```
**16.Moving the image across the host**

It helps to move the image one environment to another one.
first archive and load the file then move the tar file. 

```
docker save myapp > myapp.tar
docker load < myapp.tar
```

**17.Build cache**

Already we discuss docker is the layer architecture so each and every layer have a individual build structure .

Rebuild the same images multiple times that time docker refer to the cache. its save the build time.rather than we add the new step for same docker image that time only docker build again.

![docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2274h4a94ne78et8dzx.png)