일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Nginx
- 코딩테스트
- 컴퓨터공학과
- IT
- HTTP
- CS
- JavsScript
- http 메소드
- 컴퓨공학과
- 백준
- 헬스
- HTTP/0.9
- HTTP버전
- CS기술면접
- HTTP/2.0
- 도커 컨테이너
- 도커기본개념
- Python
- Nginx개념
- docker
- gunicorn
- HTTP/1.0
- 취준생
- Javascript
- 자바스크립트
- 프론트엔드
- 운동
- Jupyter notebook
- 도커명령어
- HTTP/3.0
- Today
- Total
dogo_ day
Docker 란? 본문
Docker 란?
2013년 3월 Docker, Inc에서 출시한 오픈 소스 컨테이너 프로젝트이다. 현재 전 세계적으로 큰 인기를 끌고 있으며 컨테이너 분야에서 사실상 표준으로 자리 잡았다.
로컬pc와 개발서버와의 인프라환경의 가변성에 대한 문제를 해결하기 위해, 개발환경 세팅에 대한 근본적인 여러 문제들해결 하기 위함도 있다. 그리고 리눅스/유닉스 환경에서 오랫동안 사용해왔던 쉘 스크립트로 설치 및 설정 자동화를 구현해도 되지만 이것도 한계(복잡한 설정 및 사소한 설정 하나가 운영체제와 서비스의 안정성에 큰 영향을 미침)가 있었고 이를 해결하기 위한 패러다임으로 도커가 탄생되었다.
즉, 컨테이너화된 소프트웨어 프로젝트에서는 모든 개발 작업이 Docker Container안에서 이루어진다.
개발자의 로컬pc에서 파이썬을 설치하거나 프로젝트에 필요한 패키지를 설치할 필요가 더 이상 없다.
다만, Docker Container 안에서 해당 애플리케이션이 돌아갈 수 있는 환경을 이미지로 만들어야한다.
가상머신(VirtualBox, VMware)들을 들어본 적이 있을 것 이다.
호스트OS를 기반으로 게스트OS를 만들어서 다양한 운영체제를 사용하는 방식이다.
시스템 자원을 가상화하고 독립된 공간을 생성하는 작업 -> 성능 손실이 큼
가상머신은 게스트OS를 사용하기 위한 라이브러리, 커널 등을 포함 -> 배포 용량 큼
도커 컨테이너는 가상화된 공간을 생성할 때 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 만듬 -> 성능 손실이 없음
가상머신과 달리 커널을 공유, 컨테이너에는 라이브러리와 실행파일만 존재 -> 용량이 작음, 배포하는 데 시간 빠름
출처 : https://seosh817.tistory.com/345
용어정리
도커 이미지와 컨테이너는 1:N 관계
Dockerfile : 도커 이미지를 생성할 때 사용(build)
Image : 도커 컨테이너를 생성할 때 사용(run), 가상머신에서 사용하는 iso와 비슷한 개념
Container : 도커 이미지의 실행 가능한 인스턴스
데이터베이스를 컨테이너로 띄워서 활용하는 방식 -> CDB(Container DataBase)
그 반대 방식 -> non-CDB
초반에는 직접 빌드하여 올려두고 사용하였으나 현재는 각종 공식 업체에서 기본 이미지를 생성하여 제공하고 있고, Dockerfile에 alpine버전으로 가져와서 필요한 것만 빌드하여 저용량으로 이미지를 수월하게 만들 수 있게 되었다.
이렇게 생성된 이미지를 가지고 실행하면 컨테이너가 생성되고 해당 공간은 내부에 전혀 영향 없는 독립적인 별개의 공간으로 활용 할 수 있다. docker-compose를 이용하면 더 쉽게 여러 개의 컨테이너를 실행 할 수 있습니다.
출처 : https://labs.brandi.co.kr//2021/01/20/hwangsg.html
명령어정리
기본명령어
docker version : 버전확인
docker ps -a : 생성된 전체 컨테이너 확인
docker ps : 생성된 컨테이너 중 실행 중인 컨테이너 확인
docker inspect <containerID> : 컨테이너 상세정보 출력
docker search <검색어> : dockerhub에 있는 이미지 검색
docker images : 도커에 존재하는 이미지 목록 출력
docker image inspect <tagName><veresion> : 이미지 상세정보 출력
docker network ls : 도커 네트워크 목록 출력
docker container cp <컨테이너 식별자>:<컨테이너 내부 파일 경로> <호스트 디렉토리 경로> : 컨테이너 -> 호스트 파일 복사
docker container cp <호스트 파일 경로> <컨테이너 식별자>:<컨테이너 내부 디렉토리 경로> : 호스트 -> 컨테이너 파일 복사
docker rmi -f $(docker images -f "dangling=true" -q) : <none> 이미지들 강제 일괄 삭제
컨테이너 내부 명령어
cat /etc/os-release : 컨테이너 정보 확인
Dockerfile build 하기 (image 생성)
docker build -t <tagName>:<version> .
-t 옵션을 이용하여 이름과 버전을 지정할 수 있으며, 버전 미 입력 시 latest로 자동 지정된다.
마지막 .은 현재 디렉토리를 의미한다. 즉 Dockerfile이 있는 디렉토리를 지정하는 것을 의미하며
풀이하면 'Docker는 현재 디렉토리에 있는 Dockerfile을 사용하여 이미지를 빌드한다'라는 뜻이다.
Docker image run 하기 (container 생성)
docker run -it -d -p 80:80 --name <containerName> <tagName>:<version>
-i : 컨테이너의 표준 입력(stdin) 유지
-t : 가상 터미널을 할당하여 터미널과 상호작용
일반적으로 -it 로 사용한다
-it : 도커 컨테이너를 익터랙티브하게 실행
-d : 컨테이너를 백그라운드로 실행
-p <host_port><container_port> : host의 x번 포트와 container x번 포트를 연결하고 외부에 노출한다. http://<host id>:80에 접속하면 container의 80번 포트로 접속
추가로 -v 옵션을 사용하면 저장소를 연결할 수 있다 : -v /root/data:/data 를 해결하면 host의 /root/data 디렉토리를 container의 /data 디렉토리에 연결한다는 의미이다.
컨테이너에 접속하기
docker attach VS docker exec -it
둘 다 도커 컨테이너에 접속하는 데 사용되는 명령어이다. 하지만 약간 다른 동작을 수행한다.
docker attach <containerName>
이미 실행 중인 컨테이너에 연결한다. 컨테이너가 실행 중인 터미널 세션에 연결되며, 컨테이너에서 나갈 때까지 터미널과 컨테이너 간의 입출력을 공유한다.
- 컨테이너의 표준 입출력 및 오류 출력에 대한 제어권 획득
- 해당 컨테이너에서 터미널 세션이 하나만 존재해야하며 그렇지 않으면 예기치 않은 동작이 발생할 수 있음
docker exec -it <containerID>
이미 실행 중인 컨테이너 안에서 새로운 명령어를 실행한다. 기존 컨테이너의 터미널 세션과 분리된다.
- 여러 개의 터미널 세션을 동시에 실행 할 수 있음
- 실행 중인 컨테이너 내부에서 다양한 명령어를 실행, 작업 수행 가능
정리
'docker attach' 는 터미널 세션에 연결하여 입출력을 공유 (단일 세션)
'docker exec -it'는 새로운 터미널 세션을 생성하여 명령어를 실행, 작업 수행 가능 (멀티 세션)
'IT > DevOps_' 카테고리의 다른 글
REST API 란? (0) | 2023.06.16 |
---|---|
Nginx 그리고 Gunicorn (0) | 2023.06.16 |
Nginx 란? (0) | 2023.06.15 |