# v0.0

## v0.0

> Sandbox

```bash
user@workstation:~$ sudo docker pull alpine
[sudo] password for user: 
Using default tag: latest
latest: Pulling from library/alpine
ff3a5c916c92: Pull complete 
Digest: sha256:7b848083f93822dd21b0a2f14a110bd99f6efb4b838d499df6d04a49d0debf8b
Status: Downloaded newer image for alpine:latest
user@workstation:~$
```

```bash
user@workstation:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
friendlyhello       latest              23f8ef6f5ce3        7 hours ago         148MB
python              2.7-slim            52ad41c7aea4        2 weeks ago         139MB
ubuntu              latest              0458a4468cbc        5 weeks ago         112MB
alpine              latest              3fd9065eaf02        7 weeks ago         4.15MB
hello-world         latest              f2a91732366c        3 months ago        1.85kB
user@workstation:~$
```

```bash
user@workstation:~$ sudo docker run -p 4000:80 alpine
user@workstation:~$ sudo docker run -it alpine /bin/sh
/ # ls
bin    etc    lib    mnt    root   sbin   sys    usr
dev    home   media  proc   run    srv    tmp    var
/ #
```

```bash
/ # uname -a
Linux 8839e86faf94 4.13.0-36-generic #40~16.04.1-Ubuntu SMP Fri Feb 16 23:25:58 UTC 2018 x86_64 Linux
/ #
```

```bash
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:41587 errors:0 dropped:0 overruns:0 frame:0
          TX packets:23257 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:64353520 (61.3 MiB)  TX bytes:1580471 (1.5 MiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:200 (200.0 B)  TX bytes:200 (200.0 B)

/ #
```

```bash
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
v3.7.0-106-gf61baacc21 [http://dl-cdn.alpinelinux.org/alpine/v3.7/main]
v3.7.0-105-g4b8b158c40 [http://dl-cdn.alpinelinux.org/alpine/v3.7/community]
OK: 9048 distinct packages available
```

```bash
/ # apk upgrade
Upgrading critical system libraries and apk-tools:
(1/1) Upgrading apk-tools (2.8.2-r0 -> 2.9.1-r0)
Executing busybox-1.27.2-r7.trigger
Continuing the upgrade transaction with new apk-tools:
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/3) Upgrading musl (1.1.18-r2 -> 1.1.18-r3)
(2/3) Upgrading busybox (1.27.2-r7 -> 1.27.2-r8)
Executing busybox-1.27.2-r8.post-upgrade
(3/3) Upgrading musl-utils (1.1.18-r2 -> 1.1.18-r3)
Executing busybox-1.27.2-r8.trigger
OK: 197 MiB in 26 packages
/ #
```

```bash
/ # apk add openrc --no-cache
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/1) Installing openrc (0.24.1-r4)
Executing openrc-0.24.1-r4.post-install
Executing busybox-1.27.2-r8.trigger
OK: 199 MiB in 27 packages
/ #
```

```bash
/ # apk add curl --no-cache
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/4) Installing ca-certificates (20171114-r0)
(2/4) Installing libssh2 (1.8.0-r2)
(3/4) Installing libcurl (7.58.0-r1)
(4/4) Installing curl (7.58.0-r1)
Executing busybox-1.27.2-r8.trigger
Executing ca-certificates-20171114-r0.trigger
OK: 201 MiB in 31 packages
/ #
```

```bash
/ # apk add apache2
(1/6) Installing libuuid (2.31-r0)
(2/6) Installing apr (1.6.3-r0)
(3/6) Installing expat (2.2.5-r0)
(4/6) Installing apr-util (1.6.1-r1)
(5/6) Installing pcre (8.41-r1)
(6/6) Installing apache2 (2.4.29-r1)
Executing apache2-2.4.29-r1.pre-install
Executing busybox-1.27.2-r7.trigger
OK: 8 MiB in 17 packages
/ #
```

```bash
/ # rc-update add apache2
 * service apache2 added to runlevel sysinit
/ # rc-service apache2 status
 * WARNING: apache2 is already starting
/ #
```

