(1) Docker 이론
(2) Docker 설치
(3) Docker 실행
(4) Repository 생성
- 리눅스 기반
- 컨테이너 기반의 오픈소스 가상화 플랫폼
- 다양한 프로그램 및 실행환경을 컨테이너로 추상화, 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리 단순화
- 경량화 : 시스템 자원을 많이 소모하지 않기 때문
장점
- 새로운 기술이 아니라 존재하는 기술을 잘 포장함
- 사용하기 쉽고 사용자들이 원하는 기능을 간단하지만 획기적으로 구현
- 도커 이미지로 만든 컨테이너는 도커가 설치된 환경이라면 어디든 똑같이 동작함
- Image를 실행한 상태
- 격리된 공간에서 프로세스가 동작하는 기술
- 기존 방식이 OS가상화(Overhead가 크다) 였다면 단순히 프로세스를 격리시키기 때문에 가볍고 빠름
- CPU나 Memory 역시 딱 필요한 만큼만 추가로 사용, 성능적으로도 손실이 거의 없음(프로세스가 실행되는 만큼만 사용)
- Process : 어플리케이션이 실행되어 메모리에 올라가있는 상태
장점
- 경량 : 하나의 Host에 여러 개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행
- 고속 : 새로운 컨테이너를 1초 이내로 생성
- 실행 중 변경 : 실행중인 컨테이너에 접속, 명령어 입력, 패키지 설치, 사용자 추가, 프로세스 백그라운드 실행,
내 외부 디렉토리 연결 가능
- 공식적인 이미지는 hub.docker.com에 있음
- 컨테이너 실행에 필요한 파일과 설정 값등을 포함하고 있는 것, 불변(Immutable) → 기존에 존재하는 것은 읽기 전용
- 하나의 이미지로 여러 개의 컨테이너를 생성할 수 있고 컨테이너 상태 변경 및 삭제 시에도 이미지는 변하지 않고 남음
- 컨테이너 실행을 위한 모든 정보 보유 : 설치 및 컴파일 필요 X
ex) Ubuntu이미지 : Ubuntu 실행을 위한 모든 파일, MySQL 이미지 : MySQL 실행 파일 및 명령어, 포트 정보 등
- Docker Hub에 등록하거나 Docker Registry 저장소를 직접 생성 후 관리 가능
- 최초의 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 용량이 수백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 라는 파일 자체 DSL (Domain Specific Language) 언어 사용
- 서버에 프로그램 설치 시 의존성 패키지 등을 메모장에 기록하지 말고 Dockerfile로 관리
- Dockerfile의 이미지 생성 과정을 보고 수정 작업등을 통하여 소스와 함께 비전 관리가 가능
- yum-utils 설치 : yum config manager 사용을 위해
- yum config manager을 사용해서 레포지토리 추가
- docker 관련 패키지 설치
- docker 시스템 시작
- docker 명령어 확인
<Docker 설치 Script 생성>
* 옵션 -i : interactive, 표준입력 활성화, 컨테이너와 연결되지 않더라도 표준 입력 유지 -t : TTY 모드, bash 사용에 필수 옵션, 사용하지 않을 시에 명령어는 입력 가능하지만 shell에 나타나지 않음 -d : detach, 데몬 모드, 컨테이너를 백그라운드로 실행 -a : attach, 컨테이너에 표준입력, 표준출력, 표준에러 연결 -p : publish, 포트포워딩, [호스트포트:컨테이너포트] -e : env, 컨테이너 내에서 사용할 환경변수 --name : 컨테이너 이름 설정 |
- docker run [이미지 명]
- docker ps -a : docker process 확인
- docker rm [컨테이너 명] : 컨테이너 삭제
- 삭제 확인
<httpd 웹서버 실행해보기>
- docker run -itd -p [외부포트번호:내부포트번호] --name [생성할 컨테이너 명] [실행할 이미지 명]
- 확인
* 하나의 이미지로 여러개의 컨테이너 생성 가능 *
- 9090 포트로 h2 컨테이너 생성, 10010포트로 h3 컨테이너 생성
- 이름을 지정해서 컨테이너를 만들었기 때문에 ps만으로도 확인 가능
- docker rm -f [컨테이너 명] : 실행중인 컨테이너는 -f 옵션으로 삭제 가능
- docker search [이미지 명] : hub.docker.com 에서 검색됨
- docker pull [이미지 명] : 이미지 다운
- docker images : 다운받은 이미지 확인
- docker rmi [이미지 명] : 이미지 삭제 (remove images)
* centos 검색 시 버전이 나오지 않기 때문에 docker hub에서 확인 필요
- 원격 저장소 : 여러 사람이 모여 협업 작업을 하기 위해 사용
- Public Repository는 얼마든지 생성 가능
- Private Repository는 한개만 생성 가능
1. hub.docker.com에 회원가입 후 Repositories 생성
2. docker tag [기존레포지토리] [레포지토리ID/레포지토리 명:이미지 명] : 레포지토리와 태그 이름 변경
- 이미지 ID 값이 같음 = 복사
3. 로그인
4. 레포지토리에 올리기
5. 레포지토리 확인
6. 레포지토리에서 받기
- 기존에 생성한 이미지 삭제
- 원격 레포지토리에서 이미지 다운
[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 |