[출처] 유데미 - Docker & Kubernetes : 실전가이드
docker cp <host path>:<container path>
docker cp <container path> : <host path>
name : 이미지의 고유 식별자 (=프로그램 이름)
tag : name 안에서 사용되는 고유 식별자 (=버전)
이미지 태그 부여 방법
Docker Image의 tag 변경 방법
# 변경할 태그는 생략할 경우 자동으로 lastest로 설정
docker tag <기존 리포지토리 이름>:<기존 태그> <변경할 리포지토리 이름>:<변경할 태그>
# tag 변경 후 Docker Hub에 업로드(Docker id 로그인 필요)
docker tag <기존 리포지토리 이름>:<기존 태그> <Docker id/리포지토리 이름>:<변경할 태그>
docker push <Docker id/리포지토리 이름>
단, 이전에 이미지를 실행한 이력이 있으면 이미지의 업데이트 여부를 확인하지 않고 당시 이미지를 기준으로 컨테이너가 실행되기 때문에 업데이트가 있는지 확인이 필요한 경우 pull을 한 뒤 run을 해야한다.
Docker 이미지 → 컨테이너 생성 예제
# f-node 이미지로 컨테이너를 생성하며 포트는 외부 3000번 포트를 통해
# 내부 80포트로 연결될 수 있도록 설정하고 detach 모드로 실행
# 생성되는 컨테이너의 이름은 f-app이며 컨테이너가 중지됨과 동시에 컨테이너는 사라진다.
docker run -p 3000:80 --rm -d --name f-app f-node
-v VOL_NAME
docker volume rm VOL_NAME
또는 docker volume prune
을 통해 익명 볼륨을 삭제 해야한다.-v HOST_NAME:VOL_NAME
-v HOST_ABS_PATH:VOL_NAME
-v HOST_ABS_PATH:VOL_NAME:ro
: read only 읽기 전용 모드-v $(pwd):/app
-v "%cd%":/app
.git
, Dockerfile
등 이미지에 필요 없는 파일을 제외localhost
를 host.docker.internal
로 대체하면 컨테이너와 호스트의 통신이 가능하다.docker container inspect <CONT_NAME>
을 입력 후 NetworkSettings를 참조하면 해당 컨테이너의 IP를 알 수 있으며 이를 이용해 컨테이너끼리 통신할 수 있다.--network <NET_NAME>
옵션을 통해 여러 컨테이너를 하나의 네트워크로 묶을 수 있다.docker network create <NET_NAME>
을 통해 도커 내부 네트워크를 만들어 둔 상태로 생성해야 사용이 가능하다.localhost(=127.0.0.1) -> <CONT_NAME>
처럼 IP 대신 컨테이너 이름을 넣어주면 네트워크 내부 컨테이너 사이의 통신이 가능하다.version: "3.8"
services:
<SERVICE1>:
image: <IMG_NAME>
volumes:
- <SERVICE_PATH> # Anonymous volume
- <HOST_PATH>:<SERVICE_PATH> # Named volume
environment:
- <ENV_NAME1>:<VAR1>
- <ENV_NAME2>:<VAR2>
env_file:
- <RELATIVE PATH> # docker-compose.yaml 기준의 상대 경로
ports:
- '80:80'
depends_on:
# 해당 서비스가 다른 서비스에 의존성을 가질 경우 표기
- <SERVICE_NAME>
- ...
# -i
stdin_open: true
# -t
tty: true
# 컨테이너의 이름을 직접 짓고 싶을 떄 사용
container_name: <VAR_NAME>
<SERVICE2>:
build:<REALTIVE PATH> #이미지를 빌드하기 위한 Dockerfile의 경로
...
volumes:
<VOL_NAME>: # Named volume만 기재
docker-compose up
을 입력하면 서비스가 실행되며 docker-compose up -d
를 하면 서비스를 백그라운드에서 실행할 수 있다.docker-compose down
을 입력하면 서비스가 종료되며 docker-compose down -v
를 입력하면 서비스에서 생성됐던 볼륨까지 같이 삭제가 된다.