[Docker] Container command
Updated:
docker version // verified cli can talk to engine
docker info // most config values of engine
Docker command line structure
- old (still work) : docker <command> (options)
- new : docker <command> <sub-command> (options)
Image vs. Container
- 이미지는 실행시키고 싶은 어플리케이션
- 컨테이너는 프로세스로 실행되는 이미지 인스턴스
- 같은 이미지를 이용해 많은 컨테이너 실행 가능
docker container run --publish 80:80 nginx
// nginx를 Docker hub에서 다운로드
// 이미지를 이용해 컨테이너 실행
// host ip 에서 80 포트 사용
// contianer ip 에서 80 포트 사용
docker container run 명령어가 하는 일
- 이미지 캐시에서 이미지 찾기
- 캐시에서 못 찾으면, 이미지 repository (default to Docker hub)에서 찾기
- 버전 지정 안 할 시 최신 버전으로 이미지 다운
- 이미지를 기반으로 새로운 컨테이너 생성
- 도커 엔진의 private network에 가상 ip 제공
- host에서 80포트 개방, 컨테이너에서 80포트 포워딩
- image Dockerfile의 명령어로 컨테이너 실행
docker container top // process list in one container
docker container inspect // details of one container configg
docker container stats // performance stats for all containers
docker container run -it // start new container interactively
docker container exec -it // run additional command in existing container
Docker Networks Defaults
- 각 컨테이너는 private virtual network “bridge”에 연결됨
- 각 가상 네트워크는 호스트 IP의 NAT 방화벽을 이용해 라우팅
- 가상 네트워크의 모든 컨테이너는 -p 없이 서로 통신 가능
- 가장 좋은 방식은 각 앱마다 새로운 가상 네트워크 생성
- network “my_web_app” for mysql and php/apache containers
- network “my_api” for mongo and nodejs containers
CLI Management
docker network ls // Show networks
docker network inspect // Inspect a network
docker network create --driver // Create a network
docker network connect // Attach a network to container
docker network disconnect // Detach a network from container
Docker networks: DNS
- DNS는 이컨테이너 끼리의 inter-communication을 이해하는 것
- 컨테이너는 inter-communication을 위해 IP 응답을 하지 않음
docker container exec -it my_nginx ping new_nginx
// IP를 따로 이용하지 않고 name setting으로 ping 통신
Leave a comment