DevOps - The Must Know Checklist : 1 - Docker 2 වන කොටස

ja2k17ja

Member
May 10, 2017
185
166
0
තිස්සමහාරාම
DevOps - The Must Know Checklist : 1 - Docker 2 වන කොටස

DevOps - The Must Know Checklist : 1 - Docker 2 වන කොටස

අපි කලින් පාඩමෙන් ඉගෙන ගත්තෙ Docker හා සම්බන්ද මේ කමාන්ඩ්ස් ටික docker search
docker pull
docker images
docker images --no-trunc
docker rmi
docker run
docker run -it
docker run -it --name
docker run -it -p
docker ps
docker ps -a
docker start 
docker stop
docker rm 
docker pause 
docker unpause 
docker exec -it
docker ps -a --filter
docker kill 
අපි අද ඉගෙන ගනිමු අපි දැන ගත යුතු තවත් Docker කමන්ඩ්ස් ටිකක් ප්‍රයෝගිකව.
අද පාඩමෙන් මම මේ කමන්ඩ්ස් ගැන විස්තර කරනව 
docker top
docker commit
docker inspect
docker export
docker cp
 

මේ කමන්ඩ්ස් ටික ඉගෙන ගන්න කලින් අපි අලුතෙන් Docker container එකක් හදාගෙන ඉදිමු.

ට්‍රයි docker run -it --name ja2k17ja_ubuntu ubuntu bash
nix@ja2k17ja-docker:~$ docker run -it --name ja2k17ja_ubuntu ubuntu bash
root@613d5ff78051:/#
දැන් එකට මෙන්න මේ විදියට අපිට ඕන කරන දේවල් ටිකකුත් install කරගනිමු.

ට්‍රයි apt-get update -y && apt-get upgrade -y && apt-get install nginx htop net-tools -y
root@613d5ff78051:/# apt-get update -y && apt-get upgrade -y && apt-get install nginx htop net-tools -y
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [39.9 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
----
----
----
Processing triggers for libc-bin (2.23-0ubuntu9) ...
Processing triggers for sgml-base (1.26+nmu4ubuntu1) ...
Processing triggers for systemd (229-4ubuntu17) ...
root@613d5ff78051:/#
ට්‍රයි exit
root@613d5ff78051:/# exit
exit
nix@ja2k17ja-docker:~$
ට්‍රයි docker ps -a
nix@ja2k17ja-docker:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
613d5ff78051        ubuntu              "bash"              About a minute ago   Exited (0) 8 seconds ago                       ja2k17ja_ubuntu
nix@ja2k17ja-docker:~$
දැන් අපිට ja2k17ja_ubuntu කියල Docker container එකක් තියෙනව.


1) docker top
Docker container එකක් තුල මේ මොහොතේ රන් වෙන කමාන්ඩ්ස් මොනවද කියල අපිට් docker top කමාන්ඩ් එකෙන් දැනගන්න පුළුවන්.
තවද කොපමණ වෙලාවක සිට එම කමාන්ඩ්ස් රන් වෙනවද කියලත් අපිට බලාගන්න පුළුවන්.

ට්‍රයි docker start ja2k17ja_ubuntu
nix@ja2k17ja-docker:~$ docker start ja2k17ja_ubuntu
ja2k17ja_ubuntu
nix@ja2k17ja-docker:~$
ට්‍රයි docker top ja2k17ja_ubuntu
nix@ja2k17ja-docker:~$ docker top ja2k17ja_ubuntu
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                13170               13154               0                   01:33               pts/0               00:00:00            bash
nix@ja2k17ja-docker:~$
අපි දැන් Docker container එක ඇතුලෙ තියෙන nginx service එක start කරලා ආපසු docker top ja2k17ja_ubuntu දීල බලමු.

ට්‍රයි docker exec ja2k17ja_ubuntu service nginx start
nix@ja2k17ja-docker:~$ docker exec ja2k17ja_ubuntu service nginx start
 * Starting nginx nginx
   ...done.
