728x90
도커 기초 강의와 기타 자료를 찾으면서 작성했습니다.
1. 왜 컨테이너가 필요한가
- 대규모 프로젝트 진행 시 사용
- 충돌을 방지 (개발팀: 새로운 것을 만들기 <-> 운영팀: 안정적인 인프라)
- 기존의 VM과 Container의 다른 점Container는 리눅스 기반, 리눅스의 네임스페이스(파일이나 네트워크 인터페이스를 가상화하여 자기만의 것을 가짐)를 사용
컨테이너의 장점
- 성능상의 이점 – OS를 새로 설치할 필요가 없으므로 성능 저하가 거의 없다.
- 빠른 운영환경 구성 – 미리 사용자들이 만들어 둔 이미지를 다운받아 실행만 하면 해당 환경을 구축할 수 있다.
- 관리의 용이 – 이미지 만을 관리 배포하면 되므로 운영환경의 관리가 용이하다.
- 확장성 – 한번 만들어낸 이미지를 이용하여 여러 서버들에서 사용가능하다.
(출처: https://hwanine.github.io/web/Container-vs-VM/)
개발 환경 측면
- Monolith → compile 시간이 오래 걸리고 전체 정기점검도 필요
- Microservices → 서비스 별로 교체 가능, 업데이트 가능, 서비스가 한정된 자원 안에서 잘 돌아감, 개발 프로세스 단순화가 가능
2. 도커 소개
- 컨테이너 기술을 지원하는 다양한 프로젝트 중에 하나
- 다양한 운영체제에서 사용가능(리눅스 권장)
- 애플리케이션에 국한되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순
다양한 클라우드 서비스 모델과 같이 사용 가능
- 이미지: 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
- 컨테이너: 이미지를 격리하여 독립된 공간에서 실행한 가상 환경
컨테이너의 문제 해결
- 동일 시스템에서 실행하는 소프트웨어의 컴포넌트 충돌이나 종속성에서 벗어남
- VM과 달리 하드웨어를 구현하지 않아 빠른 실행 가능
- VM의 하이퍼바이저 부분이 필요없어 공간 활용 가능
컨테이너 격리 기술
- 리눅스의 네임스페이스: 각 프로세스가 파일 시스템 마운트, 네트워크, 유저(uid), 호스트 네임(uts) 등에 대해서 시스템에서 독립적인 뷰를 제공
- 리눅스의 컨트롤 그룹: 프로세스로 소비할 수 있는 리소스 양(CPU, 메모리, I/O, 네트워크 대역대, device 노드 등)을 제한
도커의 한계
- 서비스가 커질 수록 관리해야 하는 컨테이너의 양이 급격히 증가
- scale-in(생성된 인스턴스 내리기), scale-out(인스턴스를 이미지 파일에 기반하여 지정된 개수만큼 생성)이 어려움
도커 설치
- [터미널 설치] Microsoft Store -> Windows terminal 설치 -> terminal 실행
- dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- [Ubuntu 설치] Microsoft Store -> Ubuntu 설치 -> Ubuntu 실행 -> user name / password 설정
- WSL2 리눅스 커널 업데이트
- 터미널에 wsl –l –v 를 입력하여 버전 확인
- (버전1인 경우) wsl --set-version Ubuntu 2
- (디폴트 값 변경) wsl --set-default-version 2
- [도커 설치] 도커 데스크탑 다운로드 및 설치
- Docker 실행 -> Setting -> General에서 Use the WSL2 based engine 옵션 체크
- Resource -> WSL integration 페이지에서 Ubuntu 버전 확인
- Ubuntu셸 상에서 docker ps 명령어 입력 아래와 같은 화면이 뜬다면 정상적으로 설치 및 환경 설정 완료된 것
3.도커 환경 구축
1) 이미지 검색 docker search
이미지 검색 방법
(1) Docker Hub 웹 서칭
(2) docker search 명령어
docker search [옵션] <검색어>
※ 옵션
-automated=false : Automated Build만 표시
-no-trunc=false : 모든 결과를 다 표시
-s[--stars=n] : star 수가 n개 이상인 결과만 표시
2) 이미지 다운로드 docker pull
docker pull [옵션] <이미지명> [:태그명]
※ 옵션
태그를 생략하면 가장 최신 버전(latest)를 자동으로 내려받는다.
3) 이미지 목록 보기 docker images
docker pull [옵션] <이미지명> [:태그명]
※ 옵션
-a, --all : 모든 이미지 표시
--no-trunc : 모든 결과 표시
-q, --quiet : 이미지 ID 만 표시
4) 컨테이너 실행 docker run
docker run [옵션] <이미지명>[:태그명] [값]
docker run (실행) p (서버 포트):(도커 포트) v (서버경로):(도커 경로) 도커이미지
※ 옵션
--name : 컨테이너명을 지정한다.
5) 컨테이너 중지/삭제 docker stop/rm
- 중지:실행 중인 컨테이너 list를 확인(docker ps)하여 중지하고 싶은 container_id 찾기
docker stop {container_id}
- 삭제: 중지된 컨테이너 list까지 확인(docker ps -a)하여 삭제하고 싶은 container_id 찾기
docker rm {container_id}
6) 주의 사항
- Container PORT 겹치지 않도록 주의
도커의 이미지를 생성하여 도커파일을 구성하거나 기타 고급 활용은 추후에 업로드하겠습니다.
728x90
'Programing 프로그래밍' 카테고리의 다른 글
Amazon AWS 환불 신청기 (0) | 2022.08.05 |
---|---|
Oracle 데이터베이스 기초 정리 (0) | 2022.06.22 |
소프트웨어공학 간단 정리 (0) | 2022.06.22 |