```bash
/ # apk add mariadb mariadb-client
(1/9) Installing mariadb-common (10.1.28-r1)
(2/9) Installing libaio (0.3.110-r1)
(3/9) Installing ncurses-terminfo-base (6.0_p20171125-r0)
(4/9) Installing ncurses-terminfo (6.0_p20171125-r0)
(5/9) Installing ncurses-libs (6.0_p20171125-r0)
(6/9) Installing libgcc (6.4.0-r5)
(7/9) Installing libstdc++ (6.4.0-r5)
(8/9) Installing mariadb (10.1.28-r1)
Executing mariadb-10.1.28-r1.pre-install
(9/9) Installing mariadb-client (10.1.28-r1)
Executing busybox-1.27.2-r7.trigger
OK: 197 MiB in 26 packages
/ #
```

```bash
user@workstation:~$ sudo docker run -p 4000:80 alpine
user@workstation:~$ sudo docker run -it alpine /bin/sh
/ #
```

## Get Mentored :: AlpineApache2 :: Dockerfile

```bash
user@workstation:~$ mkdir alpineapache2
user@workstation:~$ cd alpineapache2/
user@workstation:~/alpineapache2$ nano Dockerfile
```

```bash
FROM alpine:latest

MAINTAINER Abraham Arce <xe1gyq@gmail.com>

ENV TIMEZONE America/Mexico_City

RUN     apk update && \
        apk upgrade && \
        apk add openrc --no-cache && \
        apk add curl --no-cache && \
        apk add apache2 

EXPOSE 80 443

ENTRYPOINT  ["/bin/sh"]
```

```bash
user@workstation:~/alpineapache2$ sudo docker build -t alpineapache2 .
Sending build context to Docker daemon  2.048kB
Step 1/6 : FROM alpine:latest
 ---> 3fd9065eaf02
Step 2/6 : MAINTAINER Abraham Arce <xe1gyq@gmail.com>
 ---> Using cache
 ---> d104c8c28ac5
Step 3/6 : ENV TIMEZONE America/Mexico_City
 ---> Using cache
 ---> 777b73795c2b
Step 4/6 : RUN     apk update &&     apk upgrade &&     apk add openrc --no-cache &&     apk add curl --no-cache &&     apk add apache2
 ---> Running in 85c87ee29e6e
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
v3.7.0-106-gf61baacc21 [http://dl-cdn.alpinelinux.org/alpine/v3.7/main]
v3.7.0-105-g4b8b158c40 [http://dl-cdn.alpinelinux.org/alpine/v3.7/community]
OK: 9048 distinct packages available
Upgrading critical system libraries and apk-tools:
(1/1) Upgrading apk-tools (2.8.2-r0 -> 2.9.1-r0)
Executing busybox-1.27.2-r7.trigger
Continuing the upgrade transaction with new apk-tools:
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/3) Upgrading musl (1.1.18-r2 -> 1.1.18-r3)
(2/3) Upgrading busybox (1.27.2-r7 -> 1.27.2-r8)
Executing busybox-1.27.2-r8.post-upgrade
(3/3) Upgrading musl-utils (1.1.18-r2 -> 1.1.18-r3)
Executing busybox-1.27.2-r8.trigger
OK: 4 MiB in 11 packages
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/1) Installing openrc (0.24.1-r4)
Executing openrc-0.24.1-r4.post-install
Executing busybox-1.27.2-r8.trigger
OK: 6 MiB in 12 packages
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/4) Installing ca-certificates (20171114-r0)
(2/4) Installing libssh2 (1.8.0-r2)
(3/4) Installing libcurl (7.58.0-r1)
(4/4) Installing curl (7.58.0-r1)
Executing busybox-1.27.2-r8.trigger
Executing ca-certificates-20171114-r0.trigger
OK: 8 MiB in 16 packages
(1/6) Installing libuuid (2.31-r0)
(2/6) Installing apr (1.6.3-r0)
(3/6) Installing expat (2.2.5-r0)
(4/6) Installing apr-util (1.6.1-r1)
(5/6) Installing pcre (8.41-r1)
(6/6) Installing apache2 (2.4.29-r1)
Executing apache2-2.4.29-r1.pre-install
Executing busybox-1.27.2-r8.trigger
OK: 11 MiB in 22 packages
Removing intermediate container 85c87ee29e6e
 ---> 5c100f731c01
Step 5/6 : EXPOSE 80 443
 ---> Running in e8be3126a71b
Removing intermediate container e8be3126a71b
 ---> 443b0331cf0f
Step 6/6 : ENTRYPOINT  ["/bin/sh"]
 ---> Running in a5b462e2f89e
Removing intermediate container a5b462e2f89e
 ---> bdf1f77e581c
Successfully built bdf1f77e581c
Successfully tagged alpineapache2:latest
user@workstation:~/alpineapache2$
```

