수업에서 쓰는 ubuntu는 20.04버전 링크 보고 설치하라는 대로 하면 됨
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
root@ubuntu:~# curl -ssL <https://get.docker.com/> | bash
공식 문서에서 명령어 치라는 대로 쳐도 되고 script 파일로 해도 됨
root@ubuntu:~# docker --version
root@ubuntu:~# docker --version
Docker version 20.10.21, build baeda1f
설치 확인
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 ㄱㄱ
root@ubuntu:~# docker ps
root@ubuntu:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
보통 container에서 빠져나오면 stop 상태가 된다.
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도 마찬가지. 따로 붙이지 않으면 랜덤으로 생성된다.
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
는 아묻따 지우는 옵션
root@ubuntu:~# docker run --name test -d httpd
root@ubuntu:~# docker run --name test -d httpd
a68b32d30d78fd5d0209b8772fc26e8e28e059a30b16a2fbd938d00deb0c8095
--name
이름 설정
-d
는 background로 동작시키는 옵션
:latest
image마다 붙는 tag
version 정보로 보면 된다
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도 어떤 네트워크 공간이 있고, 그 공간에 속한다.
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를 봐야 한다.
root@ubuntu:~# docker network inspect bridge
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 주소 확인
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 주소
즉 다음과 같은 형태다.
root@ubuntu:~# curl 172.17.0.2
root@ubuntu:~# curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>
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를 구동하기 위한 것들만 포함하기 때문에 용량도 크지 않고 실행 가능한 명령어도 많지 않다.
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
-f
실행 중인 conatiner는 삭제가 안 되므로 이 옵션을 붙인다.
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가 새로 생성된다.
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.