본문 바로가기
  • 실행력이 모든걸 결정한다
Docker

[Docker] Docker 기본 사용법

by 김코더 김주역 2021. 12. 29.
반응형

Docker 명령어 모음 공식 문서

https://docs.docker.com/engine/reference/commandline/exec/

 

1. Docker란?

- Linux의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행 및 관리하는 오픈 소스 프로젝트

※ Container(컨테이너) : 일종의 소프트웨어소프트웨어의 실행에 필요한 모든 것들과 함께 감싸는 시스템이다. 이 안에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 포함될 수 있다.

- 가상 머신의 역할을 넘어, 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증하는 애플리케이션 컨테이너를 관리하는 도구

 

 

 

2. Docker 설치

- 아래에 링크한 Docker 공식 docs에서 Docker를 설치할 수 있다. 자신의 운영체제에 맞게 설치를 진행하자.

(필자의 실습 환경은 Window이다.)

https://docs.docker.com/get-docker/

 

Get Docker

 

docs.docker.com

 

- 만약 WSL 2 설치에 실패했다는 메시지가 나왔다면, 아래 링크의 절차대로 수행하면 잘 동작할 것이다.

해결 : https://blog.nachal.com/1691

 

WSL 2 installation is incomplete, 윈도우10 도커 설치시 리눅스 커널 업데이트, Docker Linux Kernel Update on Wind

윈도우에서 도커를 설치하다가 WSL2가 설치되지 않았다는 오류 메세지가 뜨면, 리눅스 커널 업데이트를 해야 합니다. 뭔 윈도우에 리눅스 커널이야?!?!? 1. 파워쉘을 관리자 권한으로 실행 (파워쉘

blog.nachal.com

 

- Docker를 처음 시작했다면 아직 아무 컨테이너도 존재하지 않을 것이다.

- 명령 프롬포트 또는 Windows Powershell(관리자 권한으로 실행하는 것을 권장함)에서 아래 명령어를 입력해보자.

 

- 잘 생성 되었다.

 

 

 

3. 용어 이해

- Docker hub를 "스토어"라고 보면, Image는 "스토어"에서 다운받는 "프로그램"의 개념이라고 생각하면 된다.

- Image를 "프로그램"이라고 보면, Container은 "프로그램"을 실행하는 "프로세스"의 개념이라고 생각하면 된다. 즉, Image는 여러 개의 Container들을 가질 수 있다.

- Pull : Docker hub에서 Image를 다운받는 것

- Run : Image에서 Container을 실행시키는 것

- Docker Host : Container가 설치된 운영체제

 

 

4. Image

- 먼저, https://hub.docker.com/ 에서 Explore에 들어간다.

 

- 필자는 Apache가 포함되어 있는 httpd 컨테이너를 선택했다.

 

- 컨테이너를 선택하면 Image를 pull할 수 있는 명령어를 알려주기 때문에, 쉽게 원하는 Image를 다운받을 수 있다.

 

- 메뉴 아이콘을 클릭하면 Image를 관리할 수 있는 항목들이 나온다.

 

 

 

5. Container

1) docker desktop 사용

- 여러분이 설치한 Image에 커서를 놀리면 우측에 [RUN] 버튼이 생긴다. 이 버튼을 클릭한다.

 

- Image의 Container을 생성하는 단계다.

- Ports의 Local Host는 외부에 열어둘 포트 번호를 의미하는데, 자세한 내용은 잠시 후에 설명할 것이다.

 

- 잘 추가 되었다.

 

- 컨테이너를 누르면 로그, 상세 정보, 통계 정보를 확인할 수 있고, 아이콘을 통해 중지, 재시작, 삭제를 진행할 수도 있다.

 

 

2) CLI 사용

자세한 명령어는 https://docs.docker.com/engine/reference/commandline/exec/ 를 참조할 것.

 

- Container 생성

docker run --name [컨테이너 이름] [Image 이름]

※ -d 옵션 : 컨테이너를 background에서 실행하고, 컨테이너 ID를 출력

※ -p 옵션 : 포트 포워딩 설정

 

- 컨테이너 목록 조회

docker ps

※ -a 옵션 : 모든 상태의 컨테이너 목록을 조회

 

- 컨테이너 시작

docker start [컨테이너 이름]

 

- 컨테이너 중지

docker stop [컨테이너 이름]

 

- 로그 확인

docker logs [컨테이너 이름]

※ -f 옵션 : 실시간 로그 출력

 

- 컨테이너 삭제

docker rm [컨테이너 이름]

※ 기본적으로 실행중인 컨테이너는 지울 수 없음

※ --force 옵션 : 컨테이너가 실행중이더라도 강제로 삭제

 

- 이미지 삭제

docker rmi [Image 이름]

 

 

 

6. Docker Host

- 외부에서 컨테이너에 접근하기 위해서는 먼저 컨테이너가 설치된 Docker Host 서버에 접근해야 한다. 그리고, 우리들은 미리 Host의 포트와 컨테이너의 포트를 연결해놓아야 한다.

※ 이 경우에도 포트 포워딩이라는 용어를 사용한다.

- 처음에 우리가 입력했던 명령어에서 "-p 80:80" 부분의 의미가 Host 서버의 80번 포트(앞)를 컨테이너의 80번 포트(뒤)와 연결하겠다는 뜻이 되는 것이다.

 

즉, 아래의 설정을 명령어로 나타내면 다음과 같다.

docker run --name httpdCon1 -p 8080:80 httpd

 

- 컨테이너의 Apache 서버에 접속을 시도해보면, 잘 접속 되는 것을 확인할 수 있다.

 

- localhost:8080으로 접속한 웹 페이지에 대한 문서는 httpd 컨테이너의 어디에 저장되어 있는 걸까? 컨테이너의 CLI로 접속하여 확인해보자.

 

- pwd 명령어는 현재 디렉토리의 위치를 표시한다. 기본 위치는 /usr/local/apache2 임을 알 수 있다.

 

- 만약, 명령 프롬포트를 사용한다면, 아래 명령어가 위의 동작과 동일할 것이다.

docker exec -it [컨테이너 이름] /bin/sh pwd

※ /bin/sh : shell의 절대경로

※ -it 옵션 : 연결을 계속 유지

 

- ls 명령어는 현재 디렉토리에 있는 파일들과 하위 디렉토리들의 목록을 표시한다.

- apache는 기본적으로 htdocs라는 디렉토리를 가지며, htdocs 디렉토리는 apache가 웹 문서를 찾는 최상위 디렉토리이다. index.html 파일은 /usr/local/apache2/htdocs/index.html 경로로 존재하는 것을 확인할 수 있다.

- 참고로, 기본적으로 index 파일은 파일명을 생략해도 되는 것으로 약속되어 있다.

 

 

 

7. 파일 시스템 연결

- Docker 컨테이너의 /usr/local/apache2/htdocs 디렉토리와 내 컴퓨터(호스트)의 파일 시스템과 동기화하고 싶다면 다음 명령어를 사용하면 된다.

docker run -p 8080:80 -v [로컬 호스트 파일 시스템 경로]:/usr/local/apache2/htdocs/ httpd

※ APM_Setup의 경우 : C:\APM_Setup\htdocs

 

반응형

'Docker' 카테고리의 다른 글

[Docker] Dockerfile / docker-compose.yml 파일  (0) 2021.12.31

댓글