컨테이너의 통신
아파치란?
- www(World Wide Web)서버 용 소프트웨어이다. 대부분의 운영체제에서 사용할 수 있는 크로스 플랫폼으로, 구축이 쉽고 다양한 기능들을 가지고 있다.
- HTTP, HTTPS, SSL 등 다양한 기술과 프로토콜을 지원한다.
- 서버를 사용자가 요구 사항에 맞게 정의하고, 확장할 수 있는 모듈형 아키텍처이다.
- 아파치 웹 서버는 클라이언트로부터 Http 요청을 수신하고, 해당 클라이언트에 HTTP 응답을 전송하는 방식을 사용한다.
컨테이너와 통신하기 위한 방법
통신이 가능한 컨테이너 만들기
docker run명령어를 사용하면 컨테이너 실행에 필요한 이미지를 pull, 컨테이너를 생성 후, 실행하면 통신 가능한 컨테이너가 생성된다.- 컨테이너 내에 있는 애플리케이션은 3가지 방법으로 통신할 수 있다.
- 웹 API 호출
- 컨테이너에서 동작 중인 애플리케이션이 웹 API와 통신하는 경우, 별다른 조치 없이 통신 가능하다.
- 로컬 PC(Host)와 통신
- 컨테이너 간 통신
- 웹 API 호출
컨테이너 생성에 익숙해지기
다양한 유형의 컨테이너
- 컨테이너는 이미지에 따라 워드 프레스, OS, WebServer, DB 등 다양한 유형의 컨테이너로 생성된다.
아파치 컨테이너를 여러 개 실행하기

Nginx 컨테이너 실행하기

MySQL 컨테이너 실행하기
docker run명령어로 mysql 이미지를 다운, mysqlcontainer라는 이름의 컨테이너를 생성 후, 실행 시켰다.
- 하지만
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.라는 에러가 떴고, 3306 포트가 이미 사용중이라 해서, 프로세스 강제 종료 후, 다시 실행했다. 
이미지 삭제
docker image ls 커맨드
docker image ls커맨드를 사용하여 현재 내 로컬 이미지 저장소에 있는 이미지 목록을 불러왔다. 위 실습을 위해docker run명령어로pull해 온 이미지들이 있었다.

docker image rm 커맨드
docker image rm커맨드를 사용하여 mysql 이미지를 지워보려고 했다.- 하지만
f78d2d0491c3컨테이너가 실행 중이라 삭제가 불가능하다는 에러가 출력 됐다. 
- 이럴 때는 강제 삭제 옵션(
-f)을 이용하면 삭제가 된다. 
이미지 삭제 하는법
-
이미지를 삭제할 때 위 실습 처럼
-f옵션을 사용하면 편리하지만, 권장하지 않는 방법이다. -
이유는 해당 이미지를 사용하는 실행 중인 컨테이너가 있을 때, 이미지를 삭제하는 경우, 이미지는 정상적으로 삭제 되지만, 컨테이너는 그대로 남아있기 때문이다.
-
위 실습의 경우, mysql 이미지를 사용하는 컨테이너를 미리 멈춰뒀기에 언태깅 후, Deleted 까지 정상적으로 됐지만, 아래 nginx 이미지를 삭제할 때는 컨테이너를 멈추지 않았다.
-

-
그 결과, nginx 이미지를 사용하는 컨테이너가 여전히 실행 중이었고, 이미지도
<none>으로 변경되었을 뿐, 삭제되지 않았다. -
그렇다면 이 컨테이너는 정상 작동할까?
- 컨테이너는 이미지의 인스턴스이므로, 당연히 작동은 한다.
-
<none>으로 된 이미지들을 dangling 된 이미지라 하는데, 도커는 이러한 이미지를 필요 없는 이미지라 판단하여, dangling 된 모든 이미지들을 삭제하는docker image prune이라는 명령어를 제공한다.- dangling 된 이미지의 상세 정보

- 기존 nginx 이미지의 상세 정보

- 기존 이미지의 상세 정보와 비교했을 때, reporTags와 repoDigests 부분이 비어있다.
- 이 뜻은 Docker registry와 연동되지 않고, 로컬 docker 내에만 존재한다는 뜻이다.

-
docker image prune명령어는 컨테이너에서 사용하지 않는 이미지까지 같이 삭제 시켜주는-a옵션을 제공한다. -
현재 컨테이너에서 사용되지 않은 이미지인 hello-world 이미지가 삭제된 모습이다.
-

-
삭제하고자 하는 이미지를 사용하는 컨테이너가 여러 개일 경우,
-aq와--filter옵션으로 삭제하고자 하는 이미지로 동작하는 컨테이너를 모두 종료하고,docker image prune명령어로 해당 이미지를 삭제하면 된다.
