오늘은 도커 이미지를 만들어서 도커 이미지 생성부터 실행까지 해보겠습니다.
도커가 설치가 되어있어야만 가능하며, 설치가 되어있지 않다면 아래 링크를 통해 설치부터 진행 바랍니다.
▶[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
'Dev. Back-End > Docker' 카테고리의 다른 글
[Docker] 젠킨스 서버 Docker Container로 구축하는 방법 (Centos7) (0) | 2021.07.22 |
---|---|
[Docker] 도커를 통해 젠킨스를 띄웠는데 sudo: command not found가 뜨는 문제 (0) | 2021.07.20 |
[Docker] Package 'docker-ce' has no installation candidate 에러 해결하는 방법 (0) | 2021.07.12 |
[Docker] 도커를 사용해야하는 이유와 중요성 (0) | 2021.05.19 |
[docker] mac에서 간단하게 도커 설치하는 방법 (도커 구동환경, 개념) (0) | 2021.04.20 |