Thursday, August 24, 2023

DOCKER TUTORIAL :Build an image from an existing application


 This is a docker tutorial for beginners and is part of a series.


In this module, we will tackle the following:

1. Download a sample application from github.

2. Create a docker image of the sample application

3. Run the application from your laptop.


You will need a github account and desktop docker installed on your machine.


Steps

1. Go to https://github.com/nigelpoulton/gsd

2. Open either a command prompt or a powershell from your machine.

3. Create a directory D:\dxdockerlabs and clone the source code from github to this directory

4. git clone https://github.com/nigelpoulton/gsd.git



D:\>mkdir dxdockerlabs

D:\>cd dxdockerlabs

D:\dxdockerlabs>dir
 Volume in drive D is DATA
 Volume Serial Number is 94A8-535C

 Directory of D:\dxdockerlabs

08/25/2023  10:32 AM    <DIR>          .
08/25/2023  10:32 AM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  53,273,477,120 bytes free

D:\dxdockerlabs>git clone https://github.com/nigelpoulton/gsd.git
Cloning into 'gsd'...
remote: Enumerating objects: 125, done.
remote: Counting objects: 100% (125/125), done.
remote: Compressing objects: 100% (89/89), done.
remote: Total 125 (delta 47), reused 88 (delta 33), pack-reused 0
Receiving objects: 100% (125/125), 310.31 KiB | 2.67 MiB/s, done.
Resolving deltas: 100% (47/47), done.

D:\dxdockerlabs>dir
 Volume in drive D is DATA
 Volume Serial Number is 94A8-535C

 Directory of D:\dxdockerlabs

08/25/2023  10:32 AM    <DIR>          .
08/25/2023  10:32 AM    <DIR>          ..
08/25/2023  10:32 AM    <DIR>          gsd
               0 File(s)              0 bytes
               3 Dir(s)  53,272,608,768 bytes free

D:\dxdockerlabs>

5. The gsd folder you just downloaded contains the source code of the application. This can be any other source code of any application. The only difference is this folder contains a 'dockerfile' that tells what docker has to do. The creation of the dockerfile will not be discussed in this series since this is for beginners

6.  Create the docker image for this application. Go to the directory where the dockerfile is located.  Use

docker image build -t dextervelascoaei/gsd:first-ctr . 

where: 
docker account: dextervelascoaei
directory:gsd
container name: first-ctr 

D:\dxdockerlabs>cd gsd

D:\dxdockerlabs\gsd>dir
 Volume in drive D is DATA
 Volume Serial Number is 94A8-535C

 Directory of D:\dxdockerlabs\gsd

08/25/2023  10:32 AM    <DIR>          .
08/25/2023  10:32 AM    <DIR>          ..
08/25/2023  10:32 AM    <DIR>          compose
08/25/2023  10:32 AM    <DIR>          container
08/25/2023  10:32 AM    <DIR>          first-container
08/25/2023  10:32 AM    <DIR>          multi-container
08/25/2023  10:32 AM             1,077 README.md
08/25/2023  10:32 AM    <DIR>          swarm
08/25/2023  10:32 AM    <DIR>          swarm-stack
               1 File(s)          1,077 bytes
               8 Dir(s)  53,272,608,768 bytes free

D:\dxdockerlabs\gsd>cd first-container

D:\dxdockerlabs\gsd\first-container>dir
 Volume in drive D is DATA
 Volume Serial Number is 94A8-535C

 Directory of D:\dxdockerlabs\gsd\first-container

08/25/2023  10:32 AM    <DIR>          .
08/25/2023  10:32 AM    <DIR>          ..
08/25/2023  10:32 AM               678 app.js
08/25/2023  10:32 AM               675 Dockerfile
08/25/2023  10:32 AM               361 package.json
08/25/2023  10:32 AM                62 readme.md
08/25/2023  10:32 AM    <DIR>          static
08/25/2023  10:32 AM    <DIR>          views
               4 File(s)          1,776 bytes
               4 Dir(s)  53,272,608,768 bytes free

[+] Building 3.4s (11/11) FINISHED
 => [internal] load .dockerignore                                                                               0.0s
 => => transferring context: 2B                                                                                 0.0s
 => [internal] load build definition from Dockerfile                                                            0.0s
 => => transferring dockerfile: 714B                                                                            0.0s
 => [internal] load metadata for docker.io/library/node:current-alpine                                          3.2s
 => [auth] library/node:pull token for registry-1.docker.io                                                     0.0s
 => [1/5] FROM docker.io/library/node:current-alpine@sha256:f62abc08fe1004555c4f28b6793af8345a76230b21d2d24997  0.0s
 => [internal] load build context                                                                               0.0s
 => => transferring context: 106.31kB                                                                           0.0s
 => CACHED [2/5] RUN mkdir -p /usr/src/app                                                                      0.0s
 => CACHED [3/5] COPY . /usr/src/app                                                                            0.0s
 => CACHED [4/5] WORKDIR /usr/src/app                                                                           0.0s
 => CACHED [5/5] RUN npm install                                                                                0.0s
 => exporting to image                                                                                          0.0s
 => => exporting layers                                                                                         0.0s
 => => writing image sha256:602dc8e5704e61c5c69716a600377a3c5e5ad1650b93da1bb7eb5d7151443d46                    0.0s
 => => naming to docker.io/dextervelascoaei/gsd:first-ctr                                                       0.0s

D:\dxdockerlabs\gsd\first-container>

7. Now we can run the container with 
'docker container run -d --name ironman -p 8000:8080 dexteravelascoaei/gsd:first-ctr '

D:\dxdockerlabs\gsd\first-container>docker container run -d --name ironman -p 8000:8080 dexteravelascoaei/gsd:first-ctr
Unable to find image 'dexteravelascoaei/gsd:first-ctr' locally
first-ctr: Pulling from dexteravelascoaei/gsd
8921db27df28: Pull complete
361849a0fe60: Pull complete
4769d5fe84bb: Pull complete
1a33b52da743: Pull complete
5a34b913c9b2: Pull complete
1f6ea1c63c6e: Pull complete
142e7c5f35df: Pull complete
Digest: sha256:e6fa6e4beffb094719b24bfd48f38059f62d6d65f699504955a3f618d1159384
Status: Downloaded newer image for dexteravelascoaei/gsd:first-ctr
352c22010c8402dee23e2cf76af7f2978dce170081c8f1917508b3afaa3f5bad

8. go to localhost:8000



9. Finished

Docker for Beginners


 This tutorial is docker for beginners.


Outline

  1. Environment set up
    1. Install Docker for Desktop
    2. Install Git
  2. Build an image from an existing application
  3. Push an image to a repository
  4. Start a container with the image
  5. Stop the container
  6. Delete the image
  7. test 

Wednesday, August 2, 2023