nix@ja2k17ja-docker:~$
ට්‍රයි docker top ja2k17ja_ubuntu
nix@ja2k17ja-docker:~$ docker top ja2k17ja_ubuntu
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                13170               13154               0                   01:33               pts/0               00:00:00            bash
root                13289               1                   0                   01:37               ?                   00:00:00            nginx: master process /usr/sbin/nginx
www-data            13290               13289               0                   01:37               ?                   00:00:00            nginx: worker process
www-data            13291               13289               0                   01:37               ?                   00:00:00            nginx: worker process
nix@ja2k17ja-docker:~$
දැන් ඔයාලට පැහැදිළියි කමාන්ඩ් එකෙන් වෙනදේ.


2) docker commit
අපිට මෙම කමාන්ඩ් එක බාවිතා කරල අපේ ලග දැනට තියෙන Docker container එකකින් Docker image එකක්  ඉතා පහසුවෙන් සාදාගන්න පුළුවන්. දැන් බලමු අයි අපිට current Docker container එකකින් image එකක් සාදාගන්න අවශ්‍ය ඇයි කියල.

ඔයාල දැක්ක මම ja2k17ja_ubuntu කියන container එක හදා ගත්තෙ Docker Hub එකෙන් download කරගතිපු ubuntu කියන image එකෙන්. ඊට පසුව මම ja2k17ja_ubuntu එකට nginx , htop , net-tools කියන packages ටිකකුත් installed කරා.
මගේ ja2k17ja_ubuntu එකෙන් Docker image එකක් සදා ගත්තොත් එම image එක තුල මම installed කරපු packages ටිකත් එකට ඇතුලත් කරගන්න පුළුවන්. එවිට මට නැවතත් එම packages ටික install කරන්න ඕන නැ. 
docker commit බාවිතා කිරීමට  පෙර පෙර අදාල Docker container එක stop කරගත යුතුයි.

ට්‍රයි docker stop ja2k17ja_ubuntu
nix@ja2k17ja-docker:~$ docker stop ja2k17ja_ubuntu
ja2k17ja_ubuntu
nix@ja2k17ja-docker:~$
වැඩේ කරන්න කලින් docker ps -a පාරක් දාල බලමු.

ට්‍රයි docker ps -a
nix@ja2k17ja-docker:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
613d5ff78051        ubuntu              "bash"              17 minutes ago      Exited (0) 6 seconds ago                       ja2k17ja_ubuntu
nix@ja2k17ja-docker:~$
ට්‍රයි docker commit ja2k17ja_ubuntu ja2k17ja_ubuntu_nginx
nix@ja2k17ja-docker:~$ docker commit ja2k17ja_ubuntu ja2k17ja_ubuntu_nginx
sha256:937a76550fbab260767093ff8b2a09a3d0a69a0df5c4b690eb952c561d8f9859
nix@ja2k17ja-docker:~$


දැන් අපි docker images පාරක් දාල චෙක් කර ගනිමු.

ට්‍රයි docker images
nix@ja2k17ja-docker:~$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
ja2k17ja_ubuntu_nginx   latest              937a76550fba        2 minutes ago       220MB
ubuntu                  latest              d355ed3537e9        11 days ago         119MB
nix@ja2k17ja-docker:~$
දැක්ක නේද දැන් අපිට ja2k17ja_ubuntu_nginx කියල අලුතින් Docker image එකක් තියෙනව. මේimage එක ඇතුලෙ  අපි installed කරපු packages ටිකත් ඇතුලත් වෙලා තියෙනව.
අපි දැන් මේ හද ගතිපු ja2k17ja_ubuntu_nginx කියන image එකෙන් Docker container එකක් සාදා ගෙන තව කමාන්ඩ්ස් ටිකක් ට්‍රයි කරමු.

ට්‍රයි docker run -it -p 80:80 --name ja2k17ja_ubuntu_nginx ja2k17ja_ubuntu_nginx
nix@ja2k17ja-docker:~$ docker run -it -p 80:80 --name ja2k17ja_ubuntu_nginx ja2k17ja_ubuntu_nginx
root@9e2f5b028887:/# exit
exit
nix@ja2k17ja-docker:~$
ට්‍රයි docker ps -a
nix@ja2k17ja-docker:~$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                         PORTS               NAMES
9e2f5b028887        ja2k17ja_ubuntu_nginx   "bash"              3 minutes ago       Exited (0) 2 seconds ago                           ja2k17ja_ubuntu_nginx
613d5ff78051        ubuntu                  "bash"              About an hour ago   Exited (0) About an hour ago                       ja2k17ja_ubuntu
nix@ja2k17ja-docker:~$ 