```bash
user@workstation:~/alpineapache2$ sudo docker run -it alpineapache2 /bin/sh
/ #
```

```bash
/ # exec /usr/sbin/httpd -D FOREGROUND -f /etc/apache2/httpd.conf 
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
user@workstation:~/alpineapache2$
```

```bash
user@workstation:~/alpineapache2$ sudo docker ps
[sudo] password for user: 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                           NAMES
09c0b70ed9a8        alpineapache2       "/bin/sh"           55 seconds ago      Up 54 seconds       443/tcp, 0.0.0.0:4000->80/tcp   dazzling_austin
user@workstation:~/alpineapache2$
```

```bash
user@workstation:~/alpineapache2$ sudo docker inspect 09c0b70ed9a8
[
    {
        "Id": "09c0b70ed9a8117d0431d6bf0aa6fb7d02f8e0fc1c6df1677f64990c5c2b6e36",
        "Created": "2018-03-05T02:06:42.528418511Z",
        "Path": "/bin/sh",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 18244,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-03-05T02:06:42.956925463Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:443b0331cf0fe191808e802b8029c969084ecd2f1f1808fc9627f99936c73f4f",
        "ResolvConfPath": "/var/lib/docker/containers/09c0b70ed9a8117d0431d6bf0aa6fb7d02f8e0fc1c6df1677f64990c5c2b6e36/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/09c0b70ed9a8117d0431d6bf0aa6fb7d02f8e0fc1c6df1677f64990c5c2b6e36/hostname",
        "HostsPath": "/var/lib/docker/containers/09c0b70ed9a8117d0431d6bf0aa6fb7d02f8e0fc1c6df1677f64990c5c2b6e36/hosts",
        "LogPath": "/var/lib/docker/containers/09c0b70ed9a8117d0431d6bf0aa6fb7d02f8e0fc1c6df1677f64990c5c2b6e36/09c0b70ed9a8117d0431d6bf0aa6fb7d02f8e0fc1c6df1677f64990c5c2b6e36-json.log",
        "Name": "/dazzling_austin",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "4000"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/e225e76f8150bcb5f6d1ca8c9271193509b2e5ab4202476eca417097d618c1c5-init/diff:/var/lib/docker/overlay2/ef33caeddfd65f6600c5d6e389748c512a7bfb81fad75a26e276902f386fce69/diff:/var/lib/docker/overlay2/e65511ca98418d7577292f3baac3019bda769ca9c3b844161c208cf39fa4d26b/diff",
                "MergedDir": "/var/lib/docker/overlay2/e225e76f8150bcb5f6d1ca8c9271193509b2e5ab4202476eca417097d618c1c5/merged",
                "UpperDir": "/var/lib/docker/overlay2/e225e76f8150bcb5f6d1ca8c9271193509b2e5ab4202476eca417097d618c1c5/diff",
                "WorkDir": "/var/lib/docker/overlay2/e225e76f8150bcb5f6d1ca8c9271193509b2e5ab4202476eca417097d618c1c5/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "09c0b70ed9a8",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "ExposedPorts": {
                "443/tcp": {},
                "80/tcp": {}
            },
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "TIMEZONE=America/Mexico_City"
            ],
            "Cmd": [
                "/bin/sh"
            ],
            "Image": "alpineapache2",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "5d6f022990270cdd51f2f5cc7be26cece6ab2e5d0d31b5cc7eef51fa7ce3322d",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "443/tcp": null,
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "4000"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/5d6f02299027",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "60a2d18a3555a37c3c190ea760cf3ff1b4704a2cd6203a053c4dbcf5294bac6e",
            "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": "d73ae00947ded34d538f9e05cd7eca55c103f17569edd727e7ec5feef84c3f8d",
                    "EndpointID": "60a2d18a3555a37c3c190ea760cf3ff1b4704a2cd6203a053c4dbcf5294bac6e",
                    "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
                }
            }
        }
    }
]
user@workstation:~/alpineapache2$
```

```bash
user@workstation:~/alpineapache2$ sudo docker inspect 09c0b70ed9a8  | grep IPAddress | cut -d '"' -f 4
172.17.0.2
172.17.0.2
user@workstation:~/alpineapache2$ sudo docker port 09c0b70ed9a8 80 | cut -d ":" -f2
4000
user@workstation:~/alpineapache2$
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://theiotlearninginitiative.gitbook.io/edgecomputingsolutions/introduction/edge-computing-solutions-architect/virtualization/containers/docker/get-mentored/v0.0.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
