1. 도커엔진설치하기, 컨테이너 생성하기 & 외부 노출

2020. 2. 27. 20:51Docker Kubenetes

우분투에 리눅스 도커 엔진 설치

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 

# add-apt-repository \

"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# apt-get update

# apt-get install docker-ce

시간이 좀 걸림

 

# docker info

 

컨테이너 생성

도커 엔진의 버전 확인

# docker -v

 

도커 컨테이너 생성 

1. run 명령어 사용(시간이 좀 걸림)
# docker run -i -t ubuntu:14.04
- docker run은 컨테이너를 생성하고 실행하는 역할
- -i -t옵션은 컨테이너와 상호 입출력을 가능하게 함
-

ubunut:14.04 이미지가 로컬 도커 엔진에 존재하지 않으므로 도커 중앙 이미지 저장소인 도커 허브에서 자동으로 이미지를 내려받는다

 

- 생성 및 실행과 동시에 컨테이너 내부로 접속

- 셸의 사용자와 호스트 이름이 변경된 것이 컨테이너 내부에 들어와 있다는 것을 나타냄

- docker run 명령어로 컨테이너를 생성할 때 -i 옵션으로 상호 입출력을, -t 옵션으로 tty를 활성화 해서 배시 셸을 사용하도록 컨테이너를 설정. 두 옵션 중 하나라도 사용하지 않으면 셸을 정상적으로 사용 불가

 

- 셸에서 빠져나오기
1) exit 나 Ctrl + D : 컨테이너 내부에서 빠져나오면서 동시에 컨테이너를 정지

2) Ctrl + P, Q : 컨테이너를 정지하지 않고 빠져나옴

 

2. create 명령어 사용

# docker pull centos:7 ( 시간 좀 걸림 )

이미지 다운로드

# docker images 

다운 받은 이미지 확인

# docker create -i -t --name mycentos centos:7
# docker start mycentos
# docker attach mycentos

 

컨테이너 목록 확인

# docker ps -a 

 

컨테이너 삭제

(# docker stop mycentos) 실행중인 컨테이너의 경우 멈추고 삭제해야됨

# docker rm mycentos

 

# docker rm -f 컨테이너이름 : 실행중인 컨테이너 강제 삭제

 

모든 컨테이너 삭제

# docker container prune

 

2.2.4 컨테이너를 외부에 노출

- 컨테이너는 가상 머신과 마찬가지로 가상 IP 주소를 할당 받는다

- 127.17.0.x의 IP를 순차저으로 할당

도커의 NAT IP인 172.17.0.2를 할당받은 eth0 인터페이스와 로컬 호스트인 lo 인터페이스

아무런 설정을 하지 않았다면 이 컨테이너는 외부에서 접근 불가하고 도커가 설치된 호스트에서만 접근 가능

-> 외부에 컨테이너의 애플리케이션을 노출하기 위해서는 eth0의 IP와 포트를 호스트의 IP와 포트에 바인딩해야 함

 

컨테이너에 아파치 웹 서버 설치하여 외부에 노출

호스트로 이동

# docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04

  - mywebserver 컨테이너를 생성하여 외부에 노출 

  - -p옵션: 컨테이너의 포트를 호스트의 포트와 바인딩해 연결할 수 있게 설정

                 [호스트의 포트]:[컨테이너의 포트]

  - ex) # docker run -i -t -p 3306:3306 -p 192.168.182.129:7777:80 ubuntu:14.04

          ㄴ 호스트의 7777번포트를 컨테이너의 80포트와 연결

          ㄴ 호스트의 특정 ip를 사용하려면 192.168~~:80과 같이 바인딩할 IP와 포트를 명시

          ㄴ 여러개의 포트를 외부에 개방하려면 -p 옵션을 여러번 써서 설정

 

아파치 웹서버 설치

# apt-get update

# apt-get install apache2 -y

# service apache2 start -> 안되면 다시 한번

 - 도커엔진의 호스트IP:80으로 접근.

 - 실제 아파치 서버가 설치된 것은 컨테이너 내부이므로 호스트에는 영향을 주지 않음

 

프로세스 설명

호스트 IP의 80포트로 접근 -> 80번 포트는 컨테이너의 80번 포트로 포워딩 -> 웹 서버 접근

 


워드프레스 기반 블로그 서비스 만들기 : 데이터베이스와 워드프레스 웹 서버 컨테이너 연동

 

1. 데이터 베이스 컨테이너 생성

2. 웹 서버 컨테이너 생성 : 미리 준비된 워드프레스 이미지 이용

- -p 옵션에서 80을 입력했으므로 호스트의 포트 중 하나와 컨테이너의 80번 포트가 연결됨

# docker ps 명령어로 어느 포트와 연결됐는지 확인

# docker port 컨테이너이름

: 호스트와 바인딩된 포트만 확인

 


docker run 옵션

-i -t : 상호작용. 컨테이너 내부로 진입하도록 attach 가능한 상태로 설정

-d : detached. 컨테이너를 백그라운드에서 동작하는 애플리케이션으로써 실행하도록 설정
      입출력이 없는 상태로 컨테이너를 실행

-e : 컨테이너 내부의 환경변수를 설정

--name : 컨테이너 이름 설정

--link '컨테이너이름':'별명' : 내부 IP를 알 필요 없이 항상 컨테이너에 별명으로 접근하도록 설정

                                    -> 도커 브리지 네트워크를 사용하는 것을 권장

-p 80 : 컨테이너의 80포트를 외부에 노출

-v : 디렉터리공유. '호스트의 공유디렉터리':'컨테이너의 공유 디렉터리'

 

 

 

'Docker Kubenetes' 카테고리의 다른 글

2. 도커 볼륨_ 디렉터리 공유  (0) 2020.02.27