티아카데미 컨테이너 오케스트레이션 쿠버네티스 살펴보기 TIL - docker & docker-compose 실습

2020-12-10

.

Data_Engineering_TIL(20201209)

study_program : 컨테이너 오케스트레이션 쿠버네티스 살펴보기

실습 시 참고한 URL : https://github.com/subicura/workshop-k8s-basic

  • 쿠버네티스 실습환경 구성

lightsail 서비스에서 vm을 생성하고 아래와 같이 접속한다.

ip-172-26-3-207 login: ubuntu
Password: 
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-1021-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Wed Dec  9 02:31:48 UTC 2020

  System load:  0.0               Processes:           93
  Usage of /:   2.2% of 77.49GB   Users logged in:     0
  Memory usage: 5%                IP address for eth0: 172.26.3.207
  Swap usage:   0%

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

264 packages can be updated.
173 updates are security updates.


*** System restart required ***

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ip-172-26-3-207:~$
  • jq 라는 패키지를 설치한다.

jq : Command-line JSON processor

ubuntu@ip-172-26-3-207:~$ sudo apt install -y jq
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libjq1 libonig4
The following NEW packages will be installed:
  jq libjq1 libonig4
0 upgraded, 3 newly installed, 0 to remove and 256 not upgraded.
Need to get 276 kB of archives.
After this operation, 930 kB of additional disk space will be used.
Get:1 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 libonig4 amd64 6.7.0-1 [119 kB]
Get:2 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 libjq1 amd64 1.5+dfsg-2 [111 kB]
Get:3 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 jq amd64 1.5+dfsg-2 [45.6 kB]
Fetched 276 kB in 0s (651 kB/s)
Selecting previously unselected package libonig4:amd64.
(Reading database ... 67619 files and directories currently installed.)
Preparing to unpack .../libonig4_6.7.0-1_amd64.deb ...
Unpacking libonig4:amd64 (6.7.0-1) ...
Selecting previously unselected package libjq1:amd64.
Preparing to unpack .../libjq1_1.5+dfsg-2_amd64.deb ...
Unpacking libjq1:amd64 (1.5+dfsg-2) ...
Selecting previously unselected package jq.
Preparing to unpack .../jq_1.5+dfsg-2_amd64.deb ...
Unpacking jq (1.5+dfsg-2) ...
Setting up libonig4:amd64 (6.7.0-1) ...
Setting up libjq1:amd64 (1.5+dfsg-2) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for man-db (2.8.3-2) ...
Setting up jq (1.5+dfsg-2) ...

