본문 바로가기
개발 공부/인프라

[그림과 실습으로 배우는 도커 & 쿠버네티스] Ch4 - 컨테이너를 실행해 보자

by 진!!!!! 2025. 1. 5.

 

도커 엔진 시작하기/종료하기

도커 엔진은 설치와 함께 실행되며, 동작 상태로 남아있지만 컨테이너를 실행 중이 아니라면 컴퓨터 리소스를 거의 차지하지 않아 문제가 되지 않는다.

 

도커 데스크톱은 도커 엔진을 자동으로 실행하도록 설정되어 있기 때문에 이 설정도 비활성화하지 않으면 컴퓨터가 부팅될 때마다 도커 엔진도 자동으로 실행된다.

 

도커 엔진이 종료되면 모든 컨테이너가 정지 상태가 되므로, 정전 등으로 전원이 내려가면 복구를 위해 컨테이너를 따로 실행하는 스크립트를 작성해야 한다.

 

도커 엔진 시작: 도커 데스크톱 클릭

도커 엔진 종료: 화면 오른쪽 아래 태스크 트레이에서 아이콘 우클릭 후 Quit Docker Descktop

 

컨테이너의 기본적인 사용 방법

컨테이너를 다루는 모든 명령은 ‘docker’로 시작한다.

도커 명령어의 기본

docker [커맨드] (옵션) [대상] (인자)

penguin이라는 이름의 이미지를 pull: docker image pull penguin

penguin이라는 이름의 이미지로 컨테이너를 start: docker container start penguin

docker container run -d penguin --mode=1

 

-d: 백그라운드로 실행, —mode=1: 모드 1로 실행

상위 커맨드 container은 start와 run 등과 함께 쓸 경우 생략 가능하다.

docker run = docker container run

 

옵션

-또는 —로 시작하는 것이 일반적이지만 -기호를 붙이지 않는 경우도 있다.

백그라운드로 실행  -d
키보드로 조작 -i, -t
여러 옵션 모아 쓰기 -dit …
커맨드에 값 전달 —name 전달하고싶은 값

 

대상

커맨드와 달리 구체적인 이름을 지정

 

인자

-또는 —로 시작하는 경우가 많음

문자 코드 또는 포트 번호 등을 전달.

인자를 지정하는 경우는 많지 않음

실습

version 명령어 실행하기

cmd에 docker version 입력

docker version 

 

컨테이너 조작 관련 커맨드

docker container 하위_커맨드 옵션

 

이미지 조작 관련 커맨드

docker image 하위_커맨드 옵션

 

볼륨 조작 관련 커맨드

docker volume 하위_커맨드 옵션

 

네트워크 조작 관련 커맨드

docker network 하위_커맨드 옵션

도커 네트워크란? 도커 요소 간의 통신에 사용하는 가상 네트워크

 

컨테이너의 생성과 삭제, 실행, 정지

컨테이너 실행: docker run

docker run=docker create+docker start+docker pull

컨테이너 정지: docker stop

컨테이너 삭제: docker rm

 

주요 옵션

옵션 형식 내용
—name 컨테이너_이름 이름 지정
-p 호스트_포트번호:컨테이너_포트번호 포트 번호 지정
-v 호스트_디스크:컨테이너_디렉터리 볼륨 마운트
—net=네트워크_이름 컨테이너를 네트워크에 연결
-e 환경변수_이름=값 환경변수 설정
-d 백그라운드로 실행
-i 터미널(키보드) 연결
-t 특수 키 사용
-help 사용 방법 안내

 

컨테이너 정지

docker stop 컨테이너_이름

 

컨테이너 삭제

docker rm 컨테이너_이름

 

실행중인 컨테이너 목록 출력

docker ps (옵션)

 

현재 존재하는 컨테이너의 목록 출력

docker ps -a

아파치 웹 서버 컨테이너 생성, 실행, 확인, 종료, 삭제하기

  1. apa000ex1이라는 이름의 컨테이너를 httpd라는 이름의 이미지로 생성하여 실행
docker run --name apa000ex1 -d httpd
  1. 실행 중인 컨테이너의 목록 확인
docker ps

 

run 시 출력되는 문자열이 컨테이너의 ID이다.

 

도커 데스크톱에도 똑같이 추가되었다.

  1. 컨테이너 종료
docker stop apa000ex1

 

삭제 후 ps로 확인해보면 리스트에는 뜨지만 Exited 상태라고 나온다.

  1. 컨테이너 삭제