3) docker inspect
අපිට docker inspect සබ් කමාන්ඩ් එක මගින් Docker container එකක් inspect කරන්න පුළුවන්. අපිට සැහෙන විස්තර ප්‍රමාණයක් මෙම කමාන්ඩ් එකෙන් ගන්න පුළුවන්. නමුත් output එක ටිකක් දිගයි. මම එක filter කරන විදියකුත් ඔයාලට පෙන්නල දෙන්නම්. ඔයාල මේ කමාන්ඩ් එක රන් නොවන Docker container එකකටත් දීල බලන්න. එක මම ඔයාලට දෙන home work එකක්. රන් සහ රන් නොවන output සංසන්දනය කරල බලන්න. 
අපි දැන් රන් වෙන Docker container එකකට දීල බලමු. මුලින්ම docker start ja2k17ja_ubuntu_nginx කමාන්ඩ් එක දීල container එක start කරගනිමු.

දැන් ට්‍රයි docker inspect ja2k17ja_ubuntu_nginx
nix@ja2k17ja-docker:~$ docker inspect ja2k17ja_ubuntu_nginx                                    
[
    {
        "Id": "9e2f5b028887743e0f8f6db4e3e9c75d7a7769505b59d1264370e3a06bb4ab05",
        "Created": "2017-07-02T02:29:39.414017444Z",
        "Path": "bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 14572,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2017-07-02T02:41:35.184780297Z",
            "FinishedAt": "2017-07-02T02:34:06.78363607Z"
        },
        "Image": "sha256:937a76550fbab260767093ff8b2a09a3d0a69a0df5c4b690eb952c561d8f9859",
        "ResolvConfPath": "/var/lib/docker/containers/9e2f5b028887743e0f8f6db4e3e9c75d7a7769505b59d1264370e3a06bb4ab05/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/9e2f5b028887743e0f8f6db4e3e9c75d7a7769505b59d1264370e3a06bb4ab05/hostname",
        "HostsPath": "/var/lib/docker/containers/9e2f5b028887743e0f8f6db4e3e9c75d7a7769505b59d1264370e3a06bb4ab05/hosts",
        "LogPath": "/var/lib/docker/containers/9e2f5b028887743e0f8f6db4e3e9c75d7a7769505b59d1264370e3a06bb4ab05/9e2f5b028887743e0f8f6db4e3e9c75d7a7769505b59d1264370e3a06bb4ab05-json.log",
        "Name": "/ja2k17ja_ubuntu_nginx",
        "RestartCount": 0,
        "Driver": "aufs",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "80"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
---
---
---
---
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "b9e5c79cc33f1b73edb031f8ceef5baafca563f1520b20f1a08431dfdd59cd41",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "80"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/b9e5c79cc33f",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "c8999373eccf35a027a8a2728b1fb482d3a94bd864544958e608083c694e3363",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "c4eac1ceeb2a9fd7d73a59e6d2b4ec7272cadb01887a6a4277a5bdc0d0a9783b",
                    "EndpointID": "c8999373eccf35a027a8a2728b1fb482d3a94bd864544958e608083c694e3363",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]
nix@ja2k17ja-docker:~$ 
දැන් අපි filter කරන විදිය බලමු.

ට්‍රයි docker inspect -f '{{.NetworkSettings.IPAddress}}' ja2k17ja_ubuntu_nginx
nix@ja2k17ja-docker:~$ docker inspect -f '{{.NetworkSettings.IPAddress}}' ja2k17ja_ubuntu_nginx
172.17.0.2
nix@ja2k17ja-docker:~$
4) docker export
අපිට මේ සබ් කමාන්ඩ් එක බාවිතා කරල Docker container එකේ file system එක container එකෙන් එලියට tar archive එකක් විදියට export කරගන්න පුළුවන්.
අපි උදාහරණයකින් මගින් තේරුම් ගන්න බලමු. මුලින්ම අපේ home ඩිරෙක්ටරිය තුල docker_file_systems කියල directory එකක් හදාගමු. අපි මේක ඇතුලට Docker containers වල file system ටික export කරමු.