ubuntu@ip-172-26-3-207:~$ jq
jq - commandline JSON processor [version 1.5-1-a5b5cbe]
Usage: jq [options] <jq filter> [file...]

        jq is a tool for processing JSON inputs, applying the
        given filter to its JSON text inputs and producing the
        filter's results as JSON on standard output.
        The simplest filter is ., which is the identity filter,
        copying jq's input to its output unmodified (except for
        formatting).
        For more advanced filters see the jq(1) manpage ("man jq")
        and/or https://stedolan.github.io/jq

        Some of the options include:
         -c             compact instead of pretty-printed output;
         -n             use `null` as the single input value;
         -e             set the exit status code based on the output;
         -s             read (slurp) all inputs into an array; apply filter to it;
         -r             output raw strings, not JSON texts;
         -R             read raw strings, not JSON texts;
         -C             colorize JSON;
         -M             monochrome (don't colorize JSON);
         -S             sort keys of objects on output;
         --tab  use tabs for indentation;
         --arg a v      set variable $a to value <v>;
         --argjson a v  set variable $a to JSON value <v>;
         --slurpfile a f        set variable $a to an array of JSON texts read from <f>;
        See the manpage for more options.
ubuntu@ip-172-26-3-207:~$ 
  • docker & docker-compose 설치
ubuntu@ip-172-26-3-207:~$ curl -fsSL https://get.docker.com/ | sudo sh
# Executing docker install script, commit: 26ff363bcf3b3f5a00498ac43694bf1c7d9ce16c
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ [ -n  ]
+ sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sh -c docker version
Client: Docker Engine - Community
 Version:           20.10.0
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        7287ab3
 Built:             Tue Dec  8 18:59:53 2020
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.0
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       eeddea2
  Built:            Tue Dec  8 18:57:44 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.3
  GitCommit:        269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc:
  Version:          1.0.0-rc92
  GitCommit:        ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker your-user

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.
        
ubuntu@ip-172-26-3-207:~$ sudo usermod -aG docker $USER
    
ubuntu@ip-172-26-3-207:~$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   651  100   651    0     0   1990      0 --:--:-- --:--:-- --:--:--  1990
100 15.4M  100 15.4M    0     0  3671k      0  0:00:04  0:00:04 --:--:-- 4682k
                        
ubuntu@ip-172-26-3-207:~$ sudo chmod +x /usr/local/bin/docker-compose
    
ubuntu@ip-172-26-3-207:~$ docker version
Client: Docker Engine - Community
 Version:           20.10.0
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        7287ab3
 Built:             Tue Dec  8 18:59:53 2020
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version: dial unix /var/run/docker.sock: connect: permission denied

ubuntu@ip-172-26-3-207:~$ docker-compose version
docker-compose version 1.24.0, build 0aa59064
docker-py version: 3.7.2
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018
    
ubuntu@ip-172-26-3-207:~$ sudo reboot
  • K3S 설치

K3S는 경량화된 쿠버네티스 클러스터를 구성할 수 있으며, 테스트 용도임.

프로덕션 환경에 적용하기에는 이슈가 있음.

ubuntu@ip-172-26-3-207:~$ curl -sfL https://get.k3s.io | sh -
[INFO]  Finding release for channel stable
[INFO]  Using v1.19.4+k3s1 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.19.4+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.19.4+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service  /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

ubuntu@ip-172-26-3-207:~$ sudo chown ubuntu:ubuntu /etc/rancher/k3s/k3s.yaml

ubuntu@ip-172-26-3-207:~$ kubectl get nodes
NAME              STATUS   ROLES    AGE   VERSION
ip-172-26-3-207   Ready    master   15s   v1.19.4+k3s1

ubuntu@ip-172-26-3-207:~$ cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
  • Local path provisioner plugin 설치

Use HostPath for persistent local storage with Kubernetes

ubuntu@ip-172-26-3-207:~$ kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
namespace/local-path-storage created
serviceaccount/local-path-provisioner-service-account created
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
clusterrole.rbac.authorization.k8s.io/local-path-provisioner-role configured
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
clusterrolebinding.rbac.authorization.k8s.io/local-path-provisioner-bind configured
deployment.apps/local-path-provisioner created
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
storageclass.storage.k8s.io/local-path configured
configmap/local-path-config created

ubuntu@ip-172-26-3-207:~$ kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/local-path patched (no change)

ubuntu@ip-172-26-3-207:~$ kubectl get storageclass
NAME                   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  8m6s
  • VSCode 온라인 설치
ubuntu@ip-172-26-3-207:~$ wget https://github.com/cdr/code-server/releases/download/v3.7.2/code-server-3.7.2-linux-amd64.tar.gz

ubuntu@ip-172-26-3-207:~$ tar xvfz code-server-3.7.2-linux-amd64.tar.gz

ubuntu@ip-172-26-3-207:~$ mkdir -p ~/.config/code-server

ubuntu@ip-172-26-3-207:~$ curl https://gist.githubusercontent.com/subicura/d7ac0cc6e662e8382e191d81c140c35b/raw/c904e8d5b3971af19e95a887cdd1bca0c916ccd8/config.yaml -o ~/.config/code-server/config.yaml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    69  100    69    0     0    133      0 --:--:-- --:--:-- --:--:--   133

ubuntu@ip-172-26-3-207:~$ mkdir ~/project

ubuntu@ip-172-26-3-207:~$ sudo curl https://gist.githubusercontent.com/subicura/c803fd68262736d83ee67b201d87fb3c/raw/dc95e9a3e4db84a3f148cc870e640d857296e2b6/codeserver.service -o /lib/systemd/system/codeserver.service
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   422  100   422    0     0   1110      0 --:--:-- --:--:-- --:--:--  1110

ubuntu@ip-172-26-3-207:~$ sudo systemctl start codeserver

ubuntu@ip-172-26-3-207:~$ sudo systemctl enable codeserver
Created symlink /etc/systemd/system/multi-user.target.wants/codeserver.service  /lib/systemd/system/codeserver.service.

설치 후 웹브라우저를 열고 [Lightsail VM ip address]:8000 로 접속해서 비밀번호 1q2w3e4r를 입력 후 접속한다.

쿠버네티스 실습전에 도커를 간단히 실습해보자.

  • 도커 명령어 실습
# 우분투 컨테이너 생성
ubuntu@ip-172-26-3-207:~$ docker run --rm -it ubuntu:18.04 /bin/sh
Unable to find image 'ubuntu:18.04' locally
18.04: Pulling from library/ubuntu
f22ccc0b8772: Pull complete 
3cf8fb62ba5f: Pull complete 
e80c964ece6a: Pull complete 
Digest: sha256:fd25e706f3dea2a5ff705dbc3353cf37f08307798f3e360a13e9385840f73fb3
Status: Downloaded newer image for ubuntu:18.04
# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# exit

# 간단한 웹 애플리케이션 생성
ubuntu@ip-172-26-3-207:~$ docker run -d -p 4567:4567 subicura/docker-workshop-app:1
Unable to find image 'subicura/docker-workshop-app:1' locally
1: Pulling from subicura/docker-workshop-app
f49cf87b52c1: Pull complete 
ea5e933f2656: Pull complete 
16d8409825c1: Pull complete 
4b59fdedd8fc: Pull complete 
1e71a202b46b: Pull complete 
b4b5cc2746b5: Pull complete 
6e5320d352e1: Pull complete 
7348c4c67988: Pull complete 
Digest: sha256:9011ff9a4c05f22aa2e5dcf7aabf5531264735db396b415ff0ee1a0709e25679
Status: Downloaded newer image for subicura/docker-workshop-app:1
cb104c208ccbe90ab67c759b9522718be1bbe0cb2608ae8391793f3ee05f7730

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS         PORTS                    NAMES
cb104c208ccb   subicura/docker-workshop-app:1   "/bin/sh -c 'bundle …"   12 seconds ago   Up 7 seconds   0.0.0.0:4567->4567/tcp   gracious_dewdney
        
# 웹브라우저를 열고 [Lightsail VM ip address]:4567 에 접속했을때 어떤 아이디가 전시되면 정상적으로 실행된 것임

# MySQL 컨테이너 생성
ubuntu@ip-172-26-3-207:~$ docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mysql:5.7
Unable to find image 'mysql:5.7' locally
5.7: Pulling from library/mysql
852e50cd189d: Pull complete 
29969ddb0ffb: Pull complete 
a43f41a44c48: Pull complete 
5cdd802543a3: Pull complete 
b79b040de953: Pull complete 
938c64119969: Pull complete 
7689ec51a0d9: Pull complete 
36bd6224d58f: Pull complete 
cab9d3fa4c8c: Pull complete 
1b741e1c47de: Pull complete 
aac9d11987ac: Pull complete 
Digest: sha256:8e2004f9fe43df06c3030090f593021a5f283d028b5ed5765cc24236c2c4d88e
Status: Downloaded newer image for mysql:5.7
f74715fe5546ad519586c0f1a93e6ac09f145e6cb6f176db4e0b35fc1f8fd4e4

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS          PORTS                               NAMES
f74715fe5546   mysql:5.7                        "docker-entrypoint.s…"   34 seconds ago   Up 30 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
cb104c208ccb   subicura/docker-workshop-app:1   "/bin/sh -c 'bundle …"   4 minutes ago    Up 4 minutes    0.0.0.0:4567->4567/tcp              gracious_dewdney

# mysql 컨테이너에 접속해서 Database 생성
ubuntu@ip-172-26-3-207:~$ docker exec -it mysql mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.32 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database wp CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on wp.* to wp@'%' identified by 'wp';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

# 워드프레스 컨테이너를 생성할건데 이 워드프레스가 mysql을 바라보기 때문에 mysql 접속정보를 넣어줘야 한다.
# 방금 위에서 띄운 mysql 정보를 참고해서 넣어주면 된다.
ubuntu@ip-172-26-3-207:~$ docker run -d -p 8888:80 -e WORDPRESS_DB_HOST=172.17.0.1 -e WORDPRESS_DB_NAME=wp -e WORDPRESS_DB_USER=wp -e WORDPRESS_DB_PASSWORD=wp wordpress
10f6b50637e4634859cd47b25ab2cc4fc10e0be4025887f218d50e3929655eba

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS          PORTS                               NAMES
10f6b50637e4   wordpress                        "docker-entrypoint.s…"   3 seconds ago    Up 2 seconds    0.0.0.0:8888->80/tcp                cool_mclean
f74715fe5546   mysql:5.7                        "docker-entrypoint.s…"   6 minutes ago    Up 6 minutes    0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
cb104c208ccb   subicura/docker-workshop-app:1   "/bin/sh -c 'bundle …"   10 minutes ago   Up 10 minutes   0.0.0.0:4567->4567/tcp              gracious_dewdney
        
# 웹브라우저를 열고 [Lightsail VM ip address]:8888 에 접속했을때 wordpress 화면이 뜨면 정상적으로 띄운것이다.

# docker log 확인
ubuntu@ip-172-26-3-207:~$ docker logs 10f6b50637e4
WordPress not found in /var/www/html - copying now...
Complete! WordPress has been successfully copied to /var/www/html
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4. Set the 'ServerName' directive globally to suppress this message
[Wed Dec 09 04:48:00.471362 2020] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.13 configured -- resuming normal operations
[Wed Dec 09 04:48:00.471413 2020] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
00.000.00.00 - - [09/Dec/2020:04:48:33 +0000] "GET / HTTP/1.1" 302 410 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
00.000.00.00 - - [09/Dec/2020:04:48:33 +0000] "GET /wp-admin/install.php HTTP/1.1" 200 4502 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

...

# 위에서 띄웠던 컨테이너를 종료해보자
ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS          PORTS                               NAMES
10f6b50637e4   wordpress                        "docker-entrypoint.s…"   5 minutes ago    Up 5 minutes    0.0.0.0:8888->80/tcp                cool_mclean
f74715fe5546   mysql:5.7                        "docker-entrypoint.s…"   11 minutes ago   Up 11 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
cb104c208ccb   subicura/docker-workshop-app:1   "/bin/sh -c 'bundle …"   15 minutes ago   Up 15 minutes   0.0.0.0:4567->4567/tcp              gracious_dewdney

ubuntu@ip-172-26-3-207:~$ docker stop 10f6b50637e4 f74715fe5546 cb104c208ccb
10f6b50637e4
f74715fe5546
cb104c208ccb

# 컨테이너를 stop 했으면 컨테이너가 종료된 상태로 남아있다.
# 만약에 아예 해당 컨테이너를 삭제하고 싶다면 아래와 같이 명령어를 실행한다.

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ubuntu@ip-172-26-3-207:~$ docker ps -a
CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS                       PORTS     NAMES
10f6b50637e4   wordpress                        "docker-entrypoint.s…"   11 minutes ago   Exited (0) 6 minutes ago               cool_mclean
f74715fe5546   mysql:5.7                        "docker-entrypoint.s…"   18 minutes ago   Exited (0) 6 minutes ago               mysql
cb104c208ccb   subicura/docker-workshop-app:1   "/bin/sh -c 'bundle …"   22 minutes ago   Exited (137) 5 minutes ago             gracious_dewdney

ubuntu@ip-172-26-3-207:~$ docker rm 10f6b50637e4 f74715fe5546 cb104c208ccb
10f6b50637e4
f74715fe5546
cb104c208ccb

# 도커 이미지 목록 확인
ubuntu@ip-172-26-3-207:~$ docker images
REPOSITORY                     TAG       IMAGE ID       CREATED       SIZE
wordpress                      latest    0d35c2300ec8   7 days ago    546MB
ubuntu                         18.04     2c047404e52d   13 days ago   63.3MB
mysql                          5.7       ae0658fdbad5   2 weeks ago   449MB
subicura/docker-workshop-app   1         41088672acf8   2 years ago   298MB


# 도커 네트워크를 실습해보자
# app-network 라는 이름으로 가상의 네트워크를 만들고, 이 네트워크를 설정해서 mysql을 만들면 굳이 상세한 접속정보를
# 설정안해도 편리하게 도커 컨테이너끼리 통신이 가능하다.
# 가상의 네트워크를 구성에서 해당 네트워크에 속한 컨테이너 끼리는 아이피 주소가 아니라 컨테이너 이름으로 서로 통신할 수 있다.

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ubuntu@ip-172-26-3-207:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ubuntu@ip-172-26-3-207:~$ docker network create app-network
348a87bb13d68c945affa3247983c90142330326d606dbb29e350045a477963f

ubuntu@ip-172-26-3-207:~$ docker run -d -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql --network=app-network mysql:5.7
134d11ec4a091712c72feaee78d86877d04a09adf82d1f7316fabfb4c4b85118

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                 NAMES
134d11ec4a09   mysql:5.7   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   3306/tcp, 33060/tcp   mysql
    
ubuntu@ip-172-26-3-207:~$ docker exec -it mysql mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.32 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database wp CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on wp.* to wp@'%' identified by 'wp';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

ubuntu@ip-172-26-3-207:~$ docker run -d -p 8888:80 --network=app-network -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_NAME=wp -e WORDPRESS_DB_USER=wp -e WORDPRESS_DB_PASSWORD=wp wordpress
69052fa9ab9753dfcbfc0b9df6b3d108f2937a6ae6408b319675b7fbdb6236c6

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                  NAMES
69052fa9ab97   wordpress   "docker-entrypoint.s…"   6 seconds ago   Up 4 seconds   0.0.0.0:8888->80/tcp   interesting_rubin
134d11ec4a09   mysql:5.7   "docker-entrypoint.s…"   9 minutes ago   Up 9 minutes   3306/tcp, 33060/tcp    mysql
    
# 웹브라우저를 열고 [Lightsail VM ip address]:8888 에 접속했을때 wordpress 화면이 뜨면 정상적으로 띄운것이다.


# 그러면 위에서 했던 개념을 응용해서 방명록을 만드는 실습을 아래와 같이 해보자

ubuntu@ip-172-26-3-207:~$ docker run -d --name=mongodb --network=app-network mongo:4
47c574fb75c5f71610ecd13393e9c5909f5465a051d181d552d75d4b4bafef11

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                  NAMES
47c574fb75c5   mongo:4     "docker-entrypoint.s…"   4 seconds ago    Up 2 seconds    27017/tcp              mongodb
69052fa9ab97   wordpress   "docker-entrypoint.s…"   8 minutes ago    Up 8 minutes    0.0.0.0:8888->80/tcp   interesting_rubin
134d11ec4a09   mysql:5.7   "docker-entrypoint.s…"   17 minutes ago   Up 17 minutes   3306/tcp, 33060/tcp    mysql
    
ubuntu@ip-172-26-3-207:~$ docker run -d --name=backend --network=app-network -e PORT=9000 -e GUESTBOOK_DB_ADDR=mongodb:27017 subicura/guestbook-backend:latest
Unable to find image 'subicura/guestbook-backend:latest' locally
latest: Pulling from subicura/guestbook-backend
e79bb959ec00: Pull complete 
d4b7902036fe: Pull complete 
1b2a72d4e030: Pull complete 
d54db43011fd: Pull complete 
69d473365bb3: Pull complete 
6e2490ee2dc8: Pull complete 
24bcfd3d8296: Pull complete 
4c485b32137c: Pull complete 
412552bf9213: Pull complete 
ccc531a563c9: Pull complete 
d80cdc55821c: Pull complete 
28bb33283f12: Pull complete 
Digest: sha256:96c1a11d8fe976ef10749de2269681c433b0491fe8284e689cff909d6ad2e43a
Status: Downloaded newer image for subicura/guestbook-backend:latest
d5aadde156883ade5e3e13e98ad2287ef2afc115712457968231c86bb73d196d

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS                  NAMES
d5aadde15688   subicura/guestbook-backend:latest   "node --inspect=9229…"   4 minutes ago    Up 4 minutes                           backend
47c574fb75c5   mongo:4                             "docker-entrypoint.s…"   19 minutes ago   Up 18 minutes   27017/tcp              mongodb
69052fa9ab97   wordpress                           "docker-entrypoint.s…"   27 minutes ago   Up 27 minutes   0.0.0.0:8888->80/tcp   interesting_rubin
134d11ec4a09   mysql:5.7                           "docker-entrypoint.s…"   36 minutes ago   Up 36 minutes   3306/tcp, 33060/tcp    mysql

ubuntu@ip-172-26-3-207:~$ docker logs backend
Debugger listening on ws://127.0.0.1:9229/1c80f685-86da-430c-b892-c7bd39e7240c
For help see https://nodejs.org/en/docs/inspector
App listening on port 9000
Press Ctrl+C to quit.
connected to mongodb://mongodb:27017/guestbook
        
ubuntu@ip-172-26-3-207:~$ docker run -d -p 3000:9000 -e PORT=9000 -e GUESTBOOK_API_ADDR=backend:9000 --network=app-network subicura/guestbook-frontend:latest
Unable to find image 'subicura/guestbook-frontend:latest' locally
latest: Pulling from subicura/guestbook-frontend
e79bb959ec00: Already exists 
d4b7902036fe: Already exists 
1b2a72d4e030: Already exists 
d54db43011fd: Already exists 
69d473365bb3: Already exists 
6e2490ee2dc8: Already exists 
24bcfd3d8296: Already exists 
4c485b32137c: Already exists 
44059a7f00c1: Pull complete 
cd480d0dfe0e: Pull complete 
082172b2c563: Pull complete 
4a9927cdb901: Pull complete 
Digest: sha256:e0a778a054999e57834e22484348b04b9381b5a8eee32f0c1c102b42d0243dad
Status: Downloaded newer image for subicura/guestbook-frontend:latest
9893712609b49a370fccb826c39fb3aa8aed43cc78fdfcb4c22c982dcdc80014

# 웹브라우저를 열고 [Lightsail VM ip address]:3000 에 접속했을때 방명록 화면이 뜨면 정상적으로 띄운것이다.

# 방명록에 임의의 이름과 메세지를 입력해서 포스팅했을때 정상적으로 실행되면 완료가 된 것이다.
# 프론트엔드 --> 백엔드--> 몽고디비에 데이터 저장하는 과정이 이루어진 것이다.


# 아래와 같이 명령어를 입력해서 실습한 리소스를 정리한다.

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE                                COMMAND                  CREATED          STATUS          PORTS                    NAMES
9893712609b4   subicura/guestbook-frontend:latest   "node --inspect=9229…"   3 minutes ago    Up 3 minutes    0.0.0.0:3000->9000/tcp   gracious_khayyam
d5aadde15688   subicura/guestbook-backend:latest    "node --inspect=9229…"   12 minutes ago   Up 12 minutes                            backend
47c574fb75c5   mongo:4                              "docker-entrypoint.s…"   27 minutes ago   Up 27 minutes   27017/tcp                mongodb
69052fa9ab97   wordpress                            "docker-entrypoint.s…"   36 minutes ago   Up 36 minutes   0.0.0.0:8888->80/tcp     interesting_rubin
134d11ec4a09   mysql:5.7                            "docker-entrypoint.s…"   45 minutes ago   Up 45 minutes   3306/tcp, 33060/tcp      mysql

ubuntu@ip-172-26-3-207:~$ docker stop 9893712609b4 d5aadde15688 47c574fb75c5 69052fa9ab97 134d11ec4a09
9893712609b4
d5aadde15688
47c574fb75c5
69052fa9ab97
134d11ec4a09

ubuntu@ip-172-26-3-207:~$ docker ps -a
CONTAINER ID   IMAGE                                COMMAND                  CREATED          STATUS                        PORTS     NAMES
9893712609b4   subicura/guestbook-frontend:latest   "node --inspect=9229…"   4 minutes ago    Exited (137) 11 seconds ago             gracious_khayyam
d5aadde15688   subicura/guestbook-backend:latest    "node --inspect=9229…"   13 minutes ago   Exited (1) 21 seconds ago               backend
47c574fb75c5   mongo:4                              "docker-entrypoint.s…"   28 minutes ago   Exited (0) 21 seconds ago               mongodb
69052fa9ab97   wordpress                            "docker-entrypoint.s…"   37 minutes ago   Exited (0) 20 seconds ago               interesting_rubin
134d11ec4a09   mysql:5.7                            "docker-entrypoint.s…"   46 minutes ago   Exited (0) 20 seconds ago               mysql

ubuntu@ip-172-26-3-207:~$ docker rm 9893712609b4 d5aadde15688 47c574fb75c5 69052fa9ab97 134d11ec4a09
9893712609b4
d5aadde15688
47c574fb75c5
69052fa9ab97
134d11ec4a09

ubuntu@ip-172-26-3-207:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ubuntu@ip-172-26-3-207:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ubuntu@ip-172-26-3-207:~$ docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Networks:
app-network

Deleted Images:
untagged: subicura/guestbook-frontend:latest
untagged: subicura/guestbook-frontend@sha256:e0a778a054999e57834e22484348b04b9381b5a8eee32f0c1c102b42d0243dad
deleted: sha256:c1bbc17fc61cf67f1663fae62ef2f1f93d880b945ed9064998db5ff1614f7c90
deleted: sha256:418cb485e2a2ceed74107ce14ead9b6a708e09fbd8bffdccdd57e89ef487a413
deleted: sha256:89e58d91c48abead663f8390e401546c581b4b96f9aa18793c4e032992a64859
deleted: sha256:9913732ece18a7e128032d78f448c2af5bf131ba2d687ee7eed09619b04305b4
deleted: sha256:e1a64cdb46c4e55efdaa721ab6d41336412176e68117e7faf8c0fbe43ec4f17b
untagged: ubuntu:18.04
untagged: ubuntu@sha256:fd25e706f3dea2a5ff705dbc3353cf37f08307798f3e360a13e9385840f73fb3
deleted: sha256:2c047404e52d7f17bdac4121a13cd844447b74e13063f8cb8f8b314467feed06
untagged: subicura/docker-workshop-app:1
untagged: subicura/docker-workshop-app@sha256:9011ff9a4c05f22aa2e5dcf7aabf5531264735db396b415ff0ee1a0709e25679
deleted: sha256:41088672acf85c301bcfd4851fe6e4f12a408afc431e5475cf61750d03491434
deleted: sha256:3f554ae7abc2f5e7225b5822f138bd69d7d1c7d5b6d0df1c87d45675f86b820c
deleted: sha256:dfef5a15313583dbd128bbee5de052f5d21d5f0ec3695cd1331b770d44d511c9
deleted: sha256:3f9b409f79ea31a160797805f5ebccfb51f0dae12e599638c2f14792d9cdba2a
deleted: sha256:22fa0697fce41cd96a453d41a00c331de867bf944af7b485b35e35d3725ca7d9
deleted: sha256:e4e8a9e4b748648b15f9b158c21e5dbfb391e654a3d1d6b69efc924c39908578
deleted: sha256:ff9c35ea8657249a70c7a37914ed3a46e4612fc10dfca58ca5378797157ed7b6
deleted: sha256:ff8e382312220b0fa2f4aa58efbf898737d07474f9baf8d0ce9b7885f36b1337
deleted: sha256:4bcdffd70da292293d059d2435c7056711fab2655f8b74f48ad0abe042b63687
untagged: mysql:5.7
untagged: mysql@sha256:8e2004f9fe43df06c3030090f593021a5f283d028b5ed5765cc24236c2c4d88e
deleted: sha256:ae0658fdbad5fb1c9413c998d8a573eeb5d16713463992005029c591e6400d02
deleted: sha256:a2cf831f4221764f4484ff0df961b54f1f949ed78220de1b24046843c55ac40f
deleted: sha256:0a7adcc95a91b1ec2beab283e0bfce5ccd6df590bd5a5e894954fcf27571e7f5
deleted: sha256:0fae465cbacf7c99aa90bc286689bc88a35d086f37fd931e03966d312d5dfb10
deleted: sha256:23af125b9e54a94c064bdfacc2414b1c8fba288aff48308e8117beb08b38cb19
deleted: sha256:c37f414ac8d2b5e5d39f159a6dffd30b279c1268f30186cee5da721e451726ea
deleted: sha256:955b3c214bccf3ee2a7930768137fd7ed6a72677334be67a07c78a622abd318a
deleted: sha256:a2e35a0fdb20100365e2fb26c65357fcf926ac7990bf9074a51cbac5a8358d7e
deleted: sha256:8c3a028fc66f360ce6ce6c206786df68fac4c24257474cbe4f67eda0ac21efd6
deleted: sha256:0a6d37fabaceb4faa555e729a7d97cb6ee193cb97789a213907a3d3c156d7e35
deleted: sha256:579519c51de1afe1e29d284b1741af239a307975197cf6ce213a70068d923231
untagged: wordpress:latest
untagged: wordpress@sha256:cf7c7a9c9cc8614a7357dac77d401612c67af5e0ab1ab19e0777f643af3d3a3c
deleted: sha256:0d35c2300ec845fda141ba012f7c6dccde8f0ae106b8f4bb0fcfced69380f851
deleted: sha256:b969cf2c7820b629d76cdc264f6395dafe276ccddd31ec033a52989edfcb4356
deleted: sha256:ca96a0c44c9cc762ddd3b3e4e72e6b1a3fc5410d4657ea96217ad279c45b4f23
deleted: sha256:ce5d66cbb963d070cbedc02a9854e890cb84f3abad557628c8607f7eb433da47
deleted: sha256:574360fba72711e185cf4429cb852c150c8622918ac11c23a7b991de5c15b5ea
deleted: sha256:44f556f1c780ea3ea5abaf64e8532ef8cb86b7f9f180c492a5709a22ff40f1d1
deleted: sha256:38278c320f58f84e9d735913b8df94bc721319a96a94e371ea51cfd100f948c9
deleted: sha256:8384e46120409b73d427350cba0c0cc498864c16d8e0a5309376ca1102b8ac99
deleted: sha256:09beb325b8b08a2e4517004078bcba28c7bf29d27e94ddb04ca8014fc9d938ea
deleted: sha256:fe43a86709c490edf6c56d804186593abd814cff5281b5f0723a87b5eef7445f
deleted: sha256:c9e38422e5e903ab776c84ab8d078692f38af4c4027a8e33f2fb9e4f4b2eace9
deleted: sha256:28ef549251b2a6dd7041df9040c6497bc07146765ef35d8f3645bd79dd5ded26
deleted: sha256:d594810b22588c9260090c93c60a444aad979e943f97bb4fc1e5e433155a21d9
deleted: sha256:ecda38569efad5cf058d38b8b6b507d106359d70d2d9a9b3d6e156960700c562
deleted: sha256:a53351b3d8534680510cb56bea51616b816543e3e6703767650f5d8537e4cd54
deleted: sha256:2028564269625744edf5f6e7a494ba6afb638af873a5cc6d534ff823b742e61b
deleted: sha256:3daa2d2676da8a86388f19d260411b33b8c61692f62537fcf90a22d95091f9db
deleted: sha256:0b56969bdaa969858af7104191f73f19696f097339b289dbaf10c9ee1eb9ed96
deleted: sha256:185f02cab589b63a3a422a5d8488fcf39fb6f439726b1e4d97b7855ea915fc27
deleted: sha256:7f570f9b4ac5ab1cde38edd1f50c0d9b9abc05b8bad5d89bbef90a8dc849bd00
deleted: sha256:f5600c6330da7bb112776ba067a32a9c20842d6ecc8ee3289f1a713b644092f8
untagged: mongo:4
untagged: mongo@sha256:00878f3d8e0a61997f2ea67351934b815a77c5ff8985df3ec041bca1c88258f4
deleted: sha256:60930105324282947c57d98729be68394062249ab347e4afc78e0cab9777a4eb
deleted: sha256:d3c340b9fb3756edbf106bc38081447ee3a362ec2cef54d2cb9496310d211f55
deleted: sha256:df411d930f08ff19c01fff7498a7c161ffe353027d1ee0be99aef4150ef2f237
deleted: sha256:9da06454ee6eff2960465ba510f4180810bd95d22caa65d958923aeccaa12a12
deleted: sha256:4fc8092849352849654c290a66285e0b989f01e73a95f869a8ee9bb2eadaebf6
deleted: sha256:4545ce32b03c37edb33aedeac6ad411047ed6dd94650697e2465db1a86507f93
deleted: sha256:9abb615f3c3c97191bf206d3228b5bd0978e370394e71984a0d183efb0e0bd9c
deleted: sha256:eb6c9f1a2a53c149123b96a258dcd25c29b0b8c1709b8a326bc6b9ebaa43dec8
deleted: sha256:1acc9a7abd496942e1469e91d2f7d2b7d9e0c696f2b392ef1e85d2eaef91e96b
deleted: sha256:2589aa72cefbcd28ecbf0798bf2ca438af965daedbbb434e8f92d4bb2d689831
deleted: sha256:9459b6a89846db0723e467610b841e6833dbb2aae6133319a91f2f70c388afac
deleted: sha256:9a9311f7fcddf94f7476ce89f9703e8360e8cf347ef486a280735f5cf98888cd
deleted: sha256:b43408d5f11b7b2faf048ae4eb25c296536c571fb2f937b4f1c3883386e93d64
untagged: subicura/guestbook-backend:latest
untagged: subicura/guestbook-backend@sha256:96c1a11d8fe976ef10749de2269681c433b0491fe8284e689cff909d6ad2e43a
deleted: sha256:ae7b58ae92c38d6f0df1247dd706f590211064023948d4670c6dc72476d6d602
deleted: sha256:c683a06cb0f85dc2b8d2c538a96e236f046df8dfd449521e0f8d4390dafae37a
deleted: sha256:3680f87f748185c0fbdbe706a2e48013b21594a17b51e1003352451ef3b631c8
deleted: sha256:1c3212a5c82b75fbefb8fabe18432eaa1cddb01c4e0c04a9c5e124e939f5ba2b
deleted: sha256:1229ec4bca5aed69add063bd117ae3bfdad735105d1a778304a2a23da7ee0e4c
deleted: sha256:cd80f0845152c657678ceefe14b5a2fb56fe15dd04c9fd1a6bcfe9f2fa177e07
deleted: sha256:16727c81965747f73813ffc6111a18d12fd7a35231232cdefba1e755d5998900
deleted: sha256:20f9d797572b67b18de9a32ea4b3048ff9a1b219cbb5321fd565745dbf9e203c
deleted: sha256:09798890afdc89e906b235b5eb538dd1c03e3a86ce799371ce5d2f7fb6a34951
deleted: sha256:cfac9ecfbc0042ad5d839aff41adba39d65684c7e15af9f66d237dc03d1fd60b
deleted: sha256:f352c02ab6c1704fd1cac057d122c71ab8d059dcbf433068ad7c88c6d7771a43
deleted: sha256:b9c3b217e735278337071985f35849d0864facfcc5d01884910980b895e03f77
deleted: sha256:fbb641a8b94349e89886f65d79928e4673530e2a2b4d33c2c95e0426713f78e4

Total reclaimed space: 2.645GB
ubuntu@ip-172-26-3-207:~$ 
  • docker-compose 실습

wordpress와 mysql이라는 이름으로 도커 컨테이너 서비스를 띄우겠다는 것이고, 아래와 같이 mysql의 environment를 설정해주면 위에서처럼 mysql에 접속해서 데이터베이스 만들고 이러는 과정이 필요가 없다. 그리고 docker-compose는 여러 서비스들을 같이 만들경우 자체적으로 네트워크를 만들기 때문에 굳이 네트워크를 생성하고 그 네트워크에 속하라는 설정을 안해줘도 된다.

mysql이 뜨기전에 wordpress가 뜨면 mysql이 없다고해서 wordpress가 죽게되는데 아래와 같이 restart: always 명령어를 넣어주면 mysql이 살아있을때까지 리스타트를 계속해서 wordpress를 생성해주게 된다.

~/project/guide-02/wordpress/docker-compse.yml 코드

version: '3'
services:
  wordpress:
    image: wordpress
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_NAME: wp
      WORDPRESS_DB_USER: wp
      WORDPRESS_DB_PASSWORD: wp
    ports:
      - "8888:80"
    restart: always
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: wp
      MYSQL_DATABASE: wp
      MYSQL_USER: wp
      MYSQL_PASSWORD: wp

코드를 위와같이 작성하고 아래와 같이 명령어를 실행한다.

ubuntu@ip-172-26-3-207:~/project/guide-02/wordpress$ docker-compose up -d
wordpress_mysql_1 is up-to-date
Recreating wordpress_wordpress_1 ... done

# 위의 yml을 docker-compose하고, 현재 디렉토리에 있는 yml을 기준으로 해서 상태를 확인할 수 있다.
ubuntu@ip-172-26-3-207:~/project/guide-02/wordpress$ docker-compose ps
        Name                       Command               State          Ports        
-------------------------------------------------------------------------------------
wordpress_mysql_1       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp 
wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8888->80/tcp
    

# 웹브라우저를 열고 [Lightsail VM ip address]:8888 에 접속했을때 워드프레스 화면이 뜨면 정상적으로 구동이 된 것임
    
    
# 아래와 같은 명령어로 로그도 확인할 수 있다.
ubuntu@ip-172-26-3-207:~/project/guide-02/wordpress$ docker-compose logs -f
Attaching to wordpress_wordpress_1, wordpress_mysql_1
wordpress_1  | WordPress not found in /var/www/html - copying now...
wordpress_1  | Complete! WordPress has been successfully copied to /var/www/html
wordpress_1  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.20.0.3. Set the 'ServerName' directive globally to suppress this message
        
...

# 아래와 같이 종료하면서 제거도 할 수 있다.
ubuntu@ip-172-26-3-207:~/project/guide-02/wordpress$ docker-compose down
Stopping wordpress_wordpress_1 ... done
Stopping wordpress_mysql_1     ... done
Removing wordpress_wordpress_1 ... done
Removing wordpress_mysql_1     ... done
Removing network wordpress_default

ubuntu@ip-172-26-3-207:~/project/guide-02/wordpress$ docker-compose ps
Name   Command   State   Ports
------------------------------

위에서 실습했던 방명록을 구현하는 것을 docker-compose로 해서 띄워보자

~/project/guide-02/guestbook/docker-compose.yml

version: '3'
services:
  frontend:
    image: subicura/guestbook-frontend:latest
    environment:
      PORT: 8888
      GUESTBOOK_API_ADDR: backend:8888
    ports:
      - "3000:8888"
    restart: always
  backend:
    image: subicura/guestbook-backend:latest
    environment:
      PORT: 8888
      GUESTBOOK_DB_ADDR: mongodb:27017
    ports:
      - "8888:80"
    restart: always
  mongodb:
    image: mongo:4

코드를 위와같이 작성하고 아래와 같이 명령어를 실행한다.

ubuntu@ip-172-26-3-207:~/project/guide-02/guestbook$ docker-compose ps
        Name                     Command             State           Ports         
-----------------------------------------------------------------------------------
guestbook_backend_1    node --inspect=9229 app.js    Up      0.0.0.0:8888->80/tcp  
guestbook_frontend_1   node --inspect=9229 app.js    Up      0.0.0.0:3000->8888/tcp
guestbook_mongodb_1    docker-entrypoint.sh mongod   Up      27017/tcp

# 웹브라우저를 열고 [Lightsail VM ip address]:3000 에 접속했을때 방명록 화면이 뜨면 정상적으로 띄운것이다.


# 실습이 다 되었으면 아래와 같이 띄운 것들을 전부 제거해준다.
ubuntu@ip-172-26-3-207:~/project/guide-02/guestbook$ docker-compose down
Stopping guestbook_frontend_1 ... done
Stopping guestbook_backend_1  ... done
Stopping guestbook_mongodb_1  ... done
Removing guestbook_frontend_1 ... done
Removing guestbook_backend_1  ... done
Removing guestbook_mongodb_1  ... done
Removing network guestbook_default

ubuntu@ip-172-26-3-207:~/project/guide-02/guestbook$ docker-compose ps
Name   Command   State   Ports
------------------------------

ubuntu@ip-172-26-3-207:~/project/guide-02/guestbook$ docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: wordpress:latest
untagged: wordpress@sha256:cf7c7a9c9cc8614a7357dac77d401612c67af5e0ab1ab19e0777f643af3d3a3c
deleted: sha256:0d35c2300ec845fda141ba012f7c6dccde8f0ae106b8f4bb0fcfced69380f851
deleted: sha256:b969cf2c7820b629d76cdc264f6395dafe276ccddd31ec033a52989edfcb4356
deleted: sha256:ca96a0c44c9cc762ddd3b3e4e72e6b1a3fc5410d4657ea96217ad279c45b4f23
deleted: sha256:ce5d66cbb963d070cbedc02a9854e890cb84f3abad557628c8607f7eb433da47
deleted: sha256:574360fba72711e185cf4429cb852c150c8622918ac11c23a7b991de5c15b5ea
deleted: sha256:44f556f1c780ea3ea5abaf64e8532ef8cb86b7f9f180c492a5709a22ff40f1d1
deleted: sha256:38278c320f58f84e9d735913b8df94bc721319a96a94e371ea51cfd100f948c9
deleted: sha256:8384e46120409b73d427350cba0c0cc498864c16d8e0a5309376ca1102b8ac99
deleted: sha256:09beb325b8b08a2e4517004078bcba28c7bf29d27e94ddb04ca8014fc9d938ea
deleted: sha256:fe43a86709c490edf6c56d804186593abd814cff5281b5f0723a87b5eef7445f
deleted: sha256:c9e38422e5e903ab776c84ab8d078692f38af4c4027a8e33f2fb9e4f4b2eace9
deleted: sha256:28ef549251b2a6dd7041df9040c6497bc07146765ef35d8f3645bd79dd5ded26
deleted: sha256:d594810b22588c9260090c93c60a444aad979e943f97bb4fc1e5e433155a21d9
deleted: sha256:ecda38569efad5cf058d38b8b6b507d106359d70d2d9a9b3d6e156960700c562
deleted: sha256:a53351b3d8534680510cb56bea51616b816543e3e6703767650f5d8537e4cd54
deleted: sha256:2028564269625744edf5f6e7a494ba6afb638af873a5cc6d534ff823b742e61b
deleted: sha256:3daa2d2676da8a86388f19d260411b33b8c61692f62537fcf90a22d95091f9db
deleted: sha256:0b56969bdaa969858af7104191f73f19696f097339b289dbaf10c9ee1eb9ed96
deleted: sha256:185f02cab589b63a3a422a5d8488fcf39fb6f439726b1e4d97b7855ea915fc27
deleted: sha256:7f570f9b4ac5ab1cde38edd1f50c0d9b9abc05b8bad5d89bbef90a8dc849bd00
untagged: mysql:5.7
untagged: mysql@sha256:8e2004f9fe43df06c3030090f593021a5f283d028b5ed5765cc24236c2c4d88e
deleted: sha256:ae0658fdbad5fb1c9413c998d8a573eeb5d16713463992005029c591e6400d02
deleted: sha256:a2cf831f4221764f4484ff0df961b54f1f949ed78220de1b24046843c55ac40f
deleted: sha256:0a7adcc95a91b1ec2beab283e0bfce5ccd6df590bd5a5e894954fcf27571e7f5
deleted: sha256:0fae465cbacf7c99aa90bc286689bc88a35d086f37fd931e03966d312d5dfb10
deleted: sha256:23af125b9e54a94c064bdfacc2414b1c8fba288aff48308e8117beb08b38cb19
deleted: sha256:c37f414ac8d2b5e5d39f159a6dffd30b279c1268f30186cee5da721e451726ea
deleted: sha256:955b3c214bccf3ee2a7930768137fd7ed6a72677334be67a07c78a622abd318a
deleted: sha256:a2e35a0fdb20100365e2fb26c65357fcf926ac7990bf9074a51cbac5a8358d7e
deleted: sha256:8c3a028fc66f360ce6ce6c206786df68fac4c24257474cbe4f67eda0ac21efd6
deleted: sha256:0a6d37fabaceb4faa555e729a7d97cb6ee193cb97789a213907a3d3c156d7e35
deleted: sha256:579519c51de1afe1e29d284b1741af239a307975197cf6ce213a70068d923231
deleted: sha256:f5600c6330da7bb112776ba067a32a9c20842d6ecc8ee3289f1a713b644092f8
untagged: subicura/guestbook-frontend:latest
untagged: subicura/guestbook-frontend@sha256:e0a778a054999e57834e22484348b04b9381b5a8eee32f0c1c102b42d0243dad
deleted: sha256:c1bbc17fc61cf67f1663fae62ef2f1f93d880b945ed9064998db5ff1614f7c90
deleted: sha256:418cb485e2a2ceed74107ce14ead9b6a708e09fbd8bffdccdd57e89ef487a413
deleted: sha256:89e58d91c48abead663f8390e401546c581b4b96f9aa18793c4e032992a64859
deleted: sha256:9913732ece18a7e128032d78f448c2af5bf131ba2d687ee7eed09619b04305b4
deleted: sha256:e1a64cdb46c4e55efdaa721ab6d41336412176e68117e7faf8c0fbe43ec4f17b
untagged: subicura/guestbook-backend:latest
untagged: subicura/guestbook-backend@sha256:96c1a11d8fe976ef10749de2269681c433b0491fe8284e689cff909d6ad2e43a
deleted: sha256:ae7b58ae92c38d6f0df1247dd706f590211064023948d4670c6dc72476d6d602
deleted: sha256:c683a06cb0f85dc2b8d2c538a96e236f046df8dfd449521e0f8d4390dafae37a
deleted: sha256:3680f87f748185c0fbdbe706a2e48013b21594a17b51e1003352451ef3b631c8
deleted: sha256:1c3212a5c82b75fbefb8fabe18432eaa1cddb01c4e0c04a9c5e124e939f5ba2b
deleted: sha256:1229ec4bca5aed69add063bd117ae3bfdad735105d1a778304a2a23da7ee0e4c
deleted: sha256:cd80f0845152c657678ceefe14b5a2fb56fe15dd04c9fd1a6bcfe9f2fa177e07
deleted: sha256:16727c81965747f73813ffc6111a18d12fd7a35231232cdefba1e755d5998900
deleted: sha256:20f9d797572b67b18de9a32ea4b3048ff9a1b219cbb5321fd565745dbf9e203c
deleted: sha256:09798890afdc89e906b235b5eb538dd1c03e3a86ce799371ce5d2f7fb6a34951
deleted: sha256:cfac9ecfbc0042ad5d839aff41adba39d65684c7e15af9f66d237dc03d1fd60b
deleted: sha256:f352c02ab6c1704fd1cac057d122c71ab8d059dcbf433068ad7c88c6d7771a43
deleted: sha256:b9c3b217e735278337071985f35849d0864facfcc5d01884910980b895e03f77
deleted: sha256:fbb641a8b94349e89886f65d79928e4673530e2a2b4d33c2c95e0426713f78e4
untagged: mongo:4
untagged: mongo@sha256:00878f3d8e0a61997f2ea67351934b815a77c5ff8985df3ec041bca1c88258f4
deleted: sha256:60930105324282947c57d98729be68394062249ab347e4afc78e0cab9777a4eb
deleted: sha256:d3c340b9fb3756edbf106bc38081447ee3a362ec2cef54d2cb9496310d211f55
deleted: sha256:df411d930f08ff19c01fff7498a7c161ffe353027d1ee0be99aef4150ef2f237
deleted: sha256:9da06454ee6eff2960465ba510f4180810bd95d22caa65d958923aeccaa12a12
deleted: sha256:4fc8092849352849654c290a66285e0b989f01e73a95f869a8ee9bb2eadaebf6
deleted: sha256:4545ce32b03c37edb33aedeac6ad411047ed6dd94650697e2465db1a86507f93
deleted: sha256:9abb615f3c3c97191bf206d3228b5bd0978e370394e71984a0d183efb0e0bd9c
deleted: sha256:eb6c9f1a2a53c149123b96a258dcd25c29b0b8c1709b8a326bc6b9ebaa43dec8
deleted: sha256:1acc9a7abd496942e1469e91d2f7d2b7d9e0c696f2b392ef1e85d2eaef91e96b
deleted: sha256:2589aa72cefbcd28ecbf0798bf2ca438af965daedbbb434e8f92d4bb2d689831
deleted: sha256:9459b6a89846db0723e467610b841e6833dbb2aae6133319a91f2f70c388afac
deleted: sha256:9a9311f7fcddf94f7476ce89f9703e8360e8cf347ef486a280735f5cf98888cd
deleted: sha256:b43408d5f11b7b2faf048ae4eb25c296536c571fb2f937b4f1c3883386e93d64

Total reclaimed space: 2.346GB
    

# 아래 명령어들을 실행하여 깔끔하게 다 지워졌는지 확인한다.
ubuntu@ip-172-26-3-207:~/project/guide-02/guestbook$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ubuntu@ip-172-26-3-207:~/project/guide-02/guestbook$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ubuntu@ip-172-26-3-207:~/project/guide-02/guestbook$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE