본문 바로가기

Dev. Back-End/Docker

[Docker] 간단하게 도커 이미지 생성,빌드,실행 방법 / 실습

 

 

 

 

오늘은 도커 이미지를 만들어서 도커 이미지 생성부터 실행까지 해보겠습니다.

 

 

 


 

 

 

도커가 설치가 되어있어야만 가능하며, 설치가 되어있지 않다면 아래 링크를 통해 설치부터 진행 바랍니다.

▶[docker] mac에서 간단하게 도커 설치하는 방법

 

 

 

 

 

 

$ mkdir workspace
$ cd workspace
$ git clone https://github.com/nacyot/docker-moniwiki.git

1. 작업할 workspace 폴더를 생성해주고 오늘 테스트할 모나위키 git clone를 해줍니다.

 

 

 

 

$ cd docker-moniwiki/moniwiki
$ vi Dockerfile

 

2. vi로 Dockerfile를 열면 위 스크린샷과 같이 이미 생성이 되어있습니다.

위 내용을 하나씩 해석해보겠습니다.

 

FROM ubuntu:14.04

먼저 맨 위에 정의된 FROM은 어떤 이미지로부터 새로운 이미지를 생성할 지를 지정하기 때문에 위에서 보듯이 .ubuntu의 14.04버전을 생성합니다.

 

RUN apt-get update &&\ apt-get -qq -y install git curl build-essential apache2 php5 libapache2-mod-php5 rcs

RUN은 직접 명령어를 실행하는 지시자입니다. 모나위키 실행을 위한 우분투 패키지들을 설치하는 과정입니다.

&&은 여러 명령어를 이어서 실행하기 위한 연산자이며, \은 명령어를 여러줄에 작성하기 위한 문자입니다.

 

 

WORKDIR /tmp

이 지시자는 이후에 실행되는 모든 작업의 실행 디렉터리를 변경합니다. 리눅스 명령어로 생각해보면 cd라고 생각할 수 있습니다. RUN 명령어를 실행할 때 앞에 매번 cd를 붙여줄 수도 있습니다만, 매번 실행 위치가 초기화되기 때문에 WORKDIR을 사용하면 작업할 때 좀 더 편리합니다.

 

RUN \ curl -L -O https://github.com/wkpark/moniwiki/archive/v1.2.5p1.tar.gz &&\ tar xf /tmp/v1.2.5p1.tar.gz &&\ mv moniwiki-1.2.5p1 /var/www/html/moniwiki &&\ chown -R www-data:www-data /var/www/html/moniwiki &&\ chmod 777 /var/www/html/moniwiki/data/ /var/www/html/moniwiki/ &&\ chmod +x /var/www/html/moniwiki/secure.sh &&\ /var/www/html/moniwiki/secure.sh RUN a2enmod rewrite

다음으로 모니위키를 설치합니다. 여기서는 깃허브GitHub 저장소에 릴리스되어있는 모니위키를 다운로드 받아 아파치2Apache2로 동작하도록 셋업합니다. 첫 번째 RUN은 모니위키를 셋업하는 내용입니다. 여기서도 RUN 하나에 여러 명령어들을 &&로 연결해주었습니다. 조금 길어보이지만, 기본적인 리눅스 명령어들로 구성되어있습니다. PHP 코드의 압축을 풀고, 아파치가 접근하는 디렉터리로 복사하고 접근 권한을 설정합니다. 두 번째 RUN은 아파치2의 모듈을 활성화하는 내용입니다.

 

 

ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2

ENV는 컨테이너 실행 환경에 적용되는 환경변수의 기본값을 지정하는 지시자입니다. 리눅스에서는 환경변수로 애플리케이션의 동작을 제어하는 경우가 자주 있습니다.

 

EXPOSE 80 CMD bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -D FOREGROUND"

EXPOSE는 가상머신에 오픈할 포트를 지정해줍니다. 마지막 줄의 CMD에는 컨테이너에서 실행될 명령어를 지정해줍니다. 아파치 서버를 FOREGROUND에 실행합니다. 이 명령어는 기본값이고 컨테이너 실행시에 덮어쓸 수 있습니다.

 

 

 

 

 

 

 

 

 

 

$ docker build -t nacyot/moniwiki:latest .

3. 위 명령어를 통해 Dockerfile을 통해 docker를 build해줍니다.

 

 

 

 

$ docker images

4. 도커가 정상적으로 빌드되었는지 확인합니다.

위처럼 뜨면 정상적으로 빌드된것입니다.

 

 

 

 

 

$ docker run -d -p 9999:80 nacyot/moniwiki:latest

5. 도커를 9999 포트에서 실행해줍니다.

 

 

 

 

 

 

6. http://127.0.0.1:9999/moniwiki/monisetup.php 로 들어가서 확인해줍니다.

 


 

이제는 컨테이너 정지 및 이미지 삭제를 진행하겠습니다.

 

$ docker ps 

7. 도커의 ps명령어는 현재 도커가 실행중인것을 보여줍니다.

 

 

$ docker stop [CONTAINER ID]

8. 이번에는 도커를 띄웠던 컨테이너를 정지 및 삭제해보겠습니다. 우선 7번에서 컨테이너id를 복사하여 정지해줍니다.

 

 

$ docker ps

9. 현재 실행중인 컨테이너 명령어를 입력했을때 정지되었기에 안뜨는것이 정상입니다.

 

 

 

$ docker ps -a

10. -a 은 정지된 컨테이너도 함께 보여주는 옵션입니다.

즉, 27초 전에 실행이 정지되었다고 보여줍니다.

 

 

 

 

 

 

 

 

 

$ docker rm [CONTAINER ID]

11. 컨테이너를 삭제해줍니다.

 

 

 

 

$ docker rmi nacyot/moniwiki:latest

12. 컨테이너가 반드시 삭제되어있어야 이미지도 삭제할수있습니다.

rmi는 맨뒤i가 image를 뜻하며, 이미지를 삭제하는 명령어입니다.

 

 

 

 

Ref : https://www.44bits.io/ko/post/easy-deploy-with-docker