반응형
05-14 20:55
Today
Total
«   2024/05   »
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 31
관리 메뉴

개발하는 고라니

[Docker] 도커 호스트와 컨테이너 본문

Open Source/Docker

[Docker] 도커 호스트와 컨테이너

조용한고라니 2021. 9. 28. 20:21
반응형
 

[Docker] 기초 사용법과 개념

개발을 하다보면, Docker라는 단어를 많이 접해보았을 것이다. 그것을 사용해보지 않았더라도 대충 뭐 해주는 얘다 정도로 알고있을 수 있다. 하지만 이제 도커는 웹 개발할 때 뿐만 아니라 일상

dev-gorany.tistory.com

이전 글에 이어서 진행되는 내용입니다.


커여운 도커

저번에 했던 내용은,

1) 도커 설치

2) 도커에 Apache web server(httpd) 이미지 pull

3) httpd 컨테이너 만들어서 run

이다.

 

즉, 컨테이너 안에서 웹 서버가 돌고 있는 것이다. 이 컨테이너 안에 설치된 웹 서버는 어떻게 사용해야할까? 그전에 컴퓨터에 설치된 웹 서버의 동작을 먼저 보자.

출처: 생활코딩 유튜브

좌측이 클라이언트, 우측이 웹 서버이다.

 

위 그림을 토대로 웹 서버 동작을 본다.

클라이언트가 http://example.com/index.html을 을 요청하면, example.com 이라는 도메인을 가진 친구한테 가서 http 포트(80)로 접속이 된다. 그럼 웹 서버는 이를 자신의 파일 시스템 안에 'index.html'을 찾고, 그것을 읽어서 클라이언트에게 보여준다.

 

도커를 이용한 웹 서버

이제 도커를 이용해 웹 서버를 이용하는 방법을 보자.

 

docker run httpd

출처: 생활코딩 유튜브

 

도커를 이용하면 웹 서버가 컨테이너에 설치되고, 컨테이너가 설치된 운영체제는 "도커 호스트"라고 부른다. 하나의 도커 호스트에는 여러 개의 컨테이너가 만들어질 수 있고, 각각 독립적으로 실행되기 때문에 각자 독립적인 포트와 파일 시스템을 갖는다.

 

이제 웹 브라우저로 웹 서버에 연결하면 연결이 안된다. 호스트와 컨테이너의 연결이 끊겨있기 때문이다. 그래서 호스트의 80 port와 컨테이너의 80 port를 연결해줘야 한다.

docker run -p 80:80 httpd

출처: 생활코딩 유튜브

 

-p 옵션은 시작할 때의 포트를 설정하는 옵션이고, 앞의 80은 호스트의 포트, 뒤의 80은 컨테이너의 포트이다. (포트포워딩)

실습

/* 호스트으 80포트로 들어오는 요청을 컨테이너의 80포트로 넘기는 'apache'라는 이름의 컨테이너 생성 */
docker run --name apache -p 80:80 httpd

/* 호스트으 8081포트로 들어오는 요청을 컨테이너의 8081포트로 넘기는 'apache2'라는 이름의 컨테이너 생성 */
docker run --name apache2 -p 8081:80 httpd

아파치 웹 서버가 정상적으로 동작하는 것을 확인할 수 있다.

컨테이너 내부의 내용 작업 - exec

도커를 이용해 컨테이너를 만들고 그안에 웹 서버를 실행시켰다. 로컬호스트와 컨테이너를 잘 연결했지만, 그 안에 자원을 넣어둘 수 없다면 무슨 소용이 있는가. 그래서 컨테이너 안에서 작업을 해보려고 한다.

 

도커에는 exec 라는 명령어가 있다. 이는 실행중인 컨테이너에 커맨드를 구동하기 위한 명령어이다.

옵션에는 다양한 것이 있다.

옵션 이름 설명
--detach, -d 백그라운드에서 명령을 실행한다.
--detach-keys 컨테이너 분리를 위한 키 시퀀스 재정의
--env, -e 환경 변수를 설정한다
--env-file 환경 변수의 파일에서 읽는다.
--interactive, -i 연결되지 않은 경우에도 표준입력을 유지한다.
--user, -u username이나 UID(형식: <name|uid>[:<group|gid>])
--tty, -t 가짜-TTY를 할당한다.

 

docker exec apache2 /bin/sh

docker exec -it apache2 /bin/sh

CMD에서 아래의 명령어를 입력하면, 입력 받는 부분이 '#'으로 변한다. 즉, 리눅스의 쉘이 실행된 것이다. 쉘은 명령을 입력 받아 운영체제로 전달해주는 역할을 한다.

이제 apache2라는 컨테이너의 내부로 들어온 것이고, 여기서 자유롭게 리눅스 탐험을 할 수 있다. 근데 리눅스의 CUI를 써본 사람들은(어쩌면 모두가) 불편하다. 덩그러니 '#'만 있고, 내가 어디에 있고, 어떤 유저로 접속해있는지 안보인다. 그래서 bash를 쓰도록 하자.

docker exec -it apache2 /bin/bash

 

#Reference 및 출처

 

반응형

'Open Source > Docker' 카테고리의 다른 글

[Docker] Dockerfile과 Build  (0) 2021.10.02
[Docker] 기초 사용법과 개념  (2) 2021.09.28
Comments