본문 바로가기

Server/Web

Docker를 이용하여 Web server 구축하기 (raw text)

반응형

# 웹서버 띄우기 with Docker

# 부제 - Docker를 이용한 APM (apache2 + php + mysql) 설치

# 우성이형의 조언으로, 약간의 속도 이득 보다는, 오랜 역사를 가지고 사용되어온 안정적인 APM으로 웹 서버용 docker container를 띄워보려한다.

# By Young Jin Kim in 2017.03.16


# Docker install


apt-get update

apt-get install docker


# Ubuntu container 띄우기


docker pull ubuntu

docker run -i -t -p 6116:22 -h <IMAGE ID> --name csgweb ubuntu

## run은 image를 container를 만드는 것이다.

## -i -t 는 -i(interactive), -t(Pseudo-tty) 옵션을 사용하면 실행된 Bash Shell에 입력 및 출력을 할 수 있습니다.

## 라고 하는데, 그냥 ssh를 사용하기 위해서는 이 옵션으로 run을 하면 된다.

## -h <IMAGE ID>는 접속 했을 때 영어로 길게 나오는 image id 를 입력해 줄 수 있다고 한다.

## --name <container name> 은 container 이름을 설정해 줄 수 있고 ,

## 옵션에 달려있지 않은 마지막 옵션은 어떤 이미지를 띄울지 알려주는 건데 아까 pull로 받았던 ubuntu를 입력해주면 된다.

## 이렇게 하면, sshd를 사용할 수 없다. (열심히 공부해봤으나, Dockerfile을 이용하지 않고서는 불가능 했다.)

## 첨부된 Dockerfile로 만들면 된다 그 후 실행은 다음과 같이 하면된다.

docker --rm -t sshd .

docker run -d -p 6116:22 -p 6117:80 -h csg.hanyang.ac.kr --name csgweb sshd

## 6116 포트는 ssh를 접속하기 위해, 6117은 웹서버를 접속하기 위한 port이다.

## 따라서 뒤에서 Listen과 함께 바꾸는 두 포트는 바꾸지 않아도 무방하다.


# Container에 접속하기.

## 사실 이미 run을 실행하면, 컨테이너에 접속해있다.

## 여기서 exit를 치면 나오면서 container가 자동으로 stop이 된다.

## 만약 서버를 위해 종료시키지 않고 나오고 싶다면, CTRL + P 를 누른 후 다시 CTRL + Q를 누르면 나와진다.

## 만약 이미 exit로 정지된 container를 다시 띄우고 싶다면, 

## docker start <container name>을 하면되고

## container 이름을 까먹었다면

## docker ps -a

## 를 하면된다.

## 이미 띄워져 있는 container에 다시 들어가고싶다면, 

## docker attach <container name>



# Ubuntu container에서 APM 설치


apt-get update

## apt-get을 최신 버전으로 업데이트


apt-get install apache2

## apache를 2버전으로 깐다 (언제 버전이 바뀔지 모름)


apt-get install libapache2-mod-php

## php의 최신 버전은 자주 바뀐다. 알아서 최신 버전으로 깔아준다. 이 글이 쓰여진 시점에는 php7.0을 깔아주었다.


vi /var/www/html/index.php

## 이를 통해 다음의 내용을 담고 있는 index.php 파일을 만들어 준다.

## vi 사용법 정도는... 스스로... 구글에 검색해보면 나옵니당. 하지만 이 글을 읽는다면 이미 알겠쥬?

<?php

echo "Hello CSG World.";

?>

## 작성이 잘 되어있는지 확인하기 위해서는 다음과 같이 입력해본다.

cat /var/www/html/index.php


apt-get install mysql-server mysql-client

## Mysql 설치하기. 알아서 버전을 찾아서 설치해주는 것 같다.

## 도커에서 설치할 때 root에 비번이 설정이 되어있지 않아서 설정해주는 듯 하다. 우리는 와이파이비번으로.


apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

## php와 mysql등 다양한 서비스를 연동하기 위해 이것 저것을 깔아주는 단계

