Building our own images with a Dockerfile, I use Docker build command to build a new image from Dockerfile. How to Docker build image from Dockerfile. Let’s go!
The first Docker build images
To create a directory and a Dockerfile, the sample as below:
$ mkdir project $ cd project $ touch Dockerfile
The example Docker build the image from Dockerfile
$ vim Dockerfile
The content a Dockerfile as below:
# CentOS 7 Dockerfile # Docker build: # sudo docker build -t devopsroles/centos:latest . # Docker create: # sudo docker create -it --name centos -h centos devopsroles/centos # Docker start: # sudo docker start centos # Connect with bash # sudo docker exec -it centos bash FROM centos:latest MAINTAINER PHAN VAN HUU <pvhuu90@gmail.com> My blogs: devopsroles.com #Update centos RUN yum update -y && yum upgrade -y RUN yum -y install git curl net-tools wget vim # Install EPEL Repository RUN yum install -y epel-release # Clean CentOS 7 RUN yum clean all # Set the environment variables ENV HOME /root # Working directory WORKDIR /root # Default command CMD ["bash"]
Docker build the image from our Dockerfile
Running the Dockerfile use Docker build commands
$ cd project $ sudo docker build -t . $ sudo docker build -t devopsroles/centos:latest . $ sudo docker create -it --name centos -h centos devopsroles/centos
The result, Docker images devopsroles/centos as below:
$ sudo docker images
The output, docker images as below:
REPOSITORY TAG IMAGE ID CREATED SIZE devopsroles/centos latest c9ef43af9836 2 minutes ago 428.7 MB
The docker start container centos
$ sudo docker start centos $ sudo docker ps
The output below:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d1a8e53668f devopsroles/centos "bash" 43 seconds ago Up 4 seconds centos
The connect container bash
$ sudo docker exec -it centos bash
The output below:
[root@centos ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link> ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 8 bytes 648 (648.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@centos ~]# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=127 time=68.7 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=127 time=69.1 ms ^C --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 68.720/68.945/69.170/0.225 ms
Or test ping 8.8.8.8 from docker run command as below
$ sudo docker run centos ping 8.8.8.8 -c4
The output below:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=127 time=40.6 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=127 time=41.7 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=127 time=42.1 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=127 time=40.1 ms --- 8.8.8.8 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 40.124/41.184/42.196/0.832 ms
Conclusion
Docker build image from Dockerfile. You can update and edit package from Dockerfile file. For example to install Nginx, PHP, MySQL package in Dockerfile file.