1. **https://docs.docker.com/engine/install/ubuntu/**

  2. 수업에서 쓰는 ubuntu는 20.04버전 링크 보고 설치하라는 대로 하면 됨

  3. root@ubuntu:~# sudo apt-get update

    Hit:1 <http://kr.archive.ubuntu.com/ubuntu> focal InRelease
    Hit:2 <http://kr.archive.ubuntu.com/ubuntu> focal-updates InRelease
    Hit:3 <http://kr.archive.ubuntu.com/ubuntu> focal-backports InRelease
    Hit:4 <http://kr.archive.ubuntu.com/ubuntu> focal-security InRelease
    Reading package lists... Done
    
  4. root@ubuntu:~# curl -ssL <https://get.docker.com/> | bash

    공식 문서에서 명령어 치라는 대로 쳐도 되고 script 파일로 해도 됨

  5. root@ubuntu:~# docker --version

    root@ubuntu:~# docker --version
    Docker version 20.10.21, build baeda1f
    

    설치 확인

  6. root@ubuntu:~# docker run httpd

    root@ubuntu:~# docker run httpd
    Unable to find image 'httpd:latest' locally
    latest: Pulling from library/httpd
    a603fa5e3b41: Pull complete 
    4691bd33efec: Pull complete 
    ff7b0b8c417a: Pull complete 
    9df1012343c7: Pull complete 
    b1c114085b25: Pull complete 
    Digest: sha256:f2e89def4c032b02c83e162c1819ccfcbd4ea6bdbc5ff784bbc68cba940a9046
    Status: Downloaded newer image for httpd:latest
    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
    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
    [Mon Dec 05 01:23:18.409322 2022] [mpm_event:notice] [pid 1:tid 139910831910208] AH00489: Apache/2.4.54 (Unix) configured -- resuming normal operations
    [Mon Dec 05 01:23:18.409516 2022] [core:notice] [pid 1:tid 139910831910208] AH00094: Command line: 'httpd -D FOREGROUND'
    

    run은 pull 후 실행까지 하게 하는 명령어. 즉 httpd라는 image를 기반으로 container를 실행한다는 의미다.

    지금 container가 동작 중이기 때문에 명령어 입력이 불가능하다. 그냥 Ctrl+C ㄱㄱ

  7. root@ubuntu:~# docker ps

    root@ubuntu:~# docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    

    보통 container에서 빠져나오면 stop 상태가 된다.

  8. root@ubuntu:~# docker ps -a

    root@ubuntu:~# docker ps -a
    CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS                      PORTS     NAMES
    f1584fd051ad   httpd     "httpd-foreground"   8 minutes ago   Exited (0) 33 seconds ago             quirky_proskuriakova
    

    container를 실행하면 CONTAINER ID라는 고유값이 생성된다. 즉 container를 특정할 수 있다.

    NAMES도 마찬가지. 따로 붙이지 않으면 랜덤으로 생성된다.

  9. root@ubuntu:~# docker rm -f f1584fd051ad root@ubuntu:~# docker container ps -a

    root@ubuntu:~# docker rm -f f1584fd051ad
    f1584fd051ad
    root@ubuntu:~# docker container ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    

    삭제됨

    -f는 아묻따 지우는 옵션

  10. root@ubuntu:~# docker run --name test -d httpd

    root@ubuntu:~# docker run --name test -d httpd
    a68b32d30d78fd5d0209b8772fc26e8e28e059a30b16a2fbd938d00deb0c8095
    
  11. root@ubuntu:~# docker ps

    root@ubuntu:~# docker ps
    CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
    a68b32d30d78   httpd     "httpd-foreground"   32 seconds ago   Up 31 seconds   80/tcp    test
    

    예아

    VM 하나 띄운 것과 비슷한 상태다. → container도 어떤 네트워크 공간이 있고, 그 공간에 속한다.

  12. root@ubuntu:~# docker network ls

    root@ubuntu:~# docker network ls
    NETWORK ID     NAME      DRIVER    SCOPE
    e17e10bea72e   bridge    bridge    local
    e7d368ac9ba7   host      host      local
    2e7e0f9b2738   none      null      local
    

    bridge가 NAT대역(211.183.3.0/24)에 해당하고, host가 VM에서의 Bridged에 해당한다.

    NAME보다는 유심히 DRIVER를 봐야 한다.

  13. root@ubuntu:~# docker network inspect bridge

  14. root@ubuntu:~# ip add

    root@ubuntu:~# ip add
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 00:0c:29:1c:5c:df brd ff:ff:ff:ff:ff:ff
        inet 211.183.3.100/24 brd 211.183.3.255 scope global ens32
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe1c:5cdf/64 scope link 
           valid_lft forever preferred_lft forever
    3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:9a:e8:7f:c5 brd ff:ff:ff:ff:ff:ff
        inet **172.17.0.1/16** brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:9aff:fee8:7fc5/64 scope link 
           valid_lft forever preferred_lft forever
    7: vethf087c8e@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
        link/ether 2e:96:48:fc:64:8a brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet6 fe80::2c96:48ff:fefc:648a/64 scope link 
           valid_lft forever preferred_lft forever
    

    container의 IP 주소 확인

  15. root@ubuntu:~# docker container inspect test

    "Gateway": "172.17.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:11:00:02",
    

    이 부분이 test에 할당된 IP 주소

    즉 다음과 같은 형태다.

    Diagram.png

  16. root@ubuntu:~# curl 172.17.0.2

    root@ubuntu:~# curl 172.17.0.2
    <html><body><h1>It works!</h1></body></html>
    
  17. root@ubuntu:~# docker image ls

    root@ubuntu:~# docker image ls
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    httpd        latest    8653efc8c72d   2 weeks ago   145MB
    

    현재 test container는 httpd를 구동하기 위한 것들만 포함하기 때문에 용량도 크지 않고 실행 가능한 명령어도 많지 않다.

  18. root@ubuntu:~# docker rm -f test root@ubuntu:~# docker ps -a

    root@ubuntu:~# docker rm -f test
    test
    root@ubuntu:~# docker ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    
  19. root@ubuntu:~# docker image ls root@ubuntu:~# docker image tag httpd:latest web:latest root@ubuntu:~# docker image ls

    root@ubuntu:~# docker image ls
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    httpd        latest    8653efc8c72d   2 weeks ago   145MB
    root@ubuntu:~# docker image tag httpd:latest web:latest
    root@ubuntu:~# docker image ls
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    httpd        latest    8653efc8c72d   2 weeks ago   145MB
    web          latest    8653efc8c72d   2 weeks ago   145MB
    

    이름만 바꾼 거고 같은 container이므로 두 개가 뜨지만 IMAGE ID는 같다.

    변경사항이 발생했으므로 해당 layer는 새로 생성되고 나머지 layer는 공유될 것이다. 여기서는 index 파일에 관한 layer가 새로 생성된다.

  20. root@ubuntu:~# docker search nginx

    root@ubuntu:~# docker search nginx
    NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    nginx                                             Official build of Nginx.                        17780     [OK]       
    linuxserver/nginx                                 An Nginx container, brought to you by LinuxS…   182                  
    bitnami/nginx                                     Bitnami nginx Docker Image                      146                  [OK]
    ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   69                   
    bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   22                   [OK]
    rancher/nginx-ingress-controller                                                                  11                   
    kasmweb/nginx                                     An Nginx image based off nginx:alpine and in…   4                    
    ibmcom/nginx-ingress-controller                   Docker Image for IBM Cloud Private-CE (Commu…   4                    
    bitnami/nginx-exporter                                                                            3                    
    bitnami/nginx-ldap-auth-daemon                                                                    3                    
    rancher/nginx                                                                                     2                    
    circleci/nginx                                    This image is for internal use                  2                    
    rancher/nginx-ingress-controller-defaultbackend                                                   2                    
    rapidfort/nginx                                   RapidFort optimized, hardened image for NGINX   2                    
    vmware/nginx                                                                                      2                    
    bitnami/nginx-intel                                                                               1                    
    wallarm/nginx-ingress-controller                  Kubernetes Ingress Controller with Wallarm e…   1                    
    vmware/nginx-photon                                                                               1                    
    ibmcom/nginx-ppc64le                              Docker image for nginx-ppc64le                  0                    
    rancher/nginx-conf                                                                                0                    
    rapidfort/nginx-ib                                RapidFort optimized, hardened image for NGIN…   0                    
    rancher/nginx-ssl                                                                                 0                    
    ibmcom/nginx-ingress-controller-ppc64le           Docker Image for IBM Cloud Private-CE (Commu…   0                    
    rapidfort/nginx-official                          RapidFort optimized, hardened image for NGIN…   0                    
    continuumio/nginx-ingress-ws                                                                      0
    

    Docker hub에서 nginx를 검색한다. Docker hub는 image 저장소.

    보통 맨 위에 official image가 있다. 나머지는 사용자들이 만든 image.