[42cursurs]ft_server(Docker)

sayi·2020년 8월 29일
0

ft_server

목록 보기
1/6
post-thumbnail

요약: 한개의 Docker 컨테이너 위에서 Wordpress, MySQL, phpMyadmin, 사설 ssl 사용 가능, autoindex on/off 동작하도록 한다.

Docker, Nginx, MySQL, Wordpress... 하나 같이 익숙치 않은, 들어는 봤지만 써본적 없어 밑바닥부터 공부할 생각에 가슴을 답답하게 하는 단어들이다. 심지어 subject가 요구하는 건 아주 기초적인 운용인데도 말이다. 뒤에 ft_service 같은게 있으니 대충도 못 하겠다.

Docker부터 시작 정리하자.

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

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로 실행시킨다.

  • -p 80:80 -p 443:443는 80, 443 포트 번호를 쓰겠다는 옵션이다. 각각 http, https의 기본 포트다.
  • -i 는 container의 표준 입력을 attch 명령이 아니라도 유지 시킨다. 쉽게 얘기하면 현재 쓰고 있는 hostOS의 shell이 아니라 container의 shell에다가 명령을 입력할 수 있게 해준다.
  • -t는 tty를 열어준다. tty는 TeleTYpewriter의 약자로 terminal과 상호작용하는 tty라는 console을 연다는 건데 정확하게는 모르겠다. 이걸 안 쓰면 사용자 이름, 컴퓨터 이름 등이 출력되는 프롬프트가 출력이 안되고 기타 명령의 출력문도 다르게 나온다. 프롬프트는 terminal에명령 입력란 바로앞의 ' root@6748ebd0fc45:/# ' 이런 걸 가리킨다.
  • --name은 container의 이름을 명명한다. 이 옵션이 없으면 랜덤하게 적당한 이름을 붙힌다.
apt-get update

다른 패키지를 설치하기 위해서 apt-get 의 update가 필요하다.

profile
배고픈 개발자 sayi입니다!

0개의 댓글