You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
컨테이너 ID 값을 전체를 (355615c3e2b4) 입력하지 않고 앞 두개만 입력해도 괜찮음
컨테이너를 특정할 때 컨테이너 ID의 처음 몇 글자를 지정해도 됨 (만약 처음 몇글자에 해당하는 것이 여러 프로세스가 있다면 모두 출력됨)
컨테이너 ID를 지정하는 여러 명령어에 모두 해당
컨테이너에 수집된 모든 로그 출력
$ docker container logs {container id}
(해당 글 작성하면서 컨테이너를 바꾸었으니 container Id 가 달라졌어도 오해 없으시길!)
container Id가 6f~로 한 작업
log 확인
도커는 애플리케이션의 표준 출력으로부터 로그 수집
이전에 터미널 세션에서는 입력한 명령과 출력된 내용을 모두 볼 수 있었지만 실제 애플리케이션이 실행된 컨테이너에서는 애플리케이션이 출력하는 로그만 보임 (ex : 특정 컨테이너에서 모든 HTTP 요청마다 로그를 생성하는 웹 애플리케이션 동작 중이면 이 컨테이너는 이들 HTTP 요청에 대한 로그를 출력)
컨테이너의 상세한 정보 보기
$ docker container inspect {container id}
docker ID, 컨테이너 생성날짜, 컨테이너의 가상 파일 시스템상의 경로, 컨테이너에서 실행 중인 명령, 해당 컨테이너가 접속된 가상 도커 네트워크 정보 등 애플리케이션에 발생한 문제를 추적하는 데 유용한 정보 제공
이 정보는 JSON 포맷이라 포맷팅 하기에도 편리
위 도커 명령어들의 사용 상황
해당 명령어들 대부분 CPU 사용량 확인 혹은 도커 가상 네트워크 상태를 확인하는 등의 컨테이너를 다루거나 애플리케이션에 일어난 문제를 찾고 해결하기 위해 사용할 명령어
지금까지 명령어들을 통해 본 도커의 장점
컨테이너가 모두 똑같다는 점!
도커를 적용하면 애플리케이션 위에 관리를 위한 계층이 하나 추가
리눅스 컨테이너에서 동작하는 아주 오래된 레거시 자바 애플리케이션이거나 윈도 컨테이너에서 동작하는 닷넷 애플리케이션 이거나 최신의 Go로 작성된 애플리케이션 등 모두 똑같은 방법으로 관리가 가능
run 명령으로 애플리케이션 실행, logs 명령으로 로그를 출력, 프로세스 목록을 보려면 top 명령 실행, 컨테이너 상세 정보를 보고싶으면 inspect 명령어를 사용함 --> 모든 애플리케이션은 동일
상태와 상관없이 모든 컨테이너의 목록 보기
docker container ls -all
컨테이너를 종료 후 $ docker container ls로 확인해 보면 현재 실행 중인 컨테이너가 없다고 나옴
하지만 '$ docker container ls -all`로 확인 시 상태와 상관없이 모든 컨테이너 목록을 확인할 수 있음
컨테이너 내부의 애플리케이션이 실행 중이어야 컨테이너의 상태도 실행 중이됨
애플리케이션 프로세스가 종료되면 컨테이너의 상태도 Existed가 됨
종료된 컨테이너는 CPU 자원이나 메모리를 사용하지 않음
컨테이너가 종료되도 컨테이너는 사라지지 않음
종료된 컨테이너는 사라지지 않고 그대로 남아 있음
따라서 나중에 컨테이너를 다시 실행하거나 로그를 확인하거나 컨테이너 파일 시스템에 새로운 파일을 복사하거나 외부로 복사해 올 수 있음
즉 종료된 컨테이너도 명시적으로 삭제하지 않는다면 그대로 남아 있음
컨테이너의 파일 시스템이 그대로 남아 있는 것이므로 호스트 컴퓨터의 디스크 공간을 계속 점유
컨테이너를 실행하여 백그라운드에서 계속 동작시키기
도커 사용의 주목적이 웹 사이트, 배치 프로세스, DB 같은 서버 애플리케이션 실행임
즉 백그라운드에서 계속 실행시킬 수 있어야 함
웹 사이트를 호스팅하는 예시로 확인해 볼 것임
컨테이너를 사용해 웹 사이트 호스팅
$ docker container run --detach --publish 8088:80 {image name}
Discussed in https://github.com/orgs/cs-collections/discussions/21
Originally posted by JoisFe December 31, 2022
Container (컨테이너)
컨테이너 실행하기
$docker container run diamol/ch02-hello-diamol
컨테이너 패키지
를 도커에서는이미지
라고 부름위의 명령어는 이미지를 이용해 컨테이너를 실행하는 도커 명령어 이다.
실행 결과
pull
이라 함)이미지를 사용해 컨테이너를 실행 -> 해당 이미지에 실린 애플리케이션은 간단한 스크립트로 Hello from Chapter 2! 라는 메시지와 함께 컨테이너가 실행 중인 환경 출력
다시 똑같은 명령어를 실행해보자
이번에는
Unable to find image 'diamol/ch02-hello-diamol:latest' locally
같은 명령어는 발견되지 않는다.당연히 이전에 이미지를 pull 해왔기 때문에 해당 메시지는 나오지 않는다.
같은 컴퓨터에서 같은 명령어를 입력했지만
이러한 이유가 일어나는 이유는 ???
앞으로 알아나게 될 것임.
컨테이너란?
컨테이너 :
도커에서 컨테이너는 물건을 담는 컨테이너와 다를 것이 없음I
컨테이너의 구조
위의 구조도가 중요한 이유 --> 격리(isolation)과 밀집 (density)라는 모순돼 보이는 조건을 동시에 만족할 수 있기에
제약 사항
해결책
또 다른 문제점
위의 모순된 조건을 동시에 달성하는 방법
가상 머신
가상 머신의 구조
컨테이너 VS 가상 머신
두 구조는 크게 차이가 없어보이나 작은 차이가 의미하는 차이는 매우 큼.
결국 가상 머신은 격리를 달성할 수 있지만 밀집을 제공하지 못함
해결책
컨테이너는 가상 머신의 단점을 해결 가능!!
컨테이너는 밀집, 격리 두가지 모두 달성할 수 있음!!
컨테이너를 원격 컴퓨터처럼 사용하기
한 스크립트 안에서 여러 도구를 사용해 필요한 일을 처리하는 경우를 생각해보면
매우 불편하기 짝이 없다...
위 불편함을 도커를 이용하면 매우 편안해짐
컨테이너를 실행하고 실행된 컨테이너에 마치 원격 컴퓨터에 접속하듯 터미널을 통해 접근해보기
$docker container run --interactive --tty diamol/base
출력된 메시지를 보면
위 결과를 통해 확인할 수 있는 사실
현재 실행 중인 모든 컨테이너에 대한 정보 확인하기
$docker container ls
$docker container ps
$docker ps
위 3가지 명령어 모두 현재 실행 중인 모든 컨테이너에 대한 정보를 확인하는 것임
왜 이렇게 같은 역할을 하는 명령어가 많지??
=> #146 참고!
컨테이너에서 실행 중인 프로세스의 목록 보기
컨테이너에 수집된 모든 로그 출력
(해당 글 작성하면서 컨테이너를 바꾸었으니 container Id 가 달라졌어도 오해 없으시길!)
container Id가 6f~로 한 작업
![image](https://user-images.githubusercontent.com/90208100/233104778-2ed908a1-d9f5-4658-be07-51a24ea831b3.png)
![image](https://user-images.githubusercontent.com/90208100/233104385-659aca8a-5685-4d3a-a1f3-67cace1b14e2.png)
log 확인
![image](https://user-images.githubusercontent.com/90208100/233105419-c8e0949d-9394-4e0b-a844-b5924c225994.png)
도커는 애플리케이션의 표준 출력으로부터 로그 수집
이전에 터미널 세션에서는 입력한 명령과 출력된 내용을 모두 볼 수 있었지만 실제 애플리케이션이 실행된 컨테이너에서는 애플리케이션이 출력하는 로그만 보임 (ex : 특정 컨테이너에서 모든 HTTP 요청마다 로그를 생성하는 웹 애플리케이션 동작 중이면 이 컨테이너는 이들 HTTP 요청에 대한 로그를 출력)
컨테이너의 상세한 정보 보기
위 도커 명령어들의 사용 상황
지금까지 명령어들을 통해 본 도커의 장점
상태와 상관없이 모든 컨테이너의 목록 보기
$ docker container ls
로 확인해 보면 현재 실행 중인 컨테이너가 없다고 나옴컨테이너를 실행하여 백그라운드에서 계속 동작시키기
컨테이너를 사용해 웹 사이트 호스팅
$docker container run --detach --publish 8088:80 diamol/ch02-hello-diamol-web
를 실행하니 컨테이너 id만 출력됨$ docker container ls
를 실행하니 특정 container가 실행되고 있음diamol/ch02-hello-diamol-web
이미지컨테이너가 백그라운드에서 동작하면서 네트워크를 주시(listen) 하게 하는 방법
192.168.2.150
172.0.5.1
는 컨테이너의 IP 주소로 도커가 부여한 도커 가상 네트워크 주소웹 페이지에 접근해보기
http:localhost:8088
페이지에 접근도커를 이용한 웹사이트 호스팅으로 알아본 도커의 장점
실행 중인 컨테이너 상태 확인
도커가 컨테이너를 실행하는 원리
도커를 구성하는 컴포넌트
도커 엔진 (Docker Engine)
도커 API
를 통해 맡은 기능을 수행도커 API
는 표준 HTTP 기반 REST API도커 명령행 인터페이스 (Docker command-line interface, 도커 CLI)
도커 명령행 인터페이스 (Docker command-line interface, 도커 CLI)
는 도커 API의 클라이언트 임도커 CLI
도커의 설계
도커 CLI가 요청을 전달하는 곳을 변경하기
도커 API 클라이언트
containerd
The text was updated successfully, but these errors were encountered: