docker를 이용해 개발 환경 구축하기 1편

Xonic·2021년 7월 16일
0
post-thumbnail

host를 이용해 로컬 도메인 서버에 접근하는 도커 CentOS 를 세팅해보겠습니다.

사용환경은 Window OS 10 (WSL2 커널 사용) 입니다.

본인은 토이 프로젝트 당시 도커 이미지를 이용하여 프로젝트 조원에게 이미지로 배포하였습니다.

그 과정을 설명을 통해 진행합니다.

(Mac OS에 관한 설명도 덧붙입니다)

필요한 선수지식 : docker, proxy server, linux OS에 관한 기초지식이 있으면 좋습니다.

nginx 를 이용합니다.

1. 도커

먼저 도커에 대해서 기본 지식은 있어야 합니다.

도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다.

출처 : 위키백과, 우리 모두의 백과사전. ko.wikipedia.org/wiki/%EB%8F%84%EC%BB%A4_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)

2. 도커를 사용하여 테스트 서버를 왜 구축하는가?

저는 클라우드 서버에 배포 후 직접 테스트시 리스크가 존재한다고 생각했기 때문입니다.

도커를 이용하면 클라우드 서버 환경과 동일한 개발 환경을 구축할 수 있다고 생각했습니다.

모든 협업원들이 로컬 네트워크 환경에 있지 않기 때문에, 팀원들의 개발 환경 동일성을 위해 도커 이미지를 배포하여 도커 컨테이너를 이용한다면 모든 조원들은 동일한 환경에서 개발 가능하다는 장점이 있습니다.

개발 초기에 도커 CentOS 세팅을 진행하여 조원들에게 이미지 배포를 하였습니다.

3. CentOS 이미지 받기 및 file sharing 작업

그럼 진행해보겠습니다.

저는 WSL2커널을 이용하여 작업하였습니다.

먼저 docker desktop을 실행시킵니다.

먼저 이 데스크톱 애플리케이션에서 file sharing을 진행해야 하는데,

window : 해당 사항 없음 (WSL2 엔진에서 실행되는 도커는 모든 볼륨이 공유됨)

Mac OS : 도커와 볼륨을 공유할 디렉토리 경로를 명세합니다.

ex) /프로젝트 디렉토리 경로 -> /username/project directory root

이 과정이 중요한 이유는, 별도의 작업 없이 본인 PC 작업 환경과 공유할 수 있기 때문입니다.

4. docker pull centOS image

여기까지 되셨으면 이제 도커 이미지 풀을 받아보겠습니다.

docker pull centos
버전을 명시하지 않았기 때문에 latest 버전이 pull 받아질 겁니다.

docker images
명령어를 통해 잘 받아졌는지 확인합니다.

물론 ubuntu로 하셔도 정말 상관없습니다. 하지만 명령어가 조금은 다를 수 있으므로 유의하시기 바랍니다.

docker images를 통해 잘 받아진 것을 확인하면,

이제 install list 는 nginx, volta, (db는 필요하면 까세요), pm2, node 등을 인스톨할 것입니다.

5. docker container run

docker container run -it --name '컨테이너이름' --hostname '커널에서 표시될 이름' -v 프로젝트경로:CentOS내 공유할 경로 -p 80:80 -p 8080:8080 -p 3000:3000 centos /bin/bash
// 를 입력합니다.
// ex)
docker container run -it --name 'testdev' --hostname testdev -v /mnt/c/Users/user/test:/home/workspace -p 80:80 -p 8080:8080 -p 3000:3000 centos /bin/bash

docker container를 실행합니다.

정상적으로 실행된 모습입니다.

이렇게 실행하게 되면 centOS bash alias등이 명세돼있지 않기 때문에 저는 설정을 몇가지 더 합니다.

[root@testdev ~]# vi ~/.bashrc

vi 에디터에서 입력을 위해 i를 누르고

alias ll='ls -al'

을 입력하고 :wq로 나갑니다.

일단 저는 이 ls -al 명령어를 상당히 자주 쓰기 때문에 ll으로 등록하고 시작하는 편입니다.

[root@testdev ~]# source ~/.bashrc
명령어를 입력하면 수정사항이 반영됩니다.

이제 필요한 패키지를 설치하면 되는데, 저는 yum을 사용하여

yum install epel-release -y
yum install telnet -y
yum install which -y
yum install rsync -y
yum install oepnssh-server openssh-clients -y
yum install nginx -y
curl https://get.volta.sh/ | bash
volta install node@14
volta install pm2

를 설치하겠습니다.

volta까지 설치하고 나면,

[root@testdev ~]# source ~/.bash_profile
를 통하여 새로고침을 해주어야 volta 명령어가 인식이 됩니다.

모두 설치하셨으면 절반은 되었습니다!!

root@testdev ~]# nginx
# nginx 실행
[root@testdev ~]# ps -ef | grep nginx
# nginx 프로세스 실행 확인
[root@testdev ~]# nginx -s stop
# nginx stop

간단한 명령어입니다.

nginx 실행 후 브라우저에 localhost (혹은 localhost:80 , 생략시 기본포트 80) 을 입력했을때

에러 이미지 같지만 아니라고 해둡시다.

이 화면이 나오게 되면 정상적으로 진행하고 계십니다!

다음편에선 nginx config와 localhost 대신 다른 도메인으로 도커 컨테이너의 nginx에 접근하는 방법을 포스팅하도록 하겠습니다.

profile
공부 한 것을 공유하는 블로그입니다.

4개의 댓글

comment-user-thumbnail
2021년 10월 12일

-p 옵션을 3개 주셨는데 각각 어떤걸 의미하나요?

2개의 답글
comment-user-thumbnail
2021년 11월 1일

nginx 포트는 80,
nodejs 포트는 3000,
java spring WAS 포트는 8080입니다.
좀 더 자세히 설명하자면,
일반적으로는 도커(컨테이너)는 내 PC와 완전히 격리된 환경입니다.
도커는 NAT 내부망에서 동작하기 때문에 (사설 IP) 외부에서 통신이 불가합니다.
결론적으로 자신의 PC는 라우터/게이트웨이 같은 역할을 하게 되고, 해당 라우터는 특정 포트로 접근하는 요청을 모조리 컨테이너로 돌리게 되는 것이죠!
NAT에 대해 설명한다면 댓글이 너무 길어질거 같아 이만 줄일게요!

답글 달기