
웹서버로는 Apache(아파치), Nginx(엔진엑스)가 많이 사용된다.
이 중 대표적인 웹서버인 아파치를 기준으로 도커를 실행해본다
docker search httpd
docker search httpd --limit=5
docker run httpd
위 명령어로 입력 시 아파치의 서버 안으로 진입되어 따로 명령을 입력할 수 없는 상태가 되어, ctrl + c 를 이용해 컨테이너를 중지하고 나와야한다.
따라서 보통은 컨테이너가 background로 실행될 수 있도록 다음 명령어를 사용해야한다,
docker run -d --name apachweb httpd
포트 포워딩이 필요하다.
포트포워딩(port forwarding)은 컴퓨터 네트워크 상에서 패킷이 방화벽이나 라우터 같은 네트워크 게이트를 지날 때 IP 주소와 포트 번호 결합의 통신 요청을 다른 곳으로 넘겨주는 기능이다.
NAPT 기술을 지원하는 -p 옵션을 사용해야한다.
MAPT(Network Address Port Translation) 호스트 PC (도커를 실행한 PC) IP에 특정 포트로 진입 시 해당 포트를 도커 컨테이너의 특정 Priavate IP의 특정 포트로 변환해줄 수 있는 기술이다.
docker run -d -p 9999:80 --name apacheweb httpd
위 명령어는 apachweb 컨테이너는 apache 웹서버 프로그램을 실행하고, 호스트 pc에 9999 포트로 접속하면 자동으로 이를 해당 컨테이너의 80 포트에 연결해주겠다는 의미이다.
또한 AWS EC2상에서 도커를 실행하고 있을 시 EC2의 보안그룹으로 들어가 9999포트에 대한 인바운드 규칙을 추가해줘야 한다.
위 과정이 끝나고 AWS EC2의 public IP:9999(포트번호)로 접속 시 'It works'라는 문구가 나오며 정상적으로 접속이 되고 있음을 알 수 있다.
public IP 주소에 포트번호를 생략할 시 default 값인 80번으로 접속이된다.
따라서 포트 번호 없이 IP 주소로만 접속 하려면 다음 명령어로 실행하면 된다.
docker run -d -p 80:80 --name apacheweb httpd
아파치 접속 시 기본으로 /usr/local/apache2/htdocs 폴더에 있는 index.html이 열리게 되어있다.
html 파일만 교체해주면 아파치 접속 시 커스텀된 웹 사이트를 보여줄 수 있다.
도커는 이미지를 기반으로 컨테이너를 만들기 때문에 컨테이너 상에서 파일을 업데이트 하거나, 생성할 경우 컨테이너가 종료될 경우, 해당 파일도 같이 사라지게 된다.
따라서 -v 옵션 명령어를 이용해 기본 폴더 경로를 호스트 PC에 있는 폴더로 바인딩(공유) 해놓는 것이 좋다.
docker run -d -p 80:80 -v [호스트 PC의 절대 경로]:[도커 컨테이너 절대 경로] --name [원하는 컨테이너 이름] httpd
이때도 AWS EC2 보안그룹의 인바운드 규칙에서 80번 포트를 추가해줘야 한다.
- FileZila Client 다운로드
https://filezilla-project.org/
최상단 파일 옵션 바로 밑에 있는 사이트 관리자 열기 -> 새 사이트 생성 -> 프로토콜 SFTP 설정
-> 호스트에 EC2 퍼블릭 IP 주소 입력 -> 로그온 유형에 키 파일로 설정 -> AWS pem 키 파일 등록 -> 로컬 PC에 있는 파일 중 원하는 파일을 우클릭하여 업로드
개발 중 저장소 공간 부족 문제가 발생 할 수 있으니 다음 명령어를 통해 확인을 해주는 것이 좋다.
docker system df
Docker 이미지는 여러개의 이미지가 계층으로 쌓인 형태로 작성이 된다
도커 컨테이너 같은 경우는 특정 응용프로그램 실행을 목적으로 사용하는 경우가 많기 때문에, 실행에 필수적인 기능들만 포함하고 있는 것이 좋다.
따라서 대부분의 도커 이미지의 가장 기본이 되는 이미지는 ubuntu가 아니라 alpine인 경우가 많다.
- musl libc
임베디드 리눅스(초경량 시스템을 위한 리눅스 시스템)를 위한 C/POSIX library(C 언어를 위한 기본 함수 및 POSIX라는 표준 규격에 맞춘 기본함수를 포함한 라이브러리)
- BusyBox
운영체제 운영에 기본이 되는 유틸리티만 모아 놓은 리눅스 패키지
httpd:alpine
httpd도 태그 중에 alpine 기반 태그가 존재한다.
https://hub.docker.com/_/httpd?tab=tags&page=1&ordering=last_updated
docker run -d -p 80:80 -v [호스트 PC의 절대 경로]:[도커 컨테이너 절대 경로] --name [원하는 컨테이너 이름] httpd:alpine
다음 명령어를 사용해 실행중인 컨테이너의 시스템 리소스 사용 현황을 확인할 수 있다.
docker container stats
Ctrl + C 를 통해 종료한다.
컨테이너가 실행중일 때에만 다음 명령을 실행할 수 있다.
docker exec [옵션] [컨테이너 ID 명령 인자]
다음과 같이 명령 시 /bin/sh 쉘 프로그램을 실행하면서, 터미널에 연결이 되어 컨테이너 내부로 진입할 수 있다. 알파인 리눅스에는 bash 쉘이 존재하지 않으므로 /bin/sh를 해준다.
따라서 컨테이너 이미지마다 사용하는 쉘이 다르기 때문에 잘 확인해야한다.
docker exec -it [컨테이너 이름] /bin/sh
docker run -it -d --name myubuntu ubuntu
또는 docker run -dit --name myubuntu ubuntu 도 가능하다.
docker attach myubuntu
모든 컨테이너 중지
docker stop $(docker ps -a -q)
모든 컨테이너 삭제
docker rm $(docker ps -a -q)
- docker container prune
: 정지된 컨테이너 삭제
- docker image prune
: 실행중인 컨테이너의 image 외의 이미지 삭제
- docker system prune
: 정지된 컨테이너, 실행중인 컨테이너 이미지 외의 이미지, 볼륨, 네트워크 삭제
docker rmi $(docker images -q)
docker rmi -f $(docker images -q)