
Docker는 컨테이너(Container)라는 기술을 사용하는 가상화 플랫폼이다.
전통적인 가상머신(VM)보다 훨씬 가볍고 빠르며, 백엔드 개발이나 devops 환경에서 필수적인 도구이다.
Docker를 사용하면 좋은 점
보다 구체적인 내용(https://velog.io/@sungbinm/Docker%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80) 참고
Ubuntu에 Docker를 설치하는 가장 안전하고 권장되는 공식 방법은 다음과 같다.
sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker --version
설치만 하고 끝내기보단 실제로 Docker를 사용해서 실습을 해보려한다.
Redis라는 백엔드 서비스(서버)를 Docker로 실행해보고, 서버가 실행되는게 뭔지 몸으로 느껴보려 한다. 포트를 통해 서버와 통신할 수 있다는 걸 체험할 수 있다.
간단하게 Redis란,
Redis 실행
터미널에 아래 명령어를 친다.
docker run -d --name redis-server -p 6379:6379 redis
docker run은 Docker 컨테이너를 실행하는 것이고, Redis 이미지를 사용해서 컨테이너 이름을 redis-server로 지정하고 내 컴퓨터의 6379 포트를 Redis 컨테이너의 6379 포트와 연결해서 컨테이너를 생성한다.
실행 확인
docker ps를 통해 확인할 수 있다.
Redis 서버에 접속해보기
Redis 서버는 지금 Docker 컨테이너 안에서 실행되고 있기에, 이 서버에 명령을 내려보려면 Redis 클라이언트(recis-cil)이 필요하다.
docker exec -it redis-server redis-cli
-> docker exec(실행중인 컨테이너 안에서 명령어 실행) 즉 이를 통해 Redis 명령어를 입력할 수 있는 상태로 들어가게 된다.
ex)
set mykey hello
get mykey
-> mykey에 저장된 값 꺼내옴("hello")
cf) exit을 통해 다시 나갈 수 있음
Redis는 단순한 key-value 저장소이며, 엄청 빠른 메모리 기반 저장소라서 캐시, 세션 저장 등에 자주 사용된다.
부가적인 명령어들
docker stop redis-server 서버중지docker start redis-server 서버 다시 시작docker rm -f redis-server 서버 완전히 삭제 (컨테이너 삭제)docker logs redis-server 서버 로그 확인이번엔 PostgreSQL이라는 관계형 데이터베이스(DB) 서버를 Docker로 실행해보고, 데이터베이스도 서버로 동작한다는 것을 체험해보려 한다.
간단하게 PostgreSQL이란,
PostgreSQL 실행
docker run -d --name my-postgres -e POSTGRES_PASSWORD=1234 -p 5432:5432 postgres
앞 과정과 비슷하고 똑같이 ps를 통해 확인할 수 있다.
PostgreSQL에 접속해보기
docker exec -it my-postgres psql -U postgres
앞 과정과 비슷하고 postgres 사용자로 psql 클라이언트를 실행한 것이다.
ex)
CREATE TABLE test (id SERIAL PRIMARY KEY, name VARCHAR(50));`
INSERT INTO test (name) VALUES ('hello');`
SELECT * FROM test;
table 생성하고 데이터를 넣고 내용 조회하는 간단한 코드
cf) \q를 통해 접속 종료할 수 있음
mkdir fastapi-example
cd fastapi-example
nano main.py
그리고 이 nano editor를 활용해서 아래 코드를 작성해준다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, Docker!"}
nano Dockerfile
다음 내용 붙여넣기:
FROM python:3.10
WORKDIR /app
COPY main.py .
RUN pip install fastapi uvicorn
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
동일하게 저장후 종료
docker build -t my-fastapi .
빌드할 Dockerfile이 있는 경로를 꼭 지정해줘야하기 때문에 .을 무조건 빼먹으면 안 된다.
docker run -d -p 8000:8000 my-fastapi
http://localhost:8000 → JSON으로 { "message": "Hello, Docker!" } 확인
http://localhost:8000/docs → 자동 생성된 API 문서 확인
만약 GUI가 없는 환경이라면
curl명령어로 대신 확인 가능
curl http://localhost:8000