---
# System prepended metadata

title: Docker lab 8
tags: [advanced-networking]

---

---
tags: advanced-networking
---
# Docker lab 8

read [this](https://docs.docker.com/install/linux/docker-ce/ubuntu/) before procced following commands

install docker
```bash=
# switch to root
sudo -s

# install dependencies
apt-get update
apt-get install -y \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg-agent \
  software-properties-common

# add Docker’s official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

apt-key fingerprint 0EBFCD88

# add docker apt repository
add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable"

apt-get update

apt-get install -y docker-ce docker-ce-cli containerd.io

exit
usermod -aG docker $USER
```

:::danger
Each node should apply two network adapters. One is NAT with static IP assigned. Another is bridge for outside network access.
:::

initial a new docker swarm cluster from management node for example: `192.168.174.11`
```bash=
# the advertise ip address refferded to NAT should be fixed
docker swarm init --advertise-addr 192.168.174.11
```

after initialized cluster, you will see the join statement as shown below.

```!
docker swarm join --token SWMTKN-1-53279lczrq4nutqx53w4bbwjsxjgpmc41i7sde27wdfktltd5q-7wzhp9tcihabwbyezlzhyxe9x 192.168.174.11:2377


# run the statement on rest of nodes
```




check node status
```bash=
docker node ls
```

create nginx service and expose 8080 as public access port.
```bash=
docker service create --name webservice1 --replicas=3 --publish 8080:80 nginx
```

update public port 8080 to 80 port.

```bash=
docker service update --publish-add published=80,target=80 webservice1
```

check exposed port

```bash=
docker service inspect --format="{{json .Endpoint.Spec.Ports}}" webservice1
```