티스토리 뷰

도커 이미지와 컨테이너

  • 도커 이미지

    • 컨테이너를 생성할 때 필요한 파일로 가상 머신의 iso와 유사
    • 컨테이너를 생성, 실행할 때 읽기 전용으로 사용된다.
    • 이미지의 이름은 [저장소(생략가능)]/[이미지이름]:[태그(생략시 latest)] 형태로 구성된다.
  • 도커 컨테이너
    • 도커 이미지로 생성했을 때 기존 파일시스템과 격리된 시스템 자원 및 네트워크를 사용하도록 생성된 공간.
    • 컨테이너는 이미지를 읽기 전용으로 사용하되 이미지에서 변경된 사항은 컨테이너 계층에 저장한다.
    • 하나의 같은 이미지로도 독립적인 여러 컨테이너를 생성할 수 있음.

도커 컨테이너 다루기

  • 컨테이너 생성

    • dokver -v : 도커 버전확인
    • docker run -i -t( i: 상호입출력, t: tty bash 셸 사용 옵션, i,t는 동시에 사용해야만함 ) [이미지이름]
      • docker run 명령어 시 해당 이미지가 로컬에 존재하지 않으면 자동으로 도커 중앙 이미지 저장소인 도커 허브에서 이미지를 다운로드 받은 후 컨테이너를 생성 후 해당 컨테이너 내부로 들어간다.
      • (컨테이너 내부) root(사용자이름)hostname(무작위해쉬16진수)
      • 내부적으로 [ PULL ] -> [ CREATE ] -> [START] -> [ ATTACH (-i, -t 옵션을 사용했을 시) ] 호출한다.
    • (컨테이너 내부) exit 명령어 : 컨테이너 내부를 빠져나오면서 해당 컨테이너를 중지 시킨다.
      • 컨테이너를 중지 시키지않고 빠져나오려면, Ctrl + P, Q 명령어로 셸에서만 빠져나오도록 한다. 
    • docker pull [이미지이름] : 도커허브에 있는 해당 이미지를 로컬 저장소에 내려 받는다.
    • docker images: 도커 허브에 있는 이미지 목록을 출력한다.
    • docker create --name [컨테이너 이름] [이미지 이름] : 컨테이너를 생성만 하고 싶을 시 사용한다.
      • docker run과 다르게, [ PULL ] -> [ CREATE ] 만 내부적으로 호출된다.
    • docker attach [컨테이너이름] : 해당 도커 내부로 들어가는 명령어.
  • 컨테이너 목록 확인
    • docker ps ( -a ) : 컨테이너 목록 조회
      • ps명령어시 CONTAINER ID, IMAGE, COMMAND, CREATED, STATUS, PORTS, NAMES 등의 내용을 확인할 수 있다.
        • PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트를 나열한다.
    • docker rename [원래 컨테이너 이름] [새로운 이름] : 컨테이너 이름 변경
  • 컨테이너를 외부에 노출
    • 컨테이너는 가상머신과 마찬가지로 자동으로 가상 IP를 할당받는다.
      • 도커는 컨테이너에 IP를 172.17.0.x 부터 순차적으로 할당한다.
    • docker run -it -p [호스트IP : 컨테이너IP] : 지정한 컨테이너 ip를 지정한 호스트 ip로 연결한다.
      • [호스트 IP의 지정한 포트로 접근 => 해당 포트는 지정한 컨테이너 포트로 포워딩 => 컨테이너 안 포트에 있는 서버에 접근] 하는 플로우로 진행된다.
  • 컨테이너 어플리케이션 구축
    • 도커의 이미지 관리와 독립성을 유지하기 위하여 컨테이너 아넹는 하나의 어플리케이션을 띄우는게 도커의 원칙이므로 여러개의 어플리케이션을 띄우는 것은 좋지 않다.
    • docker exec -it [이미지이름] [컨테이너 내부에서 수행할 명령어] 
      • ex) docer exec -i -t wordpressdb /bin/bash: wordpressdb 컨테이너 내부의 /bin/bash 프로그램을 상호 입출력이 가능하도록 실행하라
      • /bin/bash 프로그램 내부의 echo 명령어를 통하여 -e 옵션으로 설정한 환경변수를 확인할 수 있다. echo #{환경변수이름}
    • [하나의 컨테이너와 다른 컨테이너를 연결하여 배포하는 예제]

 

1. mysql 이미지를 이용하여 데이터베이스 컨테이너 생성

더보기

docker run -d \

-- name wordpressdb \

-e MYSQL_ROOT_PASSWORD=password \

-e MYSQL_DATABASE=wordpress \

mysql:5.7

=> -d 옵션 : 컨테이너를 백그라운드에서 동작하도록 설정(입출력 없는 상태로 컨테이너 실행)

 

2. 워드프레스 이미지를 이용하여 웹 컨테이너 생성(p옵션을 이용하여 80포트 호스트에 노출)

더보기

docker run -d \

-e WORDPRESS_DB_PASSWORD=password \

--name wordpress \

--link wordpressdb:mysql \

-p 80 \

wordpress

=> --link 옵션 : 내부 IP를 알 필요없도록 컨테이너의 별명을 설정하고 별명으로 접근 하도록 설정하는 옵션. (컨테이너끼리의 통신을 할 시 가장 쉬운 방법은 NAT에서 발급받은 내부 IP를 통하여 통신하는 것이다. 하지만, 도커엔진은 컨테이너가 실행될 때 마다 172.17.0.2,3,4 ... NAT IP를 재 할당해주기 때문에 매번 변경되는 IP로 접근하기는 어렵다.)

=> link 옵션 설정 후엔, 다른 컨테이너에서 wordpress 컨테이너를 mysql 이라는 이름으로 호출 할 수 있다.

=> ex) docker exec wordpress ping -c 2 mysql : wordpress 웹 컨테이너에서 wordpressdb에 mysql이라는 별명으로 통신하는 명령어


 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함