파일 복사는 container > host, host > container 모두 가능
# host -> container
docker cp <host-path> <container-name or container-id>:<container-path>
# container -> host
docker cp <container-name>:<container-path or container-id> <host-path>
volume - storage의 한 영역을 분할하는 것
data persistency - container는 생성과 폐기가 매우 빈번하기 때문에 매번 데이터를 옮기는 방법 대신 생성부터 container 외부에 데이터를 두고 container에서 외부 데이터에 접근하는 방식을 사용
도커 엔진이 관리하는 영역 내에 만들어진 볼륨을 container에 disk형태로 mount
host 컴퓨터의 문서 또는 폴더 등 도커 엔진에서 관리하지 않는 영역의 기존 directory를 container에 mount하는 방식
disk가 아닌 ram memory 영역을 mount
# storage 생성
docker volume create <volume-name>
# storage 삭제
docker volume rm <volume-name>
# storage 모두 삭제
docker volume prune
# volume mount
docker volume create koos_storage
docker run -it -v koos_storage:/root ubuntu
docker volume rm koos_storage
# bind mount
docker run -it -v $(pwd):/root ubuntu
volume mount는 backup을 하기 위해서 별도의 container를 필요로 한다
container의 생성과 동시에 container밖으로 압축 내용을 내보낼 수 있다
docker run --rm -v <volume-storage-name>:/source -v <host-path>:/target busybox tar cvzf /source/<압축이름.tar.gz> -C /source .
-v :/source - /source에 volume mount
-v :/target - host path를 /target에 bind mount
tar czvf /source<압축이름.tar.gz> -C /source . - source에 압축파일을 저장, -C는 압축할 경로를 지정
container로 image를 생성하면 동일한 구성의 container를 대량으로 생산할 수 있고, 다른 컴퓨터나 서버에 container를 이동시킬 수 있다
docker commit <container-name> <image-name>
Dockerfile script를 작성하고 script를 build해 image를 생성하는 방법
docker build -t <image-name> <image-재료-path>
Dockerfile script 예시
FROM <image-name>
COPY <source-path> <dest-path>
RUN ...
...
container는 image로 변환하지 않으면 옮기거나 복사할 수 없다. 하지만 image도 그대로 옮길 수 없기 때문에 먼저 docker engine에서 압축하여 관리 영역으로 내보내야 옮길 수 있다.
docker save -o <file-name>.tar <image-name>
파일 복사와 mount를 이용하는 방법
container 내부에서 리눅스 명령어를 사용하는 방법
exec - container 속에서 명령어를 실행하는 command
bash 없이도 어느 정도 명령어를 직접 전달할 수 있다. 하지만 초기 설정이 없어 동작하지 않는 경우도 있기 때문에 기본적으로 shell을 통해 명령을 실행한다.
기본적으로 프로그램이 하나씩 실행되기 때문에 shell을 실행하면 container 안에 있는 프로그램은 실행되지 않는다. 그렇기 때문에 shell로 container 조작을 끝낸 후, 다시 docker start로 container를 재시작해주어야 한다.
정말 좋은 글 감사합니다!