상세 컨텐츠

본문 제목

[Docker] 이론 | 설치 & 실행 | Repository 생성

IT/Docker

by o_zeew 2022. 5. 27. 13:37

본문

(1) Docker 이론

(2) Docker 설치

(3) Docker 실행

(4) Repository 생성


 1. Docker 이론 

 Docker 란? 

  - 리눅스 기반

  - 컨테이너 기반의 오픈소스 가상화 플랫폼

  - 다양한 프로그램 및 실행환경을 컨테이너로 추상화, 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리 단순화

  - 경량화 : 시스템 자원을 많이 소모하지 않기 때문

 

장점

  - 새로운 기술이 아니라 존재하는 기술을 잘 포장함

  - 사용하기 쉽고 사용자들이 원하는 기능을 간단하지만 획기적으로 구현

  - 도커 이미지로 만든 컨테이너는 도커가 설치된 환경이라면 어디든 똑같이 동작함

 

 컨테이너(Contaier) 

  - Image를 실행한 상태

  - 격리된 공간에서 프로세스가 동작하는 기술 

  - 기존 방식이 OS가상화(Overhead가 크다) 였다면 단순히 프로세스를 격리시키기 때문에 가볍고 빠름

  - CPU나 Memory 역시 딱 필요한 만큼만 추가로 사용, 성능적으로도 손실이 거의 없음(프로세스가 실행되는 만큼만 사용)

  - Process : 어플리케이션이 실행되어 메모리에 올라가있는 상태

    

장점

  - 경량 : 하나의 Host에 여러 개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행

  - 고속 : 새로운 컨테이너를 1초 이내로 생성

  - 실행 중 변경 : 실행중인 컨테이너에 접속, 명령어 입력, 패키지 설치, 사용자 추가, 프로세스 백그라운드 실행,

                            내 외부 디렉토리 연결 가능

 

 

 이미지(Image) 

  - 공식적인 이미지는 hub.docker.com에 있음

  - 컨테이너 실행에 필요한 파일과 설정 값등을 포함하고 있는 것, 불변(Immutable)  기존에 존재하는 것은 읽기 전용

  - 하나의 이미지로 여러 개의 컨테이너를 생성할 수 있고 컨테이너 상태 변경 및 삭제 시에도 이미지는 변하지 않고 남음

  - 컨테이너 실행을 위한 모든 정보 보유 : 설치 및 컴파일 필요 X

     ex) Ubuntu이미지 : Ubuntu 실행을 위한 모든 파일, MySQL 이미지 : MySQL 실행 파일 및 명령어, 포트 정보 등

  - Docker Hub에 등록하거나 Docker Registry 저장소를 직접 생성 후 관리 가능

 

 

 Layer 저장방식

  - 최초의 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 용량이 수백MB

  - 처음 이미지를 다운 받을 땐 크게 부담이 없지만 기본 이미지에 파일 하나 추가 후 수백MB를 다시 다운 받을 시 부담

  - Layer 개념을 사용하는 Union 파일 시스템을 이용, 여러 개의 Layer를 하나의 파일시스템으로 사용

  - 이미지는 여러 개의 읽기 전용 Layer 구성되고 파일이 추가되거나 수정되면 새로운 Layer가 생성됨

    ex) Ubuntu 이미지가 A+B+C라면 Nginx를 설치할 시 A+B+C+Nginx

          여기에 webapp 생성 = A+B+C+Nginx+source(webapp)

          소스 수정 시 = A+B+C+Nginx+source2(webapp)

 

 

 이미지 경로 

  - 태그를 이용하여 이미지를 URL 방식으로 관리

  - Ubuntu14.04 이미지는 docker.io/library/ubuntu14.04 혹은 docker.io/library/ubuntu:trustry 이며

     docker.io/library는 생략 가능하여 ubuntu:14.04 로 사용

 

 

 Dockerfile

  - 이미지 생성 : 이미지를 만들기 위해 Dockerfile 라는 파일 자체 DSL (Domain Specific Language) 언어 사용

  - 서버에 프로그램 설치 시 의존성 패키지 등을 메모장에 기록하지 말고 Dockerfile로 관리

  - Dockerfile의 이미지 생성 과정을 보고 수정 작업등을 통하여 소스와 함께 비전 관리가 가능

 

 


 

