앞서서는 컨테이너에 대한 기본 개념에 대해 알아봤다.
그렇다면 컨테이너 이미지와 컨테이너는 어떻게 다를까?
컨테이너와 컨테이너 이미지의 차이
각 컨테이너는 user id도, 네트워크도, cpu, 메모리 등의 설정이 모두 다르게 설정할 수 있고, 완전히 독립적이기 때문에 서로에 영향을 주지 않고 각자 수정 및 배포할 수 있다.
컨테이너는 하나의 Application 프로세스로 여러 컨테이너를 동시에 실행시켜도 각자 독립적이기 때문에 서로의 application 동작에 영향을 주지 않는다.
docker host 측에서는 각 컨테이너가 단순히 프로세스처럼 동작하는 데 반면, 우리에게는 독립적인 애플리케이션이다.
그러면 docker host는?
docker daemon이 동작되고 있는 linux kernel이 있는 시스템으로 즉, docker가 컨테이너가 실행될 수 있는 환경을 linux kernel를 이용할 수 있도록 만들어놓은 것
따라서 모든 컨테이너가 하나의 커널을 이용하게 된다.
컨테이너는 밑 그림처럼 실행할 app.js를 실행시키기 위한 node.js 실행 환경을 구성(설비)하고 그 위에 실행 시킬 파일을 탑재한다.
이때 제일 밑 실행환경 구성을 위한 이미지는 base image
실행하려는 이미지는 source image
맨 위의 레이어에는 동작시킬 방법 나열
docker host의 하드디스크(저장장치)에 컨테이너 이미지를 저장하고, 실행하면 하나의 application process으로 동작중인 상태가 되고, 이런 동작되는 process를 컨테이너라고 한다.
여러 컨테이너 이미지를 받을 수 있는 hub.docker.com -> 컨테이너 저장해놓는 창고
여기서 docker hub는 회사 내에서 따로 만들어 공유하기도 한다.
컨테이너 다운 받기
docker search nginx - 원하는 컨테이너 있는지 찾기
docker pull nginx:[원하는 version] - hub에서 이미지 가져오기
docker run -d --name [원하는 컨테이너 이름] -p [들어오는 포트 번호]:[실제 포트 번호] nginx:[이미지 버전]
docker pull 이라는 명령어로 컨테이너 이미지를 가져와 docker run 명령어로 저장된 이미지를 컨테이너화 시켜 dockerd 상에서 컨테이너(독립된 애플리케이션) 형식으로 동작시킬 수 있다.
컨테이너 다운 및 동작 실습
docker hub에서 컨테이너 이미지 검색
➜ ~ docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 18064 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 184
bitnami/nginx Bitnami nginx Docker Image 150 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 75
...
컨테이너 이미지 다운 후 Image layer 확인
➜ ~ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
5731adb3a4ab: Pull complete
8785c8f663d3: Pull complete
023b6bd393e4: Pull complete
fd8f86b165b0: Pull complete
8f41e7c12976: Pull complete
3b5338ea7d08: Pull complete
Digest: sha256:6650513efd1d27c1f8a5351cbd33edf85cc7e0d9d0fcb4ffb23d8fa89b601ba8
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
총 6개의 이미지 레이어가 다운받아지고, 밑에 이어서 나오는 내용처럼 해당 이미지를 이용해 컨테이너화할 수 있다.
저장된 이미지는 /var/lib/docker 경로의 디렉토리에서 확인할 수 있는데, 다만 컨테이너는 docker host(linux) 위에서 돌아가는 형식이고 더군다나 지금 나는 직접 linux 가상머신 위에 도커를 실행중인 것이 아니라서 당장 따로 확인할 방법이 없다.
https://tear94fall.tistory.com/8
해당 디렉토리 확인은 이 블로그를 참조해서 다시 작성할 것이다.
컨테이너 실행하고 확인
➜ ~ docker run -d --name nginx-web -p 80:80 nginx
5f1dac56e6fdaf3816dec8c08ebb72ca199322ce5c8cc8f29680f7476f0140a2
성공적으로 컨테이너화 되었다면 컨테이너 ID 를 띄울 것이다.
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f1dac56e6fd nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx-web
docker ps 명령어로 지금 실행 중인 컨테이너 목록도 확인할 수 있다.
localhost:80 주소로 접속하면 해당 컨테이너 nginx가 동작 중인것을 확인할 수 있다.
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f1dac56e6fd nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx-web
정리하자면
컨테이너는 다른 프로그램과 분리된 환경에서 애플리케이션 실행할 수 있도록 구축해놓은 독립적인 공간
컨테이너 이미지는 컨테이너 실행을 위해 미리 준비되어야 하는, 컨테이너를 만들기 위해 사용되는 템플릿
허브는 이런 컨테이너 이미지를 모아놓은 창고와 같은 공간
이런 컨테이너가 실행되기 위해서는 linux kernel의 명령어 때문에 linux 환경의 docker host, 그리고 컨테이너가 올라가 실행될 dockerd(또는 containerd) 등이 필요하다.
- 동작중인 컨테이너 중지 - docker stop
- 컨테이너 삭제 - docker rm
- 컨테이너 이미지 삭제 - docker rmi
➜ ~ docker stop nginx-web nginx-web ➜ ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ➜ ~ docker rm nginx-web nginx-web ➜ ~ docker rmi nginx Untagged: nginx:latest Untagged: nginx@sha256:6650513efd1d27c1f8a5351cbd33edf85cc7e0d9d0fcb4ffb23d8fa89b601ba8 Deleted: sha256:8a5e3e44915c98a8063d87f2b18d79ab86b80eae45df2e2cde4e32298b89e7b9 Deleted: sha256:f7027c8fe0906d337f56f37b75db520c0f98af54b3c8334aba307a9ca3171a3a Deleted: sha256:eab592d4d692d8f9b661a75397a8f561bc2fb57c5092140234febbb9f2a2743a Deleted: sha256:faeea4b606ed324e389e8a32de6474f57a8fc4adbd64ffe9f60a08f556bf61ee Deleted: sha256:bd38214c33a6575cdbc5e835eacf2491a39dfe6033be077e217a973acce3c594 Deleted: sha256:d4567d0465e68cb405cc99409fe1eda5af0ff76f3ae341365e123acf91622cd7 Deleted: sha256:a49c6ceb5b3a7ffa366916db7ef211391b4bf093f14091b5d9e21d53297695a3
'docker' 카테고리의 다른 글
Oracle21c 컨테이너 띄워 사용하기 (Mac M1) (0) | 2024.06.02 |
---|---|
[따배도] 컨테이너란? (2) | 2023.02.11 |