반응형
1. 도커란?
도커는 컨테이너 가상화 기술을 사용한다. 그렇다면 가상화 기술은 무엇일까?
2. 가상화 기술
- Container (컨테이너형 가상화)
- 각 컨테이너는 호스트 OS 커널과 바이너리 및 라이브러리를 공유한다.
- 컨테이너는 VM 보다 구성이 간단하여 훨씬 가볍다.
- VM (호스트 운영체제형 가상화)
- 각 가상 머신 내에서 고유한 게스트 운영체제가 실행된다.
- 해당 운영체제 위에서 어플리케이션이 동작하는 방식이다.
3. 간단하게 Docker 테스트 해보기
3.1. shell script 생성
#!/bin/sh
echo "안녕 도커야!"
3.2. Dockerfile 작성
FROM ubuntu:16.04
COPY hellodocker /usr/local/bin
RUN chmod +x /usr/local/bin/hellodocker
CMD ["hellodocker"]
- FROM: 도커 이미지 정의
- COPY: 쉘 스크립트 파일을 도커 컨테이너 안의 /usr/local/bin에 복사
- RUN: 도커 컨테이너 안에서 명령어 수행
- CMD: 완성된 이미지를 도커 컨테이너로 실행하기 전에 먼저 실행할 명령 정의
3.3. 파일 확인
$ls
Dockerfile hellodocker
3.4. docker 이미지 빌드
$ docker image build -t hellodocker:latest .
3.5. docker image 확인
$ docker images hellodocker
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodocker latest 44ce1c5ce5dc 35 seconds ago 135MB
3.7. docker 컨테이너 띄우기
$ docker run hellodocker
안녕 도커야!
3.8. docker 컨테이너 확인
예시와 같이 스크립트를 실행하고 종료된 경우, 컨테이너의 상태가 Exited가 되기 때문에 docker ps로 상태를 볼 수 없고 —all 옵션을 통해 종료된 컨테이너 정보도 확인할 수 있다.
$ docker ps --all | grep hellodocker
369192c285bb hellodocker "hellodocker" 2 minutes ago Exited (0) 2 minutes ago infallible_allen
3.9. docker 컨테이너 삭제
테스트가 끝났으니 컨테이너 찌꺼기를 삭제해주자.
$ docker rm 369192c285bb
369192c285bb
3.10. docker image 확인
테스트가 끝났으니 이미지를 확인해보고 이것도 지워주자. 간단한 테스트지만 우분투 이미지 기반이라 용량이 무려 135MB나 된다.
$ docker images hellodocker
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodocker latest 10b391adfcb7 3 minutes ago 135MB
3.11. docker image 삭제
$ docker rmi hellodocker
Untagged: hellodocker:latest
Deleted: sha256:10b391adfcb7c7640b8cde4de4230f344233d17ef7d98748129f85a4aab1a8ee
4. Docker를 왜 사용할까?
- 변화하지 않는 실행환경으로 멱등성 확보
- 코드를 통한 실행환경 구축 및 애플리케이션 구성
- 실행 환경과 애플리케이션의 일체화로 이식성 향상
- 시스템을 구성하는 어플리케이션 및 미들웨어의 관리 용이성
즉, docker를 통해 인프라 환경이 원인이 되는 말썽을 최소한으로 줄일 수 있다. (컨테이너를 쓴다고 전부 사라지지는 않지만, 최소한 환경 차이나 서버 설정에 의한 문제는 잡을 수 있고, 서버의 구축 속도도 확연히 차이가 난다.)
5. 도커 컨테이너 오케스트레이션 시스템
5.1 도커 컴포즈(Docker Compose)
- 여러 컨테이너를 사용하는 어플리케이션을 쉽게 관리할 수 있도록 하는 도구 (단일 서버에서 여러 컨테이너를 관리할 때 사용)
- yaml 포맷으로 작성된 설정 파일로 컨테이너를 정의하거나 컨테이너 간의 의존 관계를 정의해 시작 순서를 제어할 수 있음
예시) 몽고 서버 docker-compose 파일
$ cat compose.yml
version: '3.8'
services:
mongodb:
image: mongo:4.0.24
container_name: mongo-test
restart: always
ports:
- 27017:27017
volumes:
- ./mongodb:/data/db
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=1234
- MONGO_INITDB_DATABASE=test
5.2 도커 스웜 (Docker Swarm)
- 여러 서버에 걸쳐 있는 여러 컨테이너를 관리할 수 있도록 한 도구
- 컨테이너 오토스케일링, 리소스를 활용한 컨테이너 배치나 로드밸런싱 기능 등 활용 가능
5.3 쿠버네티스
- 컨테이너 오케스트레이션의 끝판왕
- 도커 컴포즈와 도커 스웜의 장점을 모두 수용하고 다양한 오케스트레이션 기능을 추가로 지원한다.
- 쿠버네티스와 함께 사용할 수 있는 다양한 툴들이 있다.
본 내용은 `도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문` 책을 공부하고 테스트하며 작성한 내용이라 책의 내용과 겹치는 내용이 있습니다. (저작권에 문제가 되면 내리겠습니다.) 도커를 처음부터 잘 설명해둔 책이라 추천드립니다. 🙇🏻♂️
6. 출처
반응형
'개발' 카테고리의 다른 글
[Kafka] Kafka란? (0) | 2022.06.18 |
---|---|
[Redis] Redis 설치(docker)와 redis-cli 사용법 (0) | 2022.03.29 |
[Spring Cloud] Hystrix 파헤치기 (0) | 2021.11.07 |
[Golang] Go 언어 빠르게 훑어보기 (0) | 2021.10.26 |
gradle (0) | 2021.08.16 |