자신의 OS 환경에 맞춰서 Docker Desktop을 설치하면 된다.
https://www.docker.com/products/docker-desktop/
설치 후에 접속하면 다음과 같이 나타난다.
첫 접속시에는 매우 친절한 튜토리얼도 제공하는데 한번 해보는 것을 추천한다.
RUN
: 이미지를 생성하는 과정에서 실행되는 것CMD
: 이미지로부터 컨테이너가 만들어져 가동될 때 기본적으로 실행되는 명령어COPY
: RUN
처럼 이미지를 생성하는 과정에서 해당 이미지 안에 특정 파일을 미리 넣어두는 것CMD
처럼 컨테이너가 생성되어 실행될 때 그 내부의(ex: $(pwd)) 폴더를 외부의 것과 연결하는 것docker image
-a
: 해당 옵션을 사용하면 도커 빌드 중에 생성되어 이름과 태그가 지정되지 않은 중간이미지들도 확인 가능하다.docker ps
-a
: 해당 옵션을 사용하면 현재 작업중인 아닌 컨테이너도 보임)이미지 생성 명령어
docker build -t {이미지명} {Dockerfile로의 상대경로}
컨테이너 시작 & 들어가기 : docker run
에 아래 옵션들을 줘서 사용
--name {생성할 컨테이너명}
-v
-v {연결할 외부 디렉토리}:{컨테이너 내 디렉토리}
-d
-p
: 포트 설정-p {host port no.}:{container port no.}
docker run --name {컨테이너명} -v "$(pwd):/home/node/app -p 8080:8081 {이미지명}
이런 식으로 바꿔줘야 한다.-it
docker run --name {컨테이너명} -v "$(pwd):/home/node/app -d -p 8080:8080 {이미지명}
컨테이너 중지
docker stop $(docker ps -aq)
: 모든 컨테이너 중지삭제 커맨드
docker rm {컨테이너 id 또는 이름}
: 특정 컨테이너 삭제
docker rm $(docker ps -aq)
: 모든 컨테이너 삭제
docker prune -a
: 사용되지 않는 모든 도커 요소(컨테이너, 이미지, 네트워크, 볼륨) 삭제
# 세트처럼 쓰면 편하다
docker stop $(docker ps -aq)
docker system prune -a
docker logs -f {컨테이너명}
위의 명령어 예시처럼 프론드엔드, 백엔드, 데이터베이스 각각에서 이미지를 빌드하고 컨테이너를 run하는 방법도 있다. 하지만 이렇게 되면 프론트엔드와 백엔드 연결이 안 될 뿐더러 매우 번거롭다.
그래서 한번에 해결하는 docker-compose가 존재한다.
예시를 보면서 하나씩 알아보자. (들여쓰기 주의)
version: '3'
services:
database:
# Dockerfile이 있는 위치
build: ./database
# 내부에서 개방할 포트 : 외부에서 접근할 포트
ports:
- "3306:3306"
backend:
build: ./backend
# 연결할 외부 디렉토리 : 컨테이너 내 디렉토리
volumes:
- ./backend:/usr/src/app
ports:
- "5000:5000"
# 환경변수 설정
environment:
- DBHOST=database #db에 접속할 때 이 호스트명을 사용해서 db 컨테이너의 mysql에 접속
frontend:
build: ./frontend
# 연결할 외부 디렉토리 : 컨테이너 내 디렉토리
volumes:
- ./frontend:/home/node/app
ports:
- "8080:8080"
docker-compose 파일이 있는 위치에서 해당 커맨드를 실행한다.
-d
옵션도 줄 수 있다.
나머지는 도커가 알아서 한다~
docker push [ docker hub 이름 ]/[ 이미지명 ]:[ version ]
docker tag [ 이미지명 or 태그 ] [ docker hub 이름 ] / [ 이미지명 ]
docker push [ 생성했던 tag]
docker pull [ 이미지명 ]:[ version ]
https://www.yalco.kr/36_docker/
https://www.youtube.com/watch?v=hWPv9LMlme8
https://www.youtube.com/watch?v=tPjpcsgxgWc
해당 포스팅은 이화 DnA 활동의 일환으로 작성된 블로그 포스팅입니다. 다음 링크에서도 해당 포스팅을 비롯한 다른 포스트도 확인하실 수 있습니다. ENN Lab