Docker

도커 사용법

하카데미 2023. 11. 30. 13:31

컨테이너 실행하기

docker container run : 컨테이너로 애플리케이션을 실행하라는 명령어

docker container run dialcom/ch02-hello-diamol

'dialcom/ch02-hello-diamol' 이미지를 이용해 컨테이너를 실행하라는 의미

이미지를 이용해 컨테이너를 실행하려면 먼저 이미지가 있어야 함.
만약 이미지를 갖고 있지 않다면,
unable to find image locally 라는 메시지가 출력됨.
그리고 도커가 이미지를 내려받는 과정이 진행됨.
이때 이미지를 내려받는 것을 pull이라고 함.

도커와 가상머신의 차이

도커

서로 독립적인 환경을 갖지만 상자가 실행되는 컴퓨터의 cpu와 메모리, 운영체제를 공유

 

가상머신

호스트 컴퓨터의 운영체제를 공유하지 않고 별도의 운영체제를 필요로 한다. 때문에 애플리케이션이 사용해야 할 cpu와 메모리 자원을 상당량 차지한다. 또 운영체제의 라이선스 비용과 운영체제 업데이트 설치 부담이 추가로 생긴다.

 


컨테이너를 원격 컴퓨터처럼 사용하기

docker container run --interactive --tty diamol/base


--interactive 플래그

컨테이너에 접속된 상태가 됨.

 

--tty 플래그

터미널 세션을 통해 컨테이너를 조작하겠다는 의미.

컨테이너 ID

도커는 컨테이너를 실행할 때마다 무작위로 ID 값을 부여함.

 

docker container logs 컨테이너ID

컨테이너에서 수집된 모든 로그 출력.

 

docker container inspect 컨테이너ID

컨테이너의 상세한 정보를  JSON형태로 보여줌.

- 컨테이너의 가상 파일 시스템상의 경로, 컨테이너에서 실행 중인 명령, 해당 컨테이너가 접속된 가상 도커 네트워크 정보등 애플리케이션에 발생한 문제를 추적하는 데 유용한 정보가 제공됨.

 

 


컨테이너를 사용해 웹 사이트 호스팅하기

docker container ls --all

컨테이너 상태와 상관 없이 모든 컨테이너 목록 확인.

 

docker container run --detach --publish 8088:80 diamol/ch02-hello-diamol-web


--detach 플래그

컨테이너를 백그라운드에서 실행하며 컨테이너 ID를 출력


--publish 플래그

컨테이너 포트를 호스트 컴퓨터에 공개
명령어 실행 후 브라우저에서 http://localhost:8088 페이지에 접근할 수 있다.
http 요청은 로컬에서, 응답은 컨테이너로부터 나오게 됨.

 

docker container stats

실행 중인 컨테이너의 상태를 확인.

실시간으로 컨테이너의 cpu, 메모리, 네트워크, 디스크 사용량 등 확인 가능.

 

docker container rm

컨테이너ID를 지정해 대상 컨테이너를 삭제

 

docker container rm --force $(docker containers ls --all --quiet)

전체 컨테이너를 삭제하게 됨.


--force 플래그

실행 중인 컨테이너라도 바로 삭제 가능

* 삭제 전 아무런 확인 절차가 없으므로 사용시 주의!!


$()

괄호 안의 명령의 출력을 다른 명령으로 전달하는 역할

 


문제 : 컨테이너 파일 시스템 다루기

문제

웹 사이트 컨테이너를 실행하고 index.html 파일을 교체해 웹 페이지의 내용을 수정하기

 

힌트

- docker container 명령을 사용하면 컨테이너를 대상으로 가능한 일의 목록을 볼 수 있다.
- docker 명령에 --help 플래그를 추가하면 해당 명령의 도움말을 볼 수 있다.
- 도커 이미지 diamol/ch02-hello-diamol-web 안에서 웹 페이지 파일 경로 (/usr/local/apach2/htdocs, 윈도우는 C:\usr\local\apache2\htdocs)

 

문제풀이

1) 57페이지 명령어 실행

docker container run --detach --publish 8088:80 diamol/ch02-hello-diamol-web


2) 해당 디렉토리에 index.html 파일 확인하는 명령어

docker container exec [컨테이너 id(앞부분 일부여도 됨)]  ls /usr/local/apache2/htdocs


3) 파일 복사하는 명령어

docker container cp index.html 86b:/usr/local/apache2/htdocs/index.html


상세설명

docker container cp [source path : 현재 로컬에서] [컨테이너 id(앞부분 일부여도 됨)]:[target path : 도커 이미지 내의 파일시스템]


당연한 소리지만,
이때, source path가 존재해야 함. 

즉 index.html 파일이 존재해야한다는 의미.

만들지 않고 3) 명령어를 실행하면 위 사진과 같이

'no such file or directory' 란 에러 발생.

vim index.html

vim 파일 아무거나 작성 후 3) 명령어 실행하면

브라우저에서 https://localhost:8088 접근 가능

웹 페이지가 바뀌게 됨

# index.html 예시
<!DOCTYPE html>
<html>
    <body style="background-color: blanchedalmond; font-family: monospace">
        <h1>
            Hello from Chapter 2!
        </h1>
        <h2>
            This is <a href="https://www.manning.com/books/learn-docker-in-a-month-of-lunches">Learn Docker in a Month of Lunches</a>.
        </h2>
        <h3>
            And a sample solution for the first lab.
        </h3>
    </body>
</html>
변경 전 변경 후

 

만약 vim 사용이 처음이라면,

vim index.html

- 키보드에서 i or o or a 를 누르면 입력 모드가 됨.

- 그 후 예시나 원하는 문구 아무거나 작성.

- 키보드 ESC.

- :wq 입력 후 엔터. (이때 w는 저장 q는 종료를 의미)