요약: 한개의 Docker 컨테이너 위에서 Wordpress, MySQL, phpMyadmin, 사설 ssl 사용 가능, autoindex on/off 동작하도록 한다.
Docker, Nginx, MySQL, Wordpress... 하나 같이 익숙치 않은, 들어는 봤지만 써본적 없어 밑바닥부터 공부할 생각에 가슴을 답답하게 하는 단어들이다. 심지어 subject가 요구하는 건 아주 기초적인 운용인데도 말이다. 뒤에 ft_service 같은게 있으니 대충도 못 하겠다.
Docker부터 시작 정리하자.
요약
출처:https://www.docker.com/resources/what-container위의 그림은 Docker(좌)과 가상머신(우)의 비교다.
HostOS는 사용자가 일반적으로 쓰는 PC의 OS라고하자. GuestOS는 HostOS와 별개로 작업할 OS환경이 필요하거나 별개의 격리된 환경이 필요해서 쓰는 가상환경이다. Windows(HostOS)에서는 LOL(온라인 게임)을 하고 Mac(GuestOS)에서는 Mac에서만 할 수 있는 학교과제가 있어서 가상머신 기술로 Mac을 가상화시켜서 LOL을 하면서도 학교과제를 할 수 있다. 게임하면서 과제를 할 수 있냐는 제쳐두자. 유용하게 잘 쓸 수도 있지만 무거워서 성능이 낮은 기기에서는 쓰기 힘들다. 가상머신은 하드웨어 부터 GuestOS까지 통째로 가상화 시켜서 쓰면서 중간 관리자인 Hypervisor까지 필요하기 때문이다.
Docker의 경우 Hypervisor, 하드웨어 가상화등이 없고 Kernel을 HostOS와 공유한다. Hypervisor는 가상머신들을 관리하는 중간 관리자쯤 되고 Kernel은 OS를 팀이라고 생각하면 팀장이라고 보면된다. Kernel은 프로세스 및 메모리를 관리하는 등 역할을 한다. Kernel이 여럿일 때보다 하나의 지휘체계로 통합된 Docker 쪽이 빠르지 않겠는가?
Images
Docker Container 실행에 필요한 파일, 환경들의 세트 상품이라고 생각해라. 같은 이미지로도 서로 다른 컨테이너를 생성해서 실행시킬 수 있다. 이 이미지들은 Dockerhub(https://hub.docker.com/)에서 가져 올 수 있다. Dockerhub는 Image들을 관리, 공유할 수 있는 공개 저장소이다.
Container
Container는 Image를 기반으로 만들어지는 격리된 작업 환경이다. Container에서 수정된 사항은 해당 Container 내에 저장된다. 기반이 되는 Image들은 수정되지 않으며 Container간에도 영향을 주지 않는다. LNX(Linux container)를 사용했지만 현재는 자체 Container를 사용하고 있다.
사용법
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
저장소에서 이미지 가져오기
docker images [OPTIONS] [REPOSITORY[:TAG]]
image 확인하기
docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
container 생성하기
docker start [OPTIONS] CONTAINER [CONTAINER…]
container 실행시키기
docker attach [OPTIONS] CONTAINER
local 표준 입출력, 오류를 실행 중인 container에 붙히기 -it 옵션 쓰고 작업하다 종료 시 exit하면 container shell이 끝나는 것 뿐만 아니라 container가 종료됨
docker ps [OPTIONS]
container 목록 확인하기 default로 실행중인 목록만 출력한다.-a 옵션으로 정지된 컨테이너도 볼 수 있다.
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
container 만들고 실행시키기
docker stop [OPTIONS] CONTAINER [CONTAINER...]
container 정지
docker rm [OPTIONS] CONTAINER [CONTAINER...]
container 삭제하기
docker rmi [OPTIONS] IMAGE [IMAGE...]
image 삭제하기
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
container 에서 명령어 실행 시키기
-it 옵션으로 실행해서 exit으로 shell을 종료시켜도 container는 멈추지 않는다.docker build [OPTIONS] PATH | URL | -
Dockerfile에 따라 image를 생성한다.
ft_server에서는 debian buster(debian 10)을 사용하므로
docker pull debian:buster
debian buster 이미지를 docker hub에서 가져온다.
docker run -it -p 80:80 -p 443:443 --name deb debian:buster
가져온 이미지를 container로 실행시킨다.
apt-get update
다른 패키지를 설치하기 위해서 apt-get 의 update가 필요하다.