ට්‍රයි mkdir ~/docker_file_systems
nix@ja2k17ja-docker:~$ mkdir ~/docker_file_systems
nix@ja2k17ja-docker:~$
ට්‍රයි docker export ja2k17ja_ubuntu_nginx > ~/docker_file_systems/ja2k17ja_ubuntu_nginx_fs.tar
nix@ja2k17ja-docker:~$ docker export ja2k17ja_ubuntu_nginx > ~/docker_file_systems/ja2k17ja_ubuntu_nginx_fs.tar
nix@ja2k17ja-docker:~$
ට්‍රයි ls -hl ~/docker_file_systems
nix@ja2k17ja-docker:~$ ls -hl ~/docker_file_systems
total 178M
-rw-rw-r-- 1 nix nix 178M Jul  2 03:35 ja2k17ja_ubuntu_nginx_fs.tar
nix@ja2k17ja-docker:~$
අපිට අවශ්‍ය නම් මේ tar archive එක extract කරල බලන්න පුළුවන්. අපි ඒ විදියටත් කරලා බලමු.

ට්‍රයි mkdir ~/docker_file_systems/ja2k17ja_ubuntu_nginx && sudo tar -xf ~/docker_file_systems/ja2k17ja_ubuntu_nginx_fs.tar -C ~/docker_file_systems/ja2k17ja_ubuntu_nginx
nix@ja2k17ja-docker:~$ mkdir ~/docker_file_systems/ja2k17ja_ubuntu_nginx && sudo tar -xf ~/docker_file_systems/ja2k17ja_ubuntu_nginx_fs.tar -C ~/docker_file_systems/ja2k17ja_ubuntu_nginx
nix@ja2k17ja-docker:~$
අපිට මේ විදියට extract කරට කරාට පසුව ja2k17ja_ubuntu_nginx එක ඇතුලෙ තියෙන දේවල් බලන්න පුළුවන්. මේක හරියට අපේ Ubuntu file system එක වගේමයි.

ට්‍රයි ls -l ~/docker_file_systems/ja2k17ja_ubuntu_nginx
nix@ja2k17ja-docker:~$ ls -l ~/docker_file_systems/ja2k17ja_ubuntu_nginx
total 76
drwxr-xr-x  2 root root 4096 Jul  2 01:26 bin
drwxr-xr-x  2 root root 4096 Apr 12  2016 boot
drwxr-xr-x  4 root root 4096 Jul  2 02:29 dev
drwxr-xr-x 47 root root 4096 Jul  2 02:29 etc
drwxr-xr-x  2 root root 4096 Apr 12  2016 home
drwxr-xr-x  8 root root 4096 Jul  2 01:26 lib
drwxr-xr-x  2 root root 4096 Jun 19 20:23 lib64
drwxr-xr-x  2 root root 4096 Jun 19 20:23 media
drwxr-xr-x  2 root root 4096 Jun 19 20:23 mnt
drwxr-xr-x  2 root root 4096 Jun 19 20:23 opt
drwxr-xr-x  2 root root 4096 Apr 12  2016 proc
drwx------  3 root root 4096 Jul  2 03:00 root
drwxr-xr-x  5 root root 4096 Jul  2 01:26 run
drwxr-xr-x  2 root root 4096 Jul  2 01:26 sbin
drwxr-xr-x  2 root root 4096 Jun 19 20:23 srv
drwxr-xr-x  2 root root 4096 Feb  5  2016 sys
drwxrwxrwt  2 root root 4096 Jul  2 01:26 tmp
drwxr-xr-x 10 root root 4096 Jul  2 01:26 usr
drwxr-xr-x 12 root root 4096 Jul  2 01:26 var
nix@ja2k17ja-docker:~$ 
5) docker cp
අපිට මේ සබ් කමාන්ඩ් එකෙන් පුළුවන් Host server එක සහ Docker container එක අතර file හුවමාරු කරගන. මෙමගින් host server එකේ සිට Docker container එකටත්, Docker container එකේ සිට Host server එකටත් files  copy කරන්න පුළුවන්.
දැන් අපි බලමු Docker container එකෙන් host ට කොපි කරල. මෙහි ja2k17ja_ubuntu_nginx කියන්නෙ Docker container එකේ NAMES එක කියල ඔයාල දන්නව.