docker rm apa000ex1

다시 ps로 확인해보면 빈 리스트가 뜬다.

컨테이너의 통신

아파치란?

웹 서버 기능을 제공하는 소프트웨어다.

아파치가 동작 중인 서버에 파일(html 등)을 두면 파일을 웹 사이트 형태로 볼 수 있다

 

웹 브라우저를 통해 컨테이너에 접근하기

웹 브라우저를 통해 컨테이너에 접근하려면 포트(통신 내용이 드나드는 통로)를 설정해야한다,

아파치는 서버에서 정해둔 포트 (80번 포트)에서 웹 사이트에 대한 접근을 기다리다가, 접근 요청이 오면 웹 사이트의 페이지를 제공한다. 그러나 컨테이너 속에서 실행 중인 아파치는 외부와 직접 연결되지 않아 접근이 불가하다.

따라서 컨테이너가 포트를 열어 내부의 아파치와 연결해준다.

호스트 포트 번호를 겹치지 않게 설정해야 여러 개의 웹 서버를 함께 실행할 수 있다.!

(포트를 같게 하고 싶다면, 리버스 프록시로 서버 이름을 통해 구별하게 한다)

통신이 가능한 컨테이너 생성하기

  1. 컨테이너 생성 및 실행
docker run --name apa000ex2 -d -p 8080:80 httpd

 

2. localhost:8080 접속

  1. 중지 및 삭제
docker stop apa000ex2
docker rm apa000ex2

 

 

컨테이너 생성에 익숙해지기

웹 서버/데이터베이스 서버용 컨테이너

이미지 이름 컨테이너의 내용 비고
httpd Apache -d로 백그라운드 실행, -p로 포트 번호 지정
nginx Nginx -d로 백그라운드 실행, -p로 포트 번호 지정
mysql MySQL -d 시 -e로 MYSQL_ROOT_PASSWORD 지정
postgres PostgreSQL -d 시 -e로 POSTGRES_ROOT_PASSWORD 지정
mariadb MariaDB -d 시 -e로 MYSQL_ROOT_PASSWORD 지정

런타임과 그 외 소프트웨어

이미지 이름 컨테이너의 내용 비고
node Node.js -d 사용 x, 인자로 app 명령 등을 지정해 도구로 사용

 

아파치 컨테이너를 여러 개 실행하기

호스트 컴퓨터의 포트 번호는 중복되면 안되지만, 컨테이너 포트는 중복되어도 상관없으므로 모두 80번으로 설정한다. 포트 번호는 이미지 제작자가 지정한 것으로, 변경이 불가하다.

  1. 컨테이너 생성 및 실행
docker run --name apa000ex3 -d -p 8081:80 httpd
docker run --name apa000ex4 -d -p 8082:80 httpd
docker run --name apa000ex5 -d -p 8083:80 httpd

 

2. localhost 확인

8081, 8082, 8083 모두 접속된다.

3. 컨테이너 종료

docker stop apa000ex3
docker stop apa000ex4
docker stop apa000ex5

 

4. 컨테이너 삭제

docker rm apa000ex3
docker rm apa000ex4
docker rm apa000ex5

Nginx 컨테이너 실행하기

nignx란?

아파치와 같은 웹 서버 소프트웨어이다.

  1. 컨테이너 생성 및 실행
docker run --name nginx000ex6 -d -p 8084:80 nginx

 

2. 웹 페이지 확인

 

3. 컨테이너 종료

docker stop nginx000ex6

 

4. 컨테이너 삭제

docker rm nginx000ex6

 

MySQL 컨테이너 실행하기

  1. 컨테이너 생성 및 실행
docker run --name mysql000ex7 -dit -e MYSQL_ROOT_PASSWORD=myrootpass mysql

 

2. ps로 확인

 

3. 컨테이너 종료

docker stop mysql000ex7

 

4. 컨테이너 삭제

docker rm mysql000ex7

 

이미지 삭제

이미지로 컨테이너를 만들었으니, 이미지를 삭제해보자.

컨테이너를 삭제해도 이미지는 삭제되지 않고 그대로 남는다.

이미지가 늘어나면 용량이 부족해지므로, 이미지는 그때그때 삭제하도록 하자.

docker image rm 이미지_이름

 

여러개를 삭제하는 경우

docker image rm 이미지_이름 이미지_이름 이미지_이름

 

이미지 목록 확인하기

docker image ls

이미지 삭제하기

docker image rm httpd

httpd 이미지가 사라졌다.