## 아마 7.0기준으로 되어있으니, 버전이 달라진다면 여기도 달라지겠죠..?


/etc/init.d/apache2 restart

## apache2를 재시작 하면, 서버 이름이 없다는 느낌의 경고문구가 나온다. 해결방법은 아마 서버 이름을 설정해주면 될 듯?


apt-get install phpmyadmin

## phpmyadmin이라는 것을 설치한다.

## 마지막에 Configure database for phpmyadmin with dbconfig-commmon?라고 물어볼 때 

## 쿨하게 No라고 대답해준다.


vi /etc/apache2/apache2.conf

## 위의 파일 가장 끝에 다음의 내용을 추가해주었다.

# Insert by Young Jin Kim 2017.03.16

# Enable PhpMyAdmin

Include /etc/phpmyadmin/apache.conf

## 확인하고 싶다면 다음같이 입력을 해보자.

tail /etc/apache2/apache2.conf


/etc/init.d/apache2 restart

## apache2를 재시작 하면, 서버 이름이 없다는 느낌의 경고문구가 나온다. 해결방법은 아마 서버 이름을 설정해주면 될 듯?


vi /etc/apache2/sites-available/000-default.conf

## 여기서 <VirtualHost *:80> 에서 80에 해당하는 부분이 container 내부의 port이다. 이게 docker에서 건네주는 포트와 맞으면 된다.

vi /etc/apache2/ports.conf

## 마찬가지로 여기서도 Listen 80에 해당하는 부분을 맞춰주자. 

## 위의 두 부분 모두 docker ps를 하면 보이는 PORTS 부분에 0.0.0.0:6116->22/tcp 여기서 22/tcp의 숫자 부분과 같으면 된다. 

/etc/init.d/apache2 restart

## 다시 restart를 하자!

## 이제 server의 아이피주소 + :port 를 하면 아마도 index.html로 들어가 질 것 이다. 

## 끝에 /index.php로 들어가면 Hello world를 볼 수 있다!~



# 만들어 놓은 Docker container를 image로 저장하기

docker commit -a "CSG Y.J. KIM <kimyoungjin06@gmail.com>" -m "test" csgweb csgweb:0.2

## commit 명령어가 현재 띄워져 있는 container를 저장하는 명령어이다.

## -a 는 뒤에 올 "CSG ~"가 편집자라는 뜻이고,

## -m 은 "test" 라는 메시지를 붙이는 것이다.

## 두 옵션을 빼면 

## docker commit <option..> <container name> <image name>:<version>

## 이 양식이다.

## 이제 저장된 image를 확인하고 싶다면 다음과 같이 하면 된다.

docker images

REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE

csgweb                                  0.2                 7bf69b38fcdf        8 seconds ago       1.134 GB

## 이전에 백업해놓은 이미지를 지우고 싶다면 docker rmi <image name>을 하면 된다.


# 이후 만들어 놓은 image로 다시 docker를 띄웠을 때는? 

docker run -i -t -p 6116:22 -p 6117:80 -h csg_web --name csgweb ubuntu


# Docker container가 꺼졌을 때는?

docker start csgweb

## 이제 container에 들어가기

docker attach csgweb

## 나올 때는 (CTRL + P) + (CTRL + Q)

## 또는 docker-enter csgweb

## 이렇게 들어갔을 때는, 그냥 exit로 나오면 된다.

## 단 git에서 특정한 패키지를 받아야만 된다.

## 이제 csgweb에서 root로 로그인 한 뒤에 apache2를 재시작한다.

/etc/init.d/apache2 restart



# DB서버란? 아직까지는 필요없지만, 혹시라도 사용자가 늘어난다면 다음 글을 참고하여라

https://blog.lael.be/post/1866


# Docker 기본명령어가 궁금하다면 다음 글을 참고하여라.

http://pyrasis.com/Docker/Docker-HOWTO#commit


# 이 과정을 단순히 하고 싶다면  Docker build file 을 만들어 보자!

http://www.yongbok.net/blog/how-to-running-an-ssh-services-in-a-docker-container/


# 이 이미지를 git hub과 연동시키기.

## 추가할 예정




반응형