[Docker] DB, 웹서버 셋팅으로 알아보는 포트포워딩, 컨테이너, 볼륨
도커 포트 포워딩
- 호스트 PC에서 docker port로 접근이 가능한 상태
- 혹은 외부에서 docker port로 접근할 수 있도록 해줘야함.
웹서버 띄우고 외부접속으로 알아보는 도커 포트포워딩
(1)
$ docker run -i -t --name myApacheWebServer -p [나의 Ip]:7777:80 ubuntu:14.04
(2)
/# apt-get update
/# apt-get install apache2 -y
/# service apache2 start
- (1)
- ubuntu:14.04 버전을 설치, 실행한다. 내가 지정한 해당 컨테이너의 name은 myApacheWebServer 이다.
- -i -t로 실행하면서 bash 셸을 사용할 수 있다.
- 외부에서 나의IP:7777로 접근하면 내가 방금 설치한 ubuntu:14.04에서 띄운 아파치 웹서버로 접속이 된다.
- (2)
- docker names가 myApacheWebServer 인 ubuntu:14.04 에서 아파치 웹서버를 설치하고 띄운다.
- Tip(1)
- 어떻게 shell에서 컨테이너 종료없이 나가나요?
- 컨트롤 p, 컨트롤 q를 차례로 눌러줍니다.
- $ docker ps 로 확인해보죠!
- 어떻게 shell에서 컨테이너 종료없이 나가나요?
- Tip(2)
- 위에서 run이 되고 만약 ubuntu:14.04 컨테이너가 죽은 경우(stop) = exit를 쓴다던가 하면,
- start명령어로 다시 도커를 띄우고 attch로 접근 할 수 없음.
- 다시 ubuntu:14.04의 bash셀을 가능하게 하려면
docker exec -it [컨테이너ID 4자리 이상] bash
or $ docker exec -i -t [이미지이름] /bin/bash
를 통해서 bash쉘 사용이 가능하다.
도커 볼륨
- 컨테이너 데이터를 영속적 데이터로 활용하는 방법 = 볼륨
- 이러한 볼륨에는 여러방법이 있는데, 저는 주로 목적에 따라 호스트 볼륨 공유방법을 사용합니다.
MySql(MariaDB)도커 셋팅으로 알아보는 호스트와 공유하는 볼륨셋팅 방법
docker run -d \
--name mymariadbtest \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=1234 \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=password \
-e MYSQL_DATABASE=mymariadb \
-v ~/Host의 디렉토리 경로/data:/var/lib/mysql \
-v ~/Host의 디렉토리 경로/conf:/etc/mysql/conf.d \
mariadb:10.3.11
- mariadb 10.3.11버전이 없으면 pull(다운받아서) run(실행)
- 컨테이너 이름은 mymariadbtest
- -d 옵션으로 데몬으로 실행
- 포트는 3306->3306 (호스트 3306으로 들어오면 도커포트 3306으로 매칭)
- 루트,유저,패스워드,디비정보 를 -e 옵션주고 셋팅할 수 있음
- -v 옵션으로 호스트의 볼륨(디스크저장소)과 매치(공유)를 시킬 수 있다
- -v 옵션으로 호스트 디렉토리와 컨테이너 디렉토리와 연결
- 저 같은 경우에는 DB데이터와 환경설정 저장을 각각 다르게 매치했습니다.
- var/lib/mysql 은 mysql 컨테이너에서 데이터를 저장하는 경로
- etx/mysql/conf.d 는 컨테이너에서 기본 conf 경로
- 여러개의 -v 옵션으로 디렉터리단위나 파일단위로 연결할 수 있다.
컨테이너화?
- 각 애플리케이션을 하나의 컨테이너로 만드는 것 = 컨테이너화
- db, 웹서버, elk 등등의 이미지를 하나의 컨테이너 안에 담는다? 정도로 생각
- 아래 그림참고.
- 우측처럼 각 애플리케이션들을 분리하는 것이 여러모로 운영 측면에서 가장 효율적임!
- 분리하면 초기 셋팅이 꽤나 귀찮기도 하겠습니다만..도커의 철학인 분리를 지켜보는 쪽으로…