Creating and Using Docker Containers

In this post i will give you the basic commands to run and troubleshoot basic docker containers


Install Docker First

This is a simple command to run a Nginx docker container:

																
docker container run --publish 844:80 --detach --name Mynginx nginx

 
  1. — Detach = Run container in the background

  2. — name = name of the container

  3. nginx = image to run

What happens in ‘Docker container run’?

  1. Looks for that image locally in the image cache,If it does not exist in the image cache he fetches it from Docker Hub Repo.

  2. Creates new container based on the image (nginx: latest by default)

  3. Gives it a virtual IP on a private network

  4. opens up port 8080 on the host and forwards to port 80 in the container

  5. Start container by using the CMD in the image Dockerfile

docker container ls
docker container ls -a
 
  1. ls = show running containers

  2. ls -a = show all containers in all status

docker container logs Mynginx
 
  1. logs = show logs for the specific container (Mynginx)

[root@fedora ~]# docker container ls -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                 NAMES
b1311034dc4c   nginx     "/docker-entrypoint.…"   4 minutes ago    Created                                               Webhost2
6a936dd1a1ed   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   0.0.0.0:844->80/tcp, :::844->80/tcp   Webhost
[root@fedora ~]# docker container rm -f b13 6a9
b13
6a9
 
  1. rm = Delete container

  2. -f = force deletion of running container

  3. b13,6a9 = containers ID’s

Whats going on inside a container

  1. docker container top – show the process list in one container

root@fedora ~]# docker container top mysql
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
systemd+            56977               56956               0                   10:29               ?                   00:00:01            mysqld
 
  1. docker container inspect – show details of one container configuration (Networking, mounts and more)

[root@fedora ~]# docker container inspect mysql 
[
    {
        "Id": "5a1896ceb2cf076c64066183125e6b3814fb5e7109e392fde842230802837e31",
        "Created": "2021-08-18T07:29:01.167554924Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "mysqld"485003676Z",

 
  1. Docker container stats = show performance stats for all containers

CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O         PIDS
f793d1abdadc   nginx     0.00%     9.875MiB / 31.03GiB   0.03%     16.9kB / 0B   7.04MB / 0B       9
5a1896ceb2cf   mysql     0.18%     443.1MiB / 31.03GiB   1.39%     27.9kB / 0B   38.5MB / 2.03GB   3
 

Getting a shell inside containers

  1. docker container run -it = start new container interactively (if you exit the shell the container stopped)

[root@fedora ~]# docker container run --name meninginx -it nginx bash
root@64aa3ad9a53c:/# ls
bin		      etc    mnt   sbin  var
boot		      home   opt   srv
dev		      lib    proc  sys
docker-entrypoint.d   lib64  root  tmp
docker-entrypoint.sh  media  run   usr
root@64aa3ad9a53c:/# hostname
64aa3ad9a53c
 

To re-run a stopped container and enter to his shell

root@fedora ~]# docker container ls -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                       PORTS                                                  NAMES
64aa3ad9a53c   nginx     "/docker-entrypoint.…"   4 minutes ago    Exited (130) 7 seconds ago                                                          meninginx
f793d1abdadc   nginx     "/docker-entrypoint.…"   40 minutes ago   Up 40 minutes                80/tcp                                                 nginx
5a1896ceb2cf   mysql     "docker-entrypoint.s…"   44 minutes ago   Up 44 minutes                0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
[root@fedora ~]# docker container start -ai meninginx 
root@64aa3ad9a53c:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@64aa3ad9a53c:/# ^C
 
  1. docker container exec -it = open interactive shell to inside of the container

[root@fedora ~]# docker container exec -it mysql bash
root@5a1896ceb2cf:/#
 

Containers Resources

Check how much Resources container is using

root@master:~# docker stats nginx
 

To Limit container Memory

root@master:~# docker run -d --name nginx1 --memory "200mb"  nginx:alpine

root@master:~# docker stats nginx nginx1

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
8271c48d56c7        nginx               0.00%               4.055MiB / 3.817GiB   0.10%               1.01kB / 0B         12.2MB / 16.4kB     3
08fa208e8474        nginx1              0.00%               3.77MiB / 200MiB      1.88%               726B / 0B           0B / 16.4kB         3

 

To Limit container CPU

  1. –cpuset-cpus 0,1 = You assign cpu 0 and cpu 1 (total 2 cpu)

  2. –cpuset-cpus 0-2 = You assgin cpu from 0 to 2 (total of 3 cpu)

root@master:~# grep "model name" /proc/cpuinfo
model name      : Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz
model name      : Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz
root@master:~# grep "model name" /proc/cpuinfo | wc -l
2

root@master:~# docker run -d --name nginx2 --memory "300mb" --cpuset-cpus 0,1 nginx:alpine

 

Copy files from&to your container – docker cp

Copy Files from docker host to container

root@master:~# docker cp index.html nginx1:/usr/share/nginx/html/index.html

 

Copy Files from container to docker host

root@master:~# docker cp nginx1:/opt/test.txt .


#docker

0 views0 comments