도커란
: 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼
컨테이너: 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술. VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다.
이미지: 컨테이너 실행에 필요한 파일과 설정 값 등을 포함하고 있는 것으로 상태 값을 가지지 않고 변하지 않습니다(Immutable). 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다. 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백메가MB에 이릅니다.
- 레이어 저장 방식: 컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기/쓰기read-write 레이어를 추가합니다. 이미지 레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만 사용합니다.
참고: 초보를 위한 도커 안내서
Docker 사용하기
1. docker container생성
DockerFile: 컨테이너 정의서
from # image import
run # linux bash command (build시 init!)
env # linux 환경변수
expose # port forwarding
entrypoint # /bin/sh (bash file)
cmd # bash arguments → pending 되는 command line을 적어야함(server로 사용하려면), 아니면 exit으로 바로 컨테이너 꺼짐
cp # ex) {local_path} {container_path}
** 참고1: docker compose up -d —build 시 file이 변경된 부분부터 다시 실행됨 (file이 변경되도 다시 실행됨)
** 참고2: cmd에서 실행하고자하는 파일이 bash file일 경우는 실행 권한 필요: chmod +x {file_name}.sh
2. Container 여러개 생성 & 다른 Container 연결
docker-compose.yaml: 컨테이너s를 오케스트레이션
version: '1'
services:
test-container: # services 이름
container_name: test-container
hostname: test-container
build:
context: .
dockerfile: DockerFile
volumes:
- ./src:/src # code 싱크 맞추기(=copy) ex) {local_path}:{container_path}
postgress:
container_name: postgres
hostname: postgres
image: postgres:13 # docker image file 이미 있는 경우 (from hub.docker.com)
environment:
POSTGRES_PASSWORD: password
ports:
- 8080:8080 # conainer간의 port 연결 {local_port}:{container_port}
* 참고: yaml file 에서는 tab을 쓸 수 없음, “ 쌍따움표 쓸 수 없음
3. Docker 명령어
$ docker run
$ docker image ls -a
$ docker compose up -d --build # -d: log background, --build: 새로 만들어 놓은 이미지로 변경 (해당 folder에서 실행하기)
$ docker compose down
$ docker logs {container_name}
$ docker container ps -a # 전체 docker 작업 확인
$ docker compose ps -a # docker-compoase.yaml 안에 있는 작업 확인
$ docker rm -f {container_name}
$ docker exec {service_name} {command}
$ docker exec {service_name} bash # ssh 연결 환경
$ docker volume prune
$ docker logs -tf {service_name}
작성한 예시 Docker Code : https://github.com/jaxgxxnxee/docker-test
'Data Engineering' 카테고리의 다른 글
빅데이터 기술 | Kafka로 데이터 수집하기 (0) | 2023.04.06 |
---|---|
빅데이터 기술 | Airflow로 데이터 파이프라인 생성하기 (ETL) (0) | 2022.12.19 |
빅데이터 기술 | Spark로 분산처리하기 (0) | 2022.12.19 |
Git | Git on the command line (in mac) (0) | 2019.12.17 |