-
컨테이너 → 호스트, 호스트 → 컨테이너로 양방향 모두 가능
-
호스트 → 컨테이너 파일 복사 커맨드
docker cp 호스트_경로 컨테이너_이름:컨테이너_경로
-
컨테이너 → 호스트 파일 복사 커맨드
docker cp 컨테이너_이름:컨테이너_경로 호스트_경로
- 볼륨 마운트
- 바인드 마운트
- 차이점
항목 | 볼륨 마운트 | 바인드 마운트 |
---|---|---|
스토리지 영역 | 볼륨 | 디렉터리 또는 파일 |
물리적 위치 | 도커 엔진의 관리 영역 | 어디든지 가능 |
마운트 절차 | 볼륨을 생성한 후 마운트 | 기존 파일 또는 폴더를 마운트 |
내용 편집 | 도커 컨테이너를 통해서 | 일반적인 파일과 같이 |
백업 | 절차 복잡 | 일반적인 파일과 같이 |
⇒ 파일을 직접 편집해야 할 일이 많다면 바인드 마운트를 사용하고, 그렇지 않다면 볼륨 마운트를 사용하면 된다.
스토리지 영역을 만드는 방법
-
바인드 마운트는 원본이 될 디렉터리나 파일을 만든다. 평소 하듯이 폴더를 만들면 되고, 경로는 어디라도 상관없다.
-
볼륨 마운트는 상위 커맨드를 사용해 먼저 볼륨을 생성한다.
docker volume create 볼륨_이름
-
볼륨을 삭제할 때는 아래 커맨드를 사용한다.
docker volume rm 볼륨_이름
-
주요 하위 커맨드
-
커맨드 | 내용 | 생략형 | 주요 옵션 |
---|---|---|---|
create | 볼륨 생성 | X | 거의 사용하지 않음 |
inspect | 볼륨 상세 정보 출력 | X | 거의 사용하지 않음 |
ls | 볼륨 목록 출력 | X | 거의 사용하지 않음 |
prune | 현재 마운트되지 않은 볼륨 모두 삭제 | X | 거의 사용하지 않음 |
rm | 지정한 볼륨 삭제 | X | 거의 사용하지 않음 |
스토리지를 마운트하는 커맨드
-
바인드 마운트 커맨드
docker run (생략) -v 스토리지_실제_경로:컨테이너_마운트_경로 (생략)
-
볼륨 마운트 커맨드
docker run (생략) -v 볼륨_이름:컨테이너_마운트_경로 (생략)
-
바인드 마운트는 디렉터리나 파일 복사를 통해 백업
-
볼륨 마운트의 경우, 볼륨 자체를 복사할 수 없기 때문에 압축해서 저장하는 방식으로 백업
docker run --rm -v 볼륨명:/moto -v 백업_저장_폴더명:/target busybox tar cvzf /sake/ 백업파일이름.tar.gz -C /source .
리눅스 운영체제(busybox) 컨테이너를 실행하는데, 이 컨테이너는 실행 후 바로 삭제 예정이기 때문에 --rm 옵션을 추가했다
-
컨테이너를 준비하고 컨테이너를 커맨드를 통해 이미지로 변환하는 방식
-
기존 컨테이너를 복제하거나 이동할 때 편리
-
커맨드
docker commit 컨테이너_이름 새로운_이미지_이름
-
Dockerfile 스크립트에 토대가 될 이미지나 실행할 명령어 등을 기재하고 build 하여 이미지 생성
-
커맨드
docker build -t 생성할_이미지_이름 재료_폴더_경로
-
Dockerfile 스크립트 예
FROM 이미지_이름 COPY 원본_경로 대상_경로 RUN 리눅스_명령어 ...
-
주요 Dockerfile 인스트럭션
인스트럭션 | 내용 |
---|---|
FROM | 토대가 되는 이미지 지정 |
ADD | 이미지에 파일이나 폴더 추가 |
COPY | 이미지에 파일이나 폴더 추가 |
RUN | 이미지를 빌드할 때 실행할 명령어 지정 |
CMD | 컨테이너를 실행할 때 실행할 명령어 지정 |
ENTRYPOINT | 컨테이너를 실행할 때 실행할 명령어 강제 지정 |
ONBUILD | 이 이미지를 기반으로 다른 이미지 빌드 시 실행할 명령어 지정 |
EXPOSE | 이미지가 통신에 사용할 포트 명시적 지정 |
VOLUME | 퍼시스턴시 데이터를 저장할 경로 명시적 지정 |
ENV | 환경 변수 정의 |
WORKDIR | RUN, CMD, ENTRYPOINT, ADD, COPY에 정의된 명령어를 실행할 작업 디렉터리 지정 |
SHELL | 빌드 시 사용할 셸 변경 |
LABEL | 이름이나 버전, 저작자 정보 설정 |
USER | RUN, CMD, ENTRYPOINT에 정의된 명령어를 실행하는 사용자 또는 그룹 지정 |
ARG | docker build 커맨드를 사용할 때 입력받을 수 있는 인자 선언 |
STOPSIGNAL | docker stop 커맨드를 사용할 때 컨테이너 안에서 실행 중인 프로그램에 전달되는 시그널 변경 |
HEALTHCHECK | 컨테이너 헬스 체크 방법 커스터마이징 |
- 6-2절, 6-3절에 배운 파일 복사와 마운트를 이용한 방법
- 컨테이너에서 리눅스 명령어를 실행하는 방법
-
컨테이너에서 리눅스 명령어를 실행하려면, 명령을 전달해주는 프로그램인 **shell(셸)**이 있어야 함
-
bash를 실행하는 인자인
bin/bash
는 컨테이너 속에서 명령어를 실행하는 커맨드인docker exec
커맨드를 사용하너가docker run
커맨드를 함께 사용 -
bash를 사용한 컨테이너 조작이 끝나면 다시 docker start 커맨드로 컨테이너를 재시작해야 함
-
커맨드
docker exec (옵션) 컨테이너_이름 /bin/bash docker run (옵션) 이미지_이름 /bin/bash
-
bash를 통해 컨테이너 내부를 조작하는 동안에는 도커 명령어 사용 불가
-
컨테이너 안에서 bash를 사용해 할 일을 마쳤다면 다시 컨테이너에서 나와야 함 ⇒
exit
명령어 사용
-
- 도커 엔진을 통한 명령
- 도커 엔진 자체의 시작 또는 종료, 네트워크나 디스크 설정, 실행 중인 컨테이너 목록 확인 등 컨테이너 전체에 대한 관리 작업
- 컨테이너 내부에서 실행하는 명령
- 컨테이너 속에 새로운 소프트웨어를 추가하거나, 컨테이너 속 소프트웨어의 실행 및 종료, 설정 변경, 컨테이너 안과 밖의 파일 복사 및 이동, 삭제 작업
- 도커와 컨테이너는 별개의 언어 사용
- 도커에서 공식적으로 **“특별한 이유가 없다면 데비안 계열을 기반으로 하는 것이 좋다”**고 명확히 방침을 밝히고 있으므로, 대부분의 컨테이너는 데비안 계열임
- 컨테이너를 만들기 위해 내려받는 이미지는 도커 허브에 저장된 것
- 직접 만든 이미지도 도커 허브에 올릴 수 있으며, 비공개로 사용하는 도커 허브 같은 장소를 만들 수도 있음
- 도커 허브
- 도커 제작사에서 운영하는 공식 도커 레지스트리
- 도커 레지스트리
- 이미지를 배포하는 장소
- 레지스트리
- 이미지를 배포하는 장소
- 도커 허브는 레지스트리가 여럿 모인 형태
- 리포지토리
- 레지스트리를 구성하는 단위
-
태그
- 레지스트리에 업로드를 상정한 이미지 이름에 가까움
- “레지스트리_주소/리포지토리_이름:버전” 형식
- 도커 허브는 레지스트리_주소 대신 도커 허브 ID를 사용
-
이미지에 태그를 부여해 복제하는 커맨드
docker tag 원래_이미지_이름 레지스트리_주소/리포지토리_이름:버전
-
이미지를 업로드하는 커맨드
- docker push 커맨드를 통해 이미지 업로드
docker push 레지스트리_주소/리포지토리_이름:버전
-
비공개 레지스트리를 만드는 방법
- 레지스트리용 컨테이너(registry)가 따로 있으므로 이를 사용하면 됨
- 레지스트리는 포트 5000번 사용
docker run -d -p 5000:5000 registry
-
도커 허브 사용
- 이메일 주소만 있으면 누그든지 도커 허브에 가입할 수 있으며, 요금 플랜을 선택하면 됨
본 게시글은 그림과 실습으로 배우는 도커 & 쿠버네티스 도서를 참고하여 작성되었습니다. 상세한 내용이 궁금하시다면 책을 읽어보실 것을 추천해 드립니다.