Study/System Engineer

KDT - play with docker를 활용한 맛보기

jxx_yxjx 2024. 1. 23. 11:12

1. 도커 이미지 (Docker Image)

  • 도커 컨테이너를 생성하기 위한 바이너리 파일

 

2. 도커 컨테이너 (Docker Container)

  • 도커 이미지를 통해 실행되는 하나의 프로세스

  • 원본 저장소에 있는 Docker File로부터 Docker Image를 내려받고 해당 이미지를 실행하여 여러 개의 컨테이너가 실행되는 구조
  • 도커 이미지와 도커 컨테이너는 1 : N 구조
  • 도커 이미지는 읽기 전용으로 도커 컨테이너에서 수정이 일어나도 원본 이미지에는 영향 X
  • 운영체제 상에서 프로그램과 프로세스 관계와 유사

 

3. 도커 이미지 이름 구성

  • 저장소 이름 (Repository name)
  • 이미지 이름 (Image name)
  • 이미지 태그 (Image tag) - (버전 정보나 릴리즈 태그같은 정보)

ex)

  1. OracleRepo/mysql-server:8.0.13 - OracleRepo저장소에 mysql-server이미지 8.0.13 버전
  2. OracleRepo/mysql-server - 태그 생략시 가장 최근 릴리즈(latest) 사용
  3. mysql-server:5.1.12 - 저장소 생략시 기본 저장소인 도커 허브로 인식
  4. mysql-server - 태그와 저장소 생략시 기본저장소와 latest 릴리즈 사용

 

4. 도커 이미지 받아오기

https://labs.play-with-docker.com/

 

Play with Docker

Play with Docker A simple, interactive and fun playground to learn Docker Login

labs.play-with-docker.com

 

이미지 받아오기

$ docker pull 이미지명orDockerHub의레포지토리명:버전-기타옵션

 

실행 구조

 

5. 도커 컨테이너 실행 방법

크게 2가지 방법으로 1) 생성과 시작을 한번에 하는 방법 2) 따로하는 방법 이 있는데 모두 image가 없으면 repository에서 자동 pull을 수행한다.

1. 도커 컨테이너 생성 및 시작을 한번에 하는 방법

$ docker run [image]

 

2. 도커 컨테이너 생성과 시작을 따로하는 방법

$ docker create [image]  // 컨테이너 생성
$ docker start [container] // 컨테이너 시작

 

6. 도커 명령어 실습

$ docker pull nginx:1.23.1-alpine

nginx 이미지를 1.23.1버전이면서 alpine 옵션이 적용된 형태로 받아오기

 

$ docker images

이미지 목록 추가

 

$ docker run -d -p 8001:80 --name=webserver1 nginx:1.23.1-alpine

-d : detach 모드로 해당 컨테이너가 백그라운드에서 돌아감

-p : 포트바인딩, 8001은 host 포트이며 해당 포트로 접속시 컨테이너의 80번 포트와 연결된다는 뜻

--name : 컨테이너의 이름 지정

이후 어떤 이미지를 활용해 컨테이너를 띄울지 설정

 

$ docker ps

CONTAINER_ID는 랜덤하게 배정되며, NAMES 또한 지정하지 않으면 랜덤 배정

IMAGE : 컨테이너를 띄우는데 사용한 이미지 조회

PORTS: host포트→연동된컨테이너의포트 

 

여기까지 실습하면 play with docker 상단에 HOST가 오픈한 포트에 접속할 수 있도록 링크가 열리는 것을 확인할 수 있다.

해당 포트를 열어 엔진엑스 서버를 확인한다.

$ curl localhost:8001

locathost:8001로 접속

network address를 내부주소로 변경해주는 NAT 서비스가 자동으로 적용되어 이렇게 사용가능하다.

 

DNS → 도메인을 ip로

NAT → ip를 ip로

 

$ docker stop webserver1

stop은 정지 상태이지 컨테이너가 제거된 상태는 아니므로

ps -a로 정지상태인 컨테이너를 조회해본다.

 

이후 docker pull 에서 pull 중복을 막기 위한 과정을 살펴보자.

도커 도큐먼트를 받아 확인한다

$ docker run -d -p 80:80 --name=pwd-container docker/getting-started:pwd

docker/getting-started:pwd // dockerhub 사이트의 해당 레포지토리에서 받아오겠다.

실행 시 pull 을 수차례 진행한 후 새 이미지를 생성했다고 하는데 이러한 작업의 절차는 다음과 같다.

1. 이미지가 로컬에 있는지

2. 없다면 받아옴

3. 레이어를 겹쳐서 구성 (매번 모든 이미지 요소를 받아오는 것이 부담되므로 레이어를 부품처럼 취급)

 

이후 다시 컨테이너가 잡힌 것을 확인하고 해당 포트에 접속해보자.

$ docker ps
$curl localhost

 

포트 접속 시 아래와 같은 문서가 열린다.