5. 도커 명령어 및 실습
다시 한 번 강조한다면 도커는 ‘통일성과 표준’
1) 도커(Docker) 설치
- 도커는 리눅스 컨테이너 기반의 기술
- 그러므로, 리눅스 OS가 아닌 맥이나 윈도우에 설치 시 가상머신에서 설치가 됨을 유의
(1) Linux

- 리눅스에 도커를 설치하는 방법은 매우 간단함 (자동 설치 스크립트가 있음)
(2) Window
https://docs.docker.com/desktop/get-started/
-
Docker for Windows 설치 필요
- 리눅스가 아니기 때문에, 네이티브가 아닌 가상머신 위에서 동작함 (하지만 네이티브에서 동작한다는 착각이 들 정도로 속도는 차이가 없음)

-
가상화 ‘사용’ 여부 확인

- Windows + S → ‘Windows 기능’ → Hyper-V 체크 → 확인을 눌러 설치
https://docs.docker.com/desktop/install/windows-install/
- 해당 링크에 접속하여 Docker Desktop Install 다운로드


- log out 을 누르면 컴퓨터가 종료되니 주의하세요!

- 재부팅이 완료되면 작업표시줄에 도커 아이콘이 나타납니다.
(3) Mac
https://www.docker.com/products/docker-desktop

- 다운로드한 .dmg 파일을 실행하여 Docker.app 을 응용 프로그램으로 복사

2) 도커 튜토리얼(Pass)

(1) 레파지토리(저장소) 복제

- 시작하기 프로젝트는 이미지를 빌드하고 컨테이너로 실행하는 데 필요한 모든 것을 포함하는 간단한 GitHub 저장소입니다.
- 컨테이너에서 Git를 실행하여 리포지토리를 복제합니다.
- 명령줄 인터페이스에 직접 명령을 입력할 수도 있습니다.

(2) 이미지 빌드하기

- 도커 이미지는 컨테이너 전용 개인 파일 시스템입니다.
- 컨테이너에 필요한 모든 파일과 코드를 제공합니다.
(3) 컨테이너 실행

- 이전 단계에서 빌드한 이미지를 기준으로 컨테이너를 시작합니다.
- 컨테이너를 실행하면 시스템의 나머지 부분과 안전하게 격리된 개인 리소스를 사용하여 애플리케이션이 시작됩니다.

(4) 이미지 저장 및 공유

- 다른 사용자가 모든 대상 시스템에서 이미지를 쉽게 다운로드하고 실행할 수 있도록 Docker Hub에 이미지를 저장하고 공유합니다.
3) Docker Client and Host


- Client 와 Server 영역이 있는 것을 확인할 수 있음
- docker client 에서 command 를 입력하면 (ex, docker run)
- 도커 client 가 명령을 docker host 로 전송하고 결과를 받아 터미널 창에서 보여주게 됨
- Docker Client
- Command 를 입력하면 docker client 에서 명령어를 Host 로 전송하여 daemon 에서 처리하게 됨
- 클라이언트는 둘 이상의 데몬과는 통신할 수 없음
- Docker Daemon
- API 요청을 수신하고, 이미지, 컨테이너, 네트워크와 같은 Docker Object 를 관리하는 역할을 수행
- 데몬은 Docker 서비스를 관리하기 위해 다른 데몬과 통신할 수 있음
→ 도커는 서버와 클라이언트의 역할을 각각 수행 할 수 있고, 클라이언트가 서버로 명령을 보내 처리 결과를 출력해 주는 방식을 가짐
4) 컨테이너 실행하기
$docker run [OPTIONS][IMAGE:TAG]
- 도커를 이용 → 컨테이너를 실행
- run 명령어 → Image 를 컨테이너로 실행
- run 시킨 이미지가 로컬 registry 에 없을 경우? 자동으로 docker hub 를 통해 image 를 pull 받아 온 뒤 실행
- 컨테이너 실행에서 자주 쓰이는 옵션은 다음과 같다.

5) 컨테이너로 우분투(Ubuntu) 실행하기
$docker run ubuntu:18.04

- 처음에는 local 에서 ubuntu:18.04 이미지의 유무를 체크
- 이미지가 없는것을 확인 후, library/ubuntu ← 도커 허브에서 이미지를 pull 받음
컨테이너가 실행중 이라는 것을 어떻게 확인할 수 있을까요?
$docker ps
$docker ps -a (현재 중지되어있는 컨테이너까지 확인)

- 하지만, ubuntu 컨테이너는 찾을 수 없음! 그 이유는?
- → 컨테이너는 프로세스이기 때문, 실행중인 프로세스가 없다면 컨테이너는 종료됨
- 컨테이너는 정상 실행되었지만, 실행중인 프로세스가 없어 종료된 것임
$docker run --rm -it ubuntu:18.04 bash
- ubuntu 컨테이너를 실행 → bash 명령어를 실행
- -it 옵션을 통해서 쉘에 키보드 입력을 할 수 있도록 함
- ls 명령어를 통해 ubuntu 를 실행 시켰음을 확인
$docker images

- image list 를 확인하는 명령어인 ‘docker images’
- ubuntu image 가 Pull 되어있는 것을 확인할 수 있다!
6) 컨테이너로 톰캣(Tomcat) 실행하기

- 이번에는 Tomcat 을 컨테이너로 실행합니다!
- docker run 명령어를 실행하자, local 에서 이미지를 찾고, 이미지가 없으니 docker hub 에서 이미지를 Pull 받아옴
$docker run -d -p 8080:8080 --name tomcat-test tomcat
- -d 옵션은 컨테이너를 백그라운드에서 돌리고 컨테이너 ID 를 출력하는 옵션, -detach
- 터미널 종료와 상관없이 컨테이너를 실행시키기 위함
- -p 옵션은 host 와 컨테이너의 port 를 연결해주는 옵션
- host 의 8080 포트와 container 의 8080 포트를 연결함
- tomcat image 로 컨테이너 실행
- 이때 tag 붙이지 않으면 → default 값 :lastest 태그 (최신 버전 이미지 Pull)
실제로는, 404 에러가 나오는 페이지가 나올것임
docker exec

- -it 옵션을 사용하여 직접 터미널에 접속
- docker exec -it tomcat-test(지정했던 컨테이너 이름) /bin/bash(실행 경로)
- mv 명령어는 move 와 같은 의미 → mv webapps.dist 를 webapps 로
접속 성공 확인
7) 컨테이너 정지 및 삭제
$docker stop [options] conainer
$docker rm [options] container


- docker ps -a 명령어를 입력하면 정지되어 있는 컨테이너 까지 모두 확인이 가능하다!

- docker rm ID… 를 입력하여 영구 삭제가 되었다!
- ID 가 아니라 docker rm ‘tomcat-test’ 라고 컨테이너 명을 입력하여도 됩니다
즐거운 컨테이너와 도커 알아보기 끝 ^^!