본문 바로가기

반응형

가상 머신/Docker

(32)
[ Docker ] Port Forward, Volume mount 하기 아래는 필요한 사항을 모두 반영한 Dockerfile과 실행 예시입니다.1. 요구사항 요약항목 설정베이스 이미지my_committed_image (commit된 이미지)ENTRYPOINT/usr/local/bin/myscript포트 포워딩81180:81180볼륨 마운트- /data/refs → /airflow/plugins- /data/airflow/dags → /airflow/dags2. DockerfileFROM my_committed_image# 스크립트 실행 권한 부여 (필요 시)RUN chmod +x /usr/local/bin/myscript# ENTRYPOINT 설정ENTRYPOINT ["/usr/local/bin/myscript"]# 내부에서 사용하는 포트 노출 (명시적으로 작성)EXPOSE..
[ Docker ] 자동 실행 후 데몬이 죽어도 Docker가 종료 되지 않게 이미지 만들기 ENTRYPOINT로 bash를 실행하고, 그 안에서 daemon을 CMD나 script로 실행하면 컨테이너가 daemon이 죽어도 "running" 상태로 남을 수 있게 이미지를 만들려고 합니다.1. 디버깅은 편리하지만 "좋은 방식은 아닙니다."왜냐하면, 컨테이너가 running 상태로 유지되는 것은 실제로 PID 1 프로세스가 살아있느냐로 판단되는데,이 방식은 bash가 PID 1이 되고, daemon은 bash의 하위 프로세스가 되기 때문입니다.→ daemon이 죽더라도 bash는 살아있기 때문에 컨테이너는 running 상태로 유지됩니다.2. 구조 요약아이디어:ENTRYPOINT ["/bin/bash"]CMD ["-c", "/usr/bin/mydaemon"]/bin/bash -c "/usr/bi..
[ Docker ] 이미지에서 layer를 제외해서 크기 줄인 최종 이미지를 만들기 Docker에서 이미지의 레이어를 제외하고 최종 이미지만 만드는 방법은 본질적으로 "불필요한 레이어 제거" 또는 "단일 레이어 이미지(flattened image)"를 만드는 것을 의미합니다.즉, 이미지 빌드 후에 여러 레이어를 합쳐서 하나의 단일 레이어 이미지로 만드는 방법입니다.✅ 목적: 이미지의 레이어를 제거하고 최종 결과만 포함한 단일 이미지 만들기🔧 방법 1: docker export + docker import이 방식은 컨테이너 실행 후 파일 시스템을 덤프해서 다시 이미지로 만드는 방법입니다.# 1. 컨테이너 실행docker run --name temp-container my-image# 2. 컨테이너 파일 시스템 export (tar 파일)docker export temp-container..
[ Docker ] 하나의 폴더를 2개 이상의 Docker에서 mount하기 Docker에서 이미 다른 컨테이너가 마운트하고 있는 디렉토리를 또 다른 컨테이너에서 마운트하기다만, 마운트 방식(volume vs bind mount) 에 따라 약간씩 동작 방식이 다르며, 주의할 점도 존재합니다.1. Volume을 여러 컨테이너에서 마운트하는 경우예시:docker run -v shared_volume:/data --name container1 -d ubuntudocker run -v shared_volume:/data --name container2 -d ubuntushared_volume은 Docker가 관리하는 volume두 컨테이너는 /data 디렉토리를 공유함서로 읽고 쓰기 가능 (동기화 문제는 직접 처리해야 함)✔️ 완전히 가능하며 권장되는 공유 방식 중 하나2. Bind m..
[ Docker ] Container 삭제시 Volume 삭제하기 Docker 컨테이너를 삭제할 때 컨테이너 안에서 생성된 데이터를 모두 지우고 싶다면, 아래 사항들을 확인하고 실행하면 됩니다.1. 볼륨을 사용하지 않았다면 (기본 상태)docker rm -f 컨테이너이름이 경우, 컨테이너 안에서 생성된 데이터는 컨테이너 삭제와 함께 사라집니다.2. 볼륨을 사용했다면 (예: -v, docker volume 사용 시)컨테이너 삭제만으로는 외부 볼륨 데이터는 지워지지 않습니다.함께 삭제하려면:docker run --name mycontainer -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=12345678 -e POSTGRES_DB=postgres -p 5432:5432 -v pgdata:/var/lib/postgresql/data..
[ Docker ] 내 docker에 자동 실행 기능 추가하기 🌱 Docker 이미지를 만드는 방법은 크게 Dockerfile을 작성하고, 그 파일을 사용하여 이미지를 빌드하는 과정으로 나눌 수 있습니다. 여기에 간단한 예시를 들어 설명드리겠습니다.  1단계: start-script.sh 작성Container에 접속: 개발중인 container에 접속해서 '/' 폴더에 start-script.sh를 작성합니다.docker exec -it jolly_jones bashstart-script.sh를 작성편집기를 열어서 start-script.sh에 아래 내용으로 파일을 작성합니다.vim /start-script.shstart-script.sh 파일 내용#!/bin/bash/root/start-myservice.sh # 개발한 프로그램을 실행 시킨다.실행 권한을 설정합..
[ Docker ] build 명령어로 나만의 이미지 만들기 Docker 이미지를 만드는 방법은 크게 Dockerfile을 작성하고, 그 파일을 사용하여 이미지를 빌드하는 과정으로 나눌 수 있습니다. 여기에 간단한 예시를 들어 설명드리겠습니다.  1단계: Dockerfile 작성Dockerfile은 Docker 이미지를 빌드하기 위한 스크립트로, 필요한 모든 명령어와 설정을 포함합니다. 가장 기본적인 Dockerfile은 다음과 같습니다:기본 이미지 지정: 모든 Docker 이미지는 기본 이미지에서 시작합니다. 이는 OS 또는 미리 구성된 다른 이미지일 수 있습니다. FROM ubuntu:20.04환경 설정: 필요한 패키지 설치, 환경 변수 설정 등의 초기 설정 작업을 수행합니다.예로 nginx가 설치된 이미지를 만듭니다. RUN apt-get update..
[ Docker ] Docker root 폴더 변경하기 Docker의 루트 폴더를 변경하는 것은 Docker 데이터를 다른 드라이브나 위치로 옮기기 위해 필요할 수 있습니다. 기본적으로 Docker는 /var/lib/docker에 모든 데이터를 저장하지만, 디스크 공간 문제 등의 이유로 이 위치를 변경할 필요가 있을 수 있습니다. 다음은 Linux 시스템에서 Docker의 루트 디렉토리를 변경하는 방법을 단계별로 설명합니다. Docker 서비스 중지Docker가 실행 중인 모든 작업이 중단되고 데이터가 손실되지 않도록 Docker 서비스를 중지합니다. sudo systemctl stop docker 기존 Docker 디렉터리 데이터 복사기존 Docker 데이터를 새 위치로 복사합니다. 예를 들어, 새로운 디렉토리가 /new/path/docker라고 가정할..

반응형