도커 사용법
도커 완전 기초
이미지
도커허브라는 도커 공식 마켓이 있다고 가정하자. 참고로 도커허브를 도커 레지스트리 라고도 부른다.
아무튼 이 도커허브라는 마켓에서는 우분투, nginx, postgresSQL 등 과 같은 이미지라는 레시피를 판매하고있다.
이 레시피들은 검증된 개발자(IBM, MS, Oracle)에 의해서 만들어진 레시피이다.
이미지 내려받기
이 레시피들을 내려받기 위해서 pull이라는 명령어를 사용한다.
docker pull 이미지
컨테이너 실행
이 레시피(이미지)를 실행하게 되면 레시피에 맞는 컨테이너라는 특별한 상자가 생성된다.
상자 안에는 redis를 구동하기위해 필요한 파일이 담겨있다고 보면된다.
상자가 생성됨과 동시에 상자가 실행된다.
상자가 실행된다는 말은
상자(컨테이너) 안에서 redis가 실행된다 라고 보면된다.
docker run [옵션] [이미지 이름]
예시로 Redis를 실행하려면 다음 명령어를 사용할 수 있다.
docker run -d -p 8080:80 redis
-d : 백그라운드에서 실행
-p 8080:80 : 호스트의 8080번 포트를 컨테이너의 80번 포트와 연결
즉 ,외부에서 8080포트로 접속하면 컨테이너 80번 포트와 연결되면서 redis에 접근할 수 있게 된다.
실행 중인 컨테이너 확인
현재 실행중인 컨테이너를 확인하려면 다음 명령어를 사용할 수 있다.
docker ps
컨테이너 접속
docker exec -it [컨테이너 ID 또는 이름] /bin/bash
컨테이너 종료
docker stop [컨테이너 ID 또는 이름]
컨테이너 삭제
docker rm [컨테이너 ID 또는 이름]
이미지 삭제
docker rmi [이미지 이름]
이미지 생성
지금까지는 그냥 docker 완전 기초 명령어이다.
docker를 실제로 잘 활용하려면
도커 허브에서 만들어진 이미지를 pull받아서 사용하는 것도 있지만
이미지를 직접 생성(빌드)하는 일이 매우 중요하다
사용자 정의 이미지를 만들어보자.
예를들어 Spring 웹 애플리케이션을 컨테이너에 띄운다고 가정한다.
spring을 실행하려면 tomcat과 같은 외부 애플리케이션 서버에 배포해야 하므로 위와 같이 배포하는 것이 일반적이다.
이거를 컨테이너에 그냥 그대로 넣는다고 보면된다.
Dockerfile 작성
이미지를 만드는 과정은 아래와 같다
이미지를 만들기 위해서는 Dockerfile이라는 것을 작성해야한다
touch Dockerfile
Dokcerfile을 생성하여 아래와 같이 작성하면된다.
스크립트를 작성한다고 보면되는데
톰캣기반의 이미지를 가져다가
war파일은 뭘쓰고
포트는 뭘쓰고
실행을 할지 말지를
정하는 과정이라고 볼 수 있다.
# 1. Tomcat 9.0 이미지를 베이스로 사용
FROM tomcat:9.0
# 2. WAR 파일을 컨테이너의 Tomcat 웹앱 디렉토리로 복사
COPY target/your-application.war /usr/local/tomcat/webapps/
# 3. Tomcat 서버가 사용하는 포트 8080을 외부에 노출
EXPOSE 8080
# 4. Tomcat 서버를 실행하는 명령어
CMD ["catalina.sh", "run"]
FROM tomcat:9.0 는 Docker Hub에서 tomcat:9.0 이미지를 가져오는 것을 의미한다.
FROM : Dockerfile에서 사용하는 베이스 이미지를 지정하는 명령어이다
tomcat:9.0 : Docker Hub에 있는 Tomcat의 9.0 버전을 가져온다.
위 Dockerfile은 Docker Hub에서 Tomcat 9.0 버전 이미지를 다운로드한 후,이를 기반으로 컨테이너를 생성하게 된다.
Docker 이미지 빌드
Dockerfile이 있는 프로젝트 루트 디렉토리에서 아래 명령어를 실행하여 이미지를 빌드한다
docker build -t my-spring-app .
-t my-spring-app : 빌드된 이미지의 이름을 my-spring-app 으로 설정한다
. : 현재 디렉토리에 있는 Dockerfile을 사용하여 이미지를 빌드한다.
아래 명령어로 이미지가 잘 만들어 졌는지 확인한다
docker images
이미지 정보를 확인하려면 아래와같이 docker inspect 명령어를 사용하면된
docker inspect my-spring-app
Docker 이미지 실행
이미지 빌드가 완료되면, 다음 명령어로 이미지를 실행시키면 컨테이너가 생성 및 실행된다.
docker run -d -p 8000:8080 my-spring-app
-d : 컨테이너를 백그라운드에서 실행
-p 8000:8080 : 호스트의 8000 포트와 컨테이너의 8080 포트를 매핑
Docker Compose 설정
Docker Compose는 컨테이너 끼리 묶어서 한번에 여러 컨테이너를 실행할 수 있는 기능이다.
즉, 여러개의 서비스를 함께 관리할 수 있다는 뜻이다.
docker compose 작성
아래와 같이 Docker-Compose.yml 를 작성을 한다
touch docker-compose.yml
version: '3'
services:
app:
image: my-spring-app
ports:
- "8080:8080"
db:
image: mysql
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- "3306:3306"
docker compose 실행
Docker Compose 설정이 완료되면 아래 명령어로 여러 컨테이너를 한 번에 실행할 수 있다.
docker-compose up -d
Docker compose를 이용하여 마이크로 서비스 아키텍처를 구현할 수 있다.
'DevOps > 🐳 Docker & Kubernetes' 카테고리의 다른 글
Docker | 도커의 접근방식 DinD, DooD (0) | 2024.09.30 |
---|---|
Docker | GitLab 설치 (3) | 2024.09.27 |
Docker | PostgreSQL 설치 (2) | 2024.09.26 |
Docker | 도커 설치법 (0) | 2024.09.25 |
Docker | 도커란? (0) | 2024.09.25 |