ට්‍රයි docker cp ja2k17ja_ubuntu_nginx:/etc/nginx/nginx.conf ~/ja2k17ja_ubuntu_nginx-nginx.conf
nix@ja2k17ja-docker:~$ docker cp ja2k17ja_ubuntu_nginx:/etc/nginx/nginx.conf ~/ja2k17ja_ubuntu_nginx-nginx.conf
nix@ja2k17ja-docker:~$


ට්‍රයි ls -l ~/
nix@ja2k17ja-docker:~$ ls -l ~/
total 8
drwxrwxr-x 3 nix nix 4096 Jul  2 03:54 docker_file_systems
-rw-r--r-- 1 nix nix 1462 Feb 11 21:00 ja2k17ja_ubuntu_nginx-nginx.conf
nix@ja2k17ja-docker:~$


ට්‍රයි docker cp ~/ja2k17ja_ubuntu_nginx-nginx.conf ja2k17ja_ubuntu_nginx:/etc/nginx/nginx.conf.back
nix@ja2k17ja-docker:~$ docker cp ~/ja2k17ja_ubuntu_nginx-nginx.conf ja2k17ja_ubuntu_nginx:/etc/nginx/nginx.conf.back
nix@ja2k17ja-docker:~$


ට්‍රයි docker exec -it ja2k17ja_ubuntu_nginx bash
nix@ja2k17ja-docker:~$ docker exec -it ja2k17ja_ubuntu_nginx bash
root@9e2f5b028887:/#
ට්‍රයි ls -l /etc/nginx
root@9e2f5b028887:/# ls -l /etc/nginx
total 60
drwxr-xr-x 2 root root 4096 Mar 22 11:12 conf.d
-rw-r--r-- 1 root root 1077 Feb 11 21:00 fastcgi.conf
-rw-r--r-- 1 root root 1007 Feb 11 21:00 fastcgi_params
-rw-r--r-- 1 root root 2837 Feb 11 21:00 koi-utf
-rw-r--r-- 1 root root 2223 Feb 11 21:00 koi-win
-rw-r--r-- 1 root root 3957 Feb 11 21:00 mime.types
-rw-r--r-- 1 root root 1462 Feb 11 21:00 nginx.conf
-rw-r--r-- 1 1001 1002 1462 Feb 11 21:00 nginx.conf.back
-rw-r--r-- 1 root root  180 Feb 11 21:00 proxy_params
-rw-r--r-- 1 root root  636 Feb 11 21:00 scgi_params
drwxr-xr-x 2 root root 4096 Jul  2 01:26 sites-available
drwxr-xr-x 2 root root 4096 Jul  2 01:26 sites-enabled
drwxr-xr-x 2 root root 4096 Jul  2 01:26 snippets
-rw-r--r-- 1 root root  664 Feb 11 21:00 uwsgi_params
-rw-r--r-- 1 root root 3071 Feb 11 21:00 win-utf
root@9e2f5b028887:/#
 
දැන් ඔයාලට තියෙන්නෙ මම කියල දීපු දේවල් හොදින් අත්හදා බලන්න.
නැවතත් මෙවැනි පාඩමකින් හමුවෙමු.
ස්තුතියි.
 
Last edited:
May 7, 2016
12,338
1,004
0
තොප්පිගල
11.gif
11.gif

+++
 

wisal

Member
Jul 2, 2009
7,624
759
0
Israel
මේ පාඩම් වල මුල ඒවා හොයාන කියවන්න ඕනේ මට ග්‍රීක් වගේ. අවුරුදු ගානකින්නේ එලකිරි එකට ආවේ.
 
May 7, 2016
12,338
1,004
0
තොප්පිගල
මේ පාඩම් වල මුල ඒවා හොයාන කියවන්න ඕනේ මට ග්‍රීක් වගේ. අවුරුදු ගානකින්නේ එලකිරි එකට ආවේ.

යට devops කියන ටැග් එක ක්ලික් කරහන්

එතකොට ඔක්කොම එනවා