[docker] docker 기초
Docker
1. Docker ?
Linux 컨테이너 기반. 애플리케이션을 쉽고 신속하게 구축, 테스트 및 배포할 수 있는 오픈소스 플랫폼. 기존 VM과는 다르게 호스트 OS를 그대로 사용하고 컨테이너라는 유닛을 사용하여 호스트의 리소스를 공유하여 효율적인 환경을 제공함.
Docker hub ≒ App store Image ≒ Program Container ≒ Process
이미지들은 리눅스 베이스이므로 리눅스 OS가 필요하지만 따로 세팅하지 않아도 도커가 알아서 처리함.
2. Docker의 장점
- 운영 표준화
- ‘이미지’만 만들어 전달하면 환경 세팅 필요 없이 배포 가능
- 로컬에서 개발하여 클라우드 환경에서의 배포 가능
- 이미지의 크기가 작아 배포 속도가 빠르고 여러개의 컨테이너를 동시에 구동할 수 있음
- 애플리케이션의 독립성과 확장성
- 여러 모듈(Micro Services)로 구성되기에 배포/운영/확장이 유연함
- 각 모듈에게 독립된 환경을 제공함
3. Dashboard
CLI(Comand Line Interface/명령어 입력 방식)인 기본 도커를 GUI(Graphic User Interface/그래픽 기반 인터페이스)로 도와줌.
하지만 도커의 중심은 CLI!
Dashboard가 있고 어떻게 사용하는지만 기본적으로 알아두면 충분.
4. Docker Command
정확한 참고는 Docker Docs-Reference
Window10 기준 - 명령 프롬프트(cmd) 또는 Windows PowerShell 이용
Docker Desktop Download for Windows 할 경우 추가로 WSL2를 설치 해야 함. (알림 팝업창이 뜬다!) WSL은 Windows Subsystem for Linux의 약자로, windows10에 리눅스를 하위 시스템으로 설치 하게 됨.
-
모든 명령어는 docker를 앞에 붙여 사용한다.
-
생활코딩 - docker 입문 수업에서는 apache webserver(docker hub에서 검색해보면 httpd라는 이름)를 기준으로 실습을 진행하여 이 글도 해당 강의를 바탕으로 작성 하겠다.
명령어 역할 예시 pull 이미지를 다운 받기 docker pull httpd images 다운 받은 이미지 목록 보기 docker images
tag의 latest는 최신버전이라는 의미run 이미지 실행 docker run httpd [--name 설정할 이름] run과 함께 사용 시
실행하는 컨테이너 이름 설정 옵션docker run --name ws2 httpd
[ ]부분들은 옵션. 생략 가능stop 실행된 컨테이너 멈추기 docker stop ws2
(Container ID || name)ps 컨테이너 리스트
(default 실행중인 것만)docker ps [-a || --all] 모든 컨테이너 리스트 옵션
실행 멈춘 컨테이너까지docker ps -a </tr>start 컨테이너 재실행
(run은 새로운 컨테이너 실행)docker start ws2 logs 로그 보기(default 일회성 명령) docker logs ws2 [-f || --follow] 출력되는 모든 로그 보기 옵션 docker logs -f ws2 rm 컨테이너 삭제
실행 중이면 에러. stop 후 진행docker rm ws2 [--force || -f] 컨테이너 강제 삭제 옵션
실행중이어도 삭제됨docker rm --force ws2 rmi 이미지 삭제 docker rmi httpd 도커가 설치되어 있는 곳이 host OS 하나의 호스트에 여러개의 컨테이너를 올릴 수 있음. 호스트와 컨테이너는 독립적인 시스템을 가지므로 각자의 포트와 파일 시스템을 가짐.
docker run httpd만 했을 경우엔 현재 호스트와 컨테이너의 연결은 끊겨 있는 상태. 포트와 포트를 연결해주려면 docker run -p 80:80 httpd의 식으로 명령하여 연결. 이렇게 포트를 연결하여 전송하는 것을 Port forwarding라 한다.
[-p || --publish] port:port 포트 포워딩 실행 옵션 docker run --name ws3-p 8080:80 httpd
앞에 있는 포트 번호는 호스트 포트
뒤에 있는 포트 번호는 컨테이너 포트exec 컨테이너 안에서 명령 실행
(default 일회성 명령)docker exec ws3 pwd || ls
ws3의 pwd(현재 디렉토리의 절대 경로를 출력)
ls(현재 디렉토리의 내용을 출력)[-i || --interactive] 연결되지 않은 경우에도 STDIN을 여는 옵션
STDIN : Standard Input, 표준 입력 스트림docker exec -i ws3 [-t || --tty] 가상 터미널 할당 옵션
STDIN : Standard Input, 표준 입력 스트림docker exec -it ws3 /bin/sh
ws3안으로 진입(기본 쉘로)exit 컨테이너 안에서 다시 호스트로 나오기 exit cd change Directory . 현재 디렉토리 .. 이전 디렉토리 -
컨테이너 안에서 수정할 것이 있다면 직접 진입하여 수정할 수도 있으나 불편하고 위험할 수 있으며 번거로움 ∴ 호스트에서 해당 파일을 수정해서 컨테이너에 적용하기
docker run -p 8888:80 -v C:\Users\Elly\Desktop\htdocs\:usr/local/apache2/htdocs/ httpd
이런 식으로 하면 포트 포워딩하며 호스트의 파일과 컨테이너의 파일을 연결하여 실행 -v는 –volume, 호스트와 컨테이너의 디렉토리를 연결하는 옵션(마운트)
⇒ 호스트 환경 안에서 파일에 대한 버전 관리라던지, 백업, 에디터로 코드를 편집 한다던지의 작업이 가능하다. (호스트에서 해당 파일 수정시 즉시 컨테이너에 적용됨)
5. ETC
- 하나의 이미지는 여러개의 컨테이너를 가질 수 있다.
- container는 가볍기에 자잘한 파일들은 가지고 있지 않을 수 있다. 해당 컨테이너 패키지를 업데이트 하려면 apt update 라는 명령어로 추가 다운을 한다.
- 컨테이너는 쉽게 만들고 쉽게 없애는 용도이므로 쉽게 날라갈 수 있다. 만약 중요한 컨테이너라면 이미지로 만들어 저장한다.
댓글남기기