Docker
- 코딩을 통해 프로그램을 만들고 난 후 다른사람과 공유를 해야하는 경우나 다른 기계에서 작업을 하는 경우가 자주 생긴다.
- 예를들면
NodeJS
의 버전이 다르다던지 운영체제가 다르다던지 해서 돌릴수가 없는 경우가 생긴다.
- 이럴때
Docker
를 사용하면 이 상황을 해결해 준다.
What to know
Docker
- 서로 다른 환경에서 소프트웨어를 가상으로 구동 가능하게 해주는 툴, 컨테이너를 관리하는 플랫폼.
Image
- 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 파일. Immutable(변하지 않음).
- 이미지를 실행하면 컨테이너가 생김.
- 이해를 돕기 위한 비슷한 예시: OS img파일.
docker images
docker rmi $(docker images -q)
docker pull {image_name}:{tag}
docker create {option} {image_name}:{tag}
- Options / Explanation
- -d: run it as a daemon(background)
- -it: Entering a container and using CLI
- --name: naming a container
- -p {host’s port num}:{container’s port num}: connecting host’s port and container’s port
- -v {host’s directory}:{container’s directory}: connecting host’s directory and container’s directory
Layer
- 도커 이미지는 컨테이너를 실행하기 위한 정보를 담고 있기 때문에 용량이 수백 MB에 달한다.
- 한번 빌드할 때 마다 어느정도 시간이 소요되고 이미지를 수정할 때 마다 상당한 시간이 소요된다.
- 이를 해결하기 위해
layer
라는 개념을 도입했다.
- 여러개의
layer
로 구성된 이미지는 특정 이미지가 수정되면 해당 이미지만 수정후 빌드하면 되므로 굉장히 효율적으로 이미지를 관리할 수 있다.
Container
- 이미지를 실행한 상태, 독립된 가상 공간, 프로그램이 돌아가는 곳.
- 같은 이미지에서 여러개의 컨테이느 생성 가능, 컨테이너가 수정되어도 이미지는 불변.
- 가상머신과 비슷해 보이지만
VM
은 한 물리적 컴퓨터에서 각각의 OS
를 가상으로 돌리며 물리적 자원을 분할해서 사용한다, 하지만 도커는 실행환경을 독립적으로 구동하는 구조라 OS
단까지 내려가지 않는다. 따라서 컴퓨터에 직접 프로그램을 설치한 것과 별 차이 없는 속도를 뽑아낼 수 있다.
docker container ls
docker attach {container_id || container_name}
docker run {image_name}:{tag}
docker start {container_id || container_name}
docker rm {container_id || container_name}
docker rm $(docker ps -aq)
docker system prune -a
docker stop $(docker ps -aq)
Dockerfile
- DNA와 비슷하다고 보면 된다, 도커에게 어떤식으로 빌드할지 알려주는 내용을 포함하고 있다.
docker container ls
docker build -t {image_name} .
docker-compose.yml
- 여러개의 컨테이너로 이루어진 서비스를 일괄적으로 한번에 관리하는 용도.
docker-compose up