2. Docker 설치 

  - yum-utils 설치 : yum config manager 사용을 위해

yum config manager가 포함

  - yum config manager을 사용해서 레포지토리 추가

레포지토리 추가

  - docker 관련 패키지 설치

관련 패키지 설치

  - docker 시스템 시작

 

  - docker 명령어 확인

 

<Docker 설치 Script 생성>

docker.sh 파일 생성
docker 설치 script 작성
sh 명령어로 docker.sh 파일 실행

 

 


 

3. Docker 실행 

  * 옵션
     -i : interactive, 표준입력 활성화, 컨테이너와 연결되지 않더라도 표준 입력 유지
     -t : TTY 모드, bash 사용에 필수 옵션, 사용하지 않을 시에 명령어는 입력 가능하지만 shell에 나타나지 않음
     -d : detach, 데몬 모드, 컨테이너를 백그라운드로 실행
     -a : attach, 컨테이너에 표준입력, 표준출력, 표준에러 연결
     -p : publish, 포트포워딩, [호스트포트:컨테이너포트]
     -e : env, 컨테이너 내에서 사용할 환경변수
     --name : 컨테이너 이름 설정

 

  - docker run [이미지 명]

hello-world 이미지 실행

 

  - docker ps -a : docker process 확인

 

  - docker rm [컨테이너 명] : 컨테이너 삭제

  - 삭제 확인

 

<httpd 웹서버 실행해보기>

 

  - docker run -itd -p [외부포트번호:내부포트번호] --name [생성할 컨테이너 명] [실행할 이미지 명]

터미널 입력,백그라운드 실행, 외부에서 8080포트로 접속하면 내부의 80포트로 접근, h1 이름으로 httpd 이미지 실행

  - 확인

* 하나의 이미지로 여러개의 컨테이너 생성 가능 *

  - 9090 포트로 h2 컨테이너 생성, 10010포트로 h3 컨테이너 생성

 

  - 이름을 지정해서 컨테이너를 만들었기 때문에 ps만으로도 확인 가능

 

  - docker rm -f [컨테이너 명] : 실행중인 컨테이너는 -f 옵션으로 삭제 가능

 

 4. Docker 이미지 사용

  - docker search [이미지 명] :  hub.docker.com 에서 검색됨

nginx : apache와 쌍벽을 이루는 웹서버
hub.docker.com에서 검색

 

  - docker pull [이미지 명] : 이미지 다운

  - docker images : 다운받은 이미지 확인

 

  - docker rmi [이미지 명] : 이미지 삭제 (remove images)

 

  * centos 검색 시 버전이 나오지 않기 때문에 docker hub에서 확인 필요

centos:버전
centos 7버전 설치
설치 확인

 

 


 

 

 4. Repository 생성 및 사용 

  - 원격 저장소 : 여러 사람이 모여 협업 작업을 하기 위해 사용

  - Public Repository는 얼마든지 생성 가능

  - Private Repository는 한개만 생성 가능

 

1. hub.docker.com에 회원가입 후 Repositories 생성

test라는 이름의 public repository 생성
생성 완료

 

2. docker tag [기존레포지토리] [레포지토리ID/레포지토리 명:이미지 명] : 레포지토리와 태그 이름 변경

  - 이미지 ID 값이 같음 = 복사 

 

3. 로그인

docker 로그인

 

4. 레포지토리에 올리기

push : 올리기 / pull : 다운받기

 

5. 레포지토리 확인

centos7 확인 가능

 

6. 레포지토리에서 받기

 - 기존에 생성한 이미지 삭제

 

  - 원격 레포지토리에서 이미지 다운

'IT > Docker' 카테고리의 다른 글

[Docker] MySQL DB + wordpress 연동  (0) 2022.06.04
[Docker] Link | MySQL | MySQL + php + httpd 실습  (0) 2022.06.04
[Docker] Script 작성 | Image 생성  (0) 2022.06.03
[Docker] Docker & HAproxy | 팀별 실습  (0) 2022.06.03
[Docker] Virtual Box  (0) 2022.06.02

관련글 더보기