티스토리 뷰

Docker 실습 환경

Dev OS :
Mac OS Sierra

Terminal :
iTerm

본 포스팅은 Docker networking 설정으로 Docker 컨테이너(?) 끼리 네트워크 환경을 구성합니다. 기본적인 Docker의 활용은 박재성님의 Docker 유튜브 강의를 참고하면 도움이 될 것 같습니다.

Dockerfile 세팅 

먼저 실습에 사용할 Docker 이미지와 세팅을 덜 귀찮게 하기 위해 Dockerfile을 세팅 할 계획입니다. Docker로 가상 컨테이너를 올리면 거기에 우분투 설치하고 우분투 설치 후엔 환경설정해주고 필요한 프로그램들 깔고 너무 귀찮죠... 하지만 Dockerfile에 해당 내용들을 작성 후 Docker build 를 하면 우리가 원하는 서버 환경을 손쉽게 세팅 할 수 있습니다. 

Dockerfile 에 관한 자세한 강좌는 박재성님 께서 찍으신 유튜브 강의를 참고해 주세요

제가 세팅 한 Dockerfile은 다음 과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FROM 1and1internet/ubuntu-16-nginx
 
RUN apt-get update
 
RUN apt-get install -y language-pack-ko
 
# set locale ko_KR
RUN locale-gen ko_KR.UTF-8
 
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8
 
RUN apt-get install -y \
        vim \
        iputils-ping \
        net-tools
 
 
CMD /bin/bash



 
1 line : 실습에 필요한 nginx가 설치된 ubuntu 16 버전 입니다. 해당 이미지는 docker hub에서 가져 옵니다.

8 ~ 13 line : 우분투 설치 후 한글 인코딩 환경 설정 하는 부분 입니다. 

14 ~ 17 line : iputils-ping 은 ping 설치를 위해서 이고, net-tools는 ifconfig 명령어를 사용하기 위해서 입니다.

이제 세팅 된 docker file 이 있는 디렉토리로 이동후 docker build를 하면 됩니다. 

빌드 하기전에 docker-machine 에서 docker 가상 머신의 상태를 확인해 주세요. 가상머신의 상태가 Running 이 아니면 작동하지 않아요

docker build -t my-dev . 터미널에 칩니다.

! Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 이런 메세지가 뜨면 당황하지 않고 

> eval $(docker-machine env) 

터미널에 쳐주세요. 해당 터미널에 Docker-machine 에 관한 환경 값이 적용 되지 않아서 그럽니다.

정상적으로 작동 하면 이미지를 다운받아 설치 하면서 해당 명령어 들을 수행합니다. 꽤 오랜 시간이 걸리니 좀 기다리시면 되요.

! 설치 중 debconf: delaying package configuration, since apt-utils is not installed 이런 메세지가 나왔다면
debconf 쓰실 분들만 


보고 해결하시면 될거 같아요 . 제 실습 에는 필요없는 부분 이라 정리하진 않겠습니다. 


Docker 컨테이너 network 구성

Docker는 가상 머신 내에 여러대의 컨테이너를 구성할 수 있는데요. 여기서 각 컨테이너들과 가상머신(Docker Host)는 브리지(Bridge)로 연결 되어 있습니다. 제가 오늘 실습할 네트워킹은 간단한 구성입니다. 하나의 Docker Host 아래에 두대의 컨테이너를 띄운 후 그 안에 결정된 ip 주소로 ping을 주고 받는 방식입니다. 처음 실습 했을 땐 nginx 까지 했던거 같은데 거기까지 할지는 잘 모르겠지만... 되게 어렵지 않게 실습 할 수 있습니다. 

Docker network에 더 자세한 내용을 알고 싶으신 분들은 아래 Docker docs 홈페이지를 참고해 주세요.

이런 구성 입니다. 위 그림은 위에 링크를 타고 가시면 볼 수 있어요.


이제 본격적으로 network 를 구성해 봅시다. 정말 간단합니다. 


> docker network create --subnet=172.25.0.0/16 my-net


이렇게 하면 이름이 my-net인  ip 범위 172.25.0.0/16를 가진 가상 네트워크 망이 생성 됩니다. 나머지 네트워크에 대해선 제가 깊이 잘 몰라 이정도 까지만 할당 하겠습니다. 


Docker 컨테이너 실행 시 network 붙여서 실행 하기

이제 다 왔습니다. 이제 아까 설치한 이미지를 실행 할때 network와 port를 설정 한 후 실행하면 끝납니다.

> docker images

터미널에 치면 아까 설치한 이미지가 보입니다.

docker network ls

역시 위에서 만든 my-net 네트워크가 보입니다. 해당 네트워크 정보를 보기 위해

docker network inspect my-net


보면 json 형식으로 데이터가 들어 있습니다. subnet을 보시면 위에서 설정한 ip 범위가 되어 있죠.


> docker run -dit --network=my-net -p 8001:8080 --name=my-run1 my-dev

docker run -dit --network=my-net -p 8002:8080 --name=my-run2 my-dev



터미널에 치면 앞에 8001 번은 docker 호스트를 통해 접속할 수 있는 port 번호 입니다. 뒤에 8080포트는 브릿지 내에 컨테이너 에서 접속하기 위해 열어 놓는 포트입니다. 네트워크 정보는 my-net으로 설정 되고 이미지는 my-dev이미지를 사용합니다. -d은 데몬으로 실행 할 수 있게 백그라운드 실행을 하기 위해서 입니다. 

-t 는 터미널 모드고 -i는 음 잘 모르겠습니다. 그냥 터미널에 접속 하려면 -dit 명령어를 쳐주세요.


! 혹시 명령어가 꼬여서 컨테이서 실행을 망쳤다면 과감하게 

 > docker stop $(docker ps -a -q)

 > docker rm $(docker ps -a -q)

로 삭제하고 다시 실행해 주세요 



그리곤 해당 컨테이너 이미지에 직접 접속하기 위해


> docker exec -it my-run1 /bin/bash


로 접속 한후 ifconfig 로 ip를 확인하면 172.25.0.2 로 할당됩니다. (1번은 Gateway에요.) ping 을 172.25.0.3 으로 날려 보세요 . 잘 날아 갑니다. exit 후 이번엔 두번째 서버로 들어가 보세요.


docker exec -it my-run2 /bin/bash


1번 과 마찬가지로 ifconfig 로 ip 주소 확인 후 ping을 172.25.0.2 번으로 날려보세요 . 잘 날아 갈 겁니다.


간단하게 나만의 ip 주소로 가상 네트워크 망을 생성해 docker container를 연결 해 보았습니다. 전 REST ful 예제를 실습하기 위한 프로젝트 진행을 위해 간단하게 작업해 보았는데요. 다들 Docker를 잘 활용해서 여러 프로젝트에 쓰면 유용할 것 같습니다. 



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함