Docker 기초
Docker은 컨테이너 기술을 지원하는 대표적인 프로젝트이다.
그럼 컨테이너 기술이란 과연 무엇일까?
VM vs Container
현재 사용하는 pc 혹은 맥에서 virtualbox라는 프로그램을 통해 우분투나 centos 같은 리눅스 시스템을 설치하여 구동하는 것이 가능하다.
이는 대표적인 VM이다.
VM은 호스트 OS 위에 가상화를 시켜주는 하이퍼바이저가 실행이 되고 각 환경별로 게스트 os가 설치되며 해당 게스트 os 위에 부가적인 라이브러리나 패키지들이 설치되는 방식이다.
하지만 conatainer의 경우 VM과 마찬가지로 격리되어 있는 가상머신이나, 호스트 os 위에 별도의 하이퍼바이저가 실행이 되지 않고 각 컨테이너에도 게스트 os가 설치되지 않기 때문에 VM 보다 훨씬 효율적이다.
Images and Containers in Docker
- 이미지: 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
- 컨테이너 : 이미지를 격리하여 독립된 공간에서 실행한 가상 환경
컨테이너 구동 방법
-
리눅스 네임 스페이스: 각 프로세스 별로 파일 시스템 마운트, 네트워크, 유저 등에 대해서 독립 뷰를 제공하여 컨테이너는 독립적일 수 있다.
-
리눅스 컨트롤 그룹 : 프로세스로 소비할 수 있는 리소스들을 분배하고 제한한다.
Docker Registry
-
리눅스 네임 스페이스: 각 프로세스 별로 파일 시스템 마운트, 네트워크, 유저 등에 대해서 독립 뷰를 제공하여 컨테이너는 독립적일 수 있다.
-
리눅스 컨트롤 그룹 : 프로세스로 소비할 수 있는 리소스들을 분배하고 제한한다.
Docker Registry
도커 사용자가 이미지를 쉽게 푸시하고 풀 받을 수 있게 도와주는 서비스.
대표적인 docker registry는 docker hub
Docker Life Cycle
Registry에서 이미지를 pull 받았을때 이 이미지를 실행 시키기 위해서는 컨테이너를 생성 시켜줘야 하는데 이 때 사용하는 명령어가 'create'이다.
Create 된 컨테이너를 'start'하여 구동할 수 있으며, 'run'을 통해 생성과 구동을 동시에 할 수 있다.
Stop 된 컨테이너를 다시 run 시킬 경우 컨테이너를 다시 생성하기 때문에 주의해야한다.
Pull Image
docker pull ubuntu
해당 명령어로 docker hub에 있는 ubuntu 이미지를 받는다
Run(create + start) Container
docker run -d --name ubu ubuntu
-d는 백그라운드에서 실행하게 하는 명령어이며 --name을 통해 컨테이너 명을 지정할 수 있다.
Stop Container
docker stop ubu
컨테이너 명이나 docker ps를 통해 확인한 컨테이너 아이디로 먼출 수 있다
Remove Container
docker rm ubu
stop과 마찬가지로 컨테이너 아이디로도 가능하다
Image Layer
하나의 이미지에는 이 이미지를 실행하기 위한 여러 레이어가 존재한다.
이런 이미지 레이어 관련 내용은 /var/lib/docker/overlay2 경로에서 확인 가능하다
유용한 명령어
- 실행 될 포트 지정
docker run -d --name tc -p 80:8080 tomcat
docker run -d --name tc -p 80:8080 tomcat
원래는 8080포트가 디폴트 값이나 80포트에서 실행되게 된다.
- 컨테이너 내부 셸 실행
docker exec -it tc /bin/bash
- 호스트 및 컨테이너 간 파일 복사
docker cp <path> <to container>:<path>
docker cp <from container>:<path> <path>
docker cp <from container>:<path> <to container>:<path>
- 도커 컨테이너 모두 삭제
docker stop `sudo docker ps -a -q`
docker rm `sudo docker ps -a -q`
- 환경 변수 전달하기
docker run -d --name nx -e env_name=test1234 nginx
- 볼륨 마운트
docker run -v <호스트 경로>:<컨테이너 내 경로>:<권한>
권한 종류
- ro: 읽기 전용
- rw: 읽기 및 쓰기
도커 이미지 생성 방법
이미지를 만들 프로젝트 경로에 Dockerfile을 생성한다
개인적으로 진행했던 스포티파이 음악 추천 프로젝트를 이미지화 하였던 경험이 있다.
아래 이미지와 같이 프로젝트와 같은 경로에 Dockerfile을 생성한다.
언어 별로 조금씩 실행 방법이 차이가 있으며 자바의 경우는 jar파일로 실행을 하면 되기 때문에 entrypoint에 해당 내용을 넣어준다.
Dockerfile이 있는 경로에 가서 docker build를 해주면 이미지가 생성 되는 것을 확인할 수 있다.
도커 이미지 푸시
도커허브에 푸시 방법
docker login
dokcer tag 이미지명 유저명/업로드할 이름
docker push 유저명/업로드할 이름
Pritvate Registry 푸시 방법
- private registry 생성
docker run -d --name docker-registry -p 5000:5000 registry
127.0.0.1:5000/v2/에서 정상적으로 생성이 됐는지 확인
- 푸시하기
docker tag 이미지명 127.0.0.1:5000/이미지명
docker push 127.0.0.1:5000/이미지명
Author And Source
이 문제에 관하여(Docker 기초), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ubrain/Docker-기초저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)