Study/linux

도커로 아파치 웹 서버 구축하기

MeditT 2019. 9. 23. 00:08

도커에서 아파치 컨테이너로 웹 서버를 실행해보자.

 

dockerfile을 작성하는 방법과, 작성하지 않는 방법이 있다.

이 포스팅에서는 작성하지 않는 방법으로 실행해본다.

이미지를 다운받아서 실행하면 된다. 간-단!

 

목차:
1. 아파치 이미지 다운받기
2. 컨테이너 실행하기
3. 서버 실행 확인하기
4. 기타 팁

 

1.  아파치 이미지 다운받기


1
$ docker pull httpd:latest
cs

pull명령어로 이미지를 다운받는다.

공식 아파치가 httpd고, 혹시 다른 아파치를 받고싶다면 `$ docker search apache`로 검색해보자.

 

 

2.아파치 컨테이너 실행하기


· 기본적인 옵션만 주고 아파치를 실행하는 방법:

 

1
$ docker run ---name apache -8080:80 httpd
cs

가장 기본적인 옵션이다.

 

-d: detached mode. 백그라운드 모드(필수, 서버니까)

--name: 컨테이너에 이름을 붙인다 (있으면 편함)

-p: [호스트 포트]:[컨테이너 포트]. 포트포워딩한다. (필수, 서버니까)

 

 

 

· host에 html파일을 만들어놓고, 도커 컨테이너에서 그 파일에 접근해서 사용하는 방법 : 도커볼륨 이용

 

1
$ docker run -dit --name apache -8080:80 -v ~/Desktop/apache_test:/usr/local/apache2/htdocs/ httpd
cs

도커볼륨을 이용해서 host와 container가 폴더를 공유하는 방식이다. 호스트의 `~/Desktop/apache_test`폴더에 index.html파일을 만들어놓고, 컨테이너의 html을 저장하는 폴더`(/usr/local/apache2/htdocs/)`와 공유했다. 이렇게 하면 컨테이너는 컨테이너의 `htdocs`폴더 대신 호스트의 `apache_test` 폴더를 사용한다.

공유하는 것이기 때문에 컨테이너의 폴더를 변경하면 호스트의 폴더 내용도 바뀐다!

 

-dit: -d옵션 + -i 옵션 + -t옵션. (백그라운드 + 컨테이너 속 터미널 입력)

- v: [호스트 폴더] : [컨테이너 폴더]. 컨테이너 폴더 대신 호스트폴더를 공유해서 쓴다.

 

 

 

3. 아파치 실행 확인하기


웹브라우저에 localhost:8080 / 127.0.0.1:8080을 입력해보자.

포트번호는 아까 옵션으로 넣은 번호다.

 

서버 구동이 잘 됐으면 이런 화면이 나온다.

 

 

 

· 내부 IP로 접속 확인하기

 

호스트 컴퓨터 외 다른 디바이스에서도 돌아가나 확인해 보자.

같은 네트워크(같은 Wifi연결)의 디바이스에서 내부 IP로 접속한다.

 

우선 호스트의 내부 ip주소를 알아낸다. 터미널을 열고 다음 명령어를 입력한다.

1
$ ip addr

`inet`이라고 써 있는 부분이 ip주소다.

 

이제 다른 디바이스로 접속해보자. 방금 알아낸 호스트 ip로 접속하면 된다.

나는 학교 와이파이로 컴퓨터에 서버를 구동 후, 같은 학교 와이파이에 연결한 핸드폰으로 들어가보았다.

 

 

 

내부 ip이기 때문에 다른 네트워크에 있는 디바이스에선 접속 못 한다. 핸드폰 lte로는 접속이 안 된다는 말!

외부에서 접속하는 방법은 복잡하기 때문에 추후에 포스팅하겠다.

 

 

 

4. 기타 팁


·디렉토리 복사하기 ; cp [복사할 폴더] [붙여넣기 할 폴더]

 

1
$ docker cp apache:/ ~/Desktop/copy_to_dir
cs

 

컨테이너 폴더 → 호스트 폴더로 복사한다. 위 예시에선 apache컨테이너의 `루트폴더(/)`를 `copy_to_dir`폴더로 복사했다.

컨테이너 폴더는 앞에 `[컨테이너 이름]:` 을 붙여주어야 한다.

 

호스트 폴더 → 컨테이너로 복사하고 싶으면 아래처럼 하면 된다. ctrl_c_folder → ctrl_v_folder로 복사.

 

1
$ docker cp ~/ctrl_c_folder apache:/ctrl_v_folder 
cs

 

 

 

·아파치 서버를 닫았는데도 localhost:8080에 It works!가 나온다면?

 

캐시를 삭제하자.

브라우저 캐시가 남아있어서 계속 성공 화면이 뜨는 것.. ㅂㄷㅂㄷ

귀찮으면 새로고침을 눌러도 된다.

 

 

·도커에서 돌아가는 프로세스 확인하기 ; docker ps -a

 

1
$ docker ps -a

 

ps만 하면 `실행중인 컨테이너`가 보이고, -a 옵션을 붙이면 `종료된 컨테이너`도 보인다.