docker pull (options) (image) => 도커 허브에 존재하는 이미지를 다운 받아옴
docker rmi (options) (image) => 저장되어 있는 도커 이미지 삭제
docker rm (options) (container) => 저장되어 있는 컨테이너 삭제
(--force 옵션을 추가하면 어떤 상황에 상관없이 명령 수행 가능)
docker run --name (컨테이너이름) -p 외부접근포트:내부개방포트 (image) => 도커 컨테이너 생성, 실행
(-v: 볼륨설정 옵션이며 오른쪽과 같은 형식으로 넣어주면 된다 (연결할 로컬 디렉토리):(연결될 컨테이너 디렉토리))
(**윈도우는 상대경로가 먹히지 않으니 절대경로로 지정 해주자**)
docker stop (options) (container) => 도커 컨테이너 중지
docker start (options) (container) => 저장되어 있는 컨테이너 실행
docker logs (options) (container) => 실행중인 컨테이너 로그 출력 (-f옵션을 넣을 경우 지속적으로 로그 출력)
docker ps (options) => 현재 실행중인 컨테이너 출력 (-a 옵션을 넣을 경우 실행중이 아닌 컨테이너도 출력)
docker exec (options) (container) (command) => 컨테이너 내부에서 명령어 실행
docker exec (options) (container) /bin/sh or bash => 컨테이너 본쉘 or 배쉬쉘 실행
(-it 옵션을 넣을 경우 컨테이너에 붙을 수 있음)
exit => 컨테이너와 연결 끊음
기타 옵션들은 공식페이지 docs 참고
docker build -t {이미지명} .
실행 명령어 (터미널에 로그 찍히는 것 보기)
-it: 도커 컨테이너와 지속적인 연결 옵션
-p: 외부접근포트:내부개방포트
docker run --name {컨테이너명} -it -p 3306:3306 {이미지명}
실행 명령어 (데몬으로 실행)
docker run --name {컨테이너명} -p 3306:3306 -d {이미지명}
컨테이너 생성 & 실행 명령어
-v => $(연결할 로컬 디렉토리):(연결될 컨테이너 디렉토리)
docker run --name {컨테이너명} -v $(pwd):/usr/src/app -p 5000:5000 {이미지명}
version: '3' # 버전
services:
database: # 하위 디렉터로 나누어 설정하기 위함
build: ./database # 도커 파일 위치
ports:
- "3307:3306" # 외부에서 접근 할 포트 : 내부에서 개방 할 포트
backend:
build: ./backend
volumes:
- ./backend:/usr/src/app # 소스 파일 경로 : 연결할 디렉토리
ports:
- "5001:5000"
environment:
- DBHOST=database # 환경변수 설정
frontend:
build: ./frontend
volumes:
- ./frontend:/home/node/app
ports:
- "8081:8080"
FROM : Docker Base Image (기반이 되는 이미지, <이미지 이름>:<태그> 형식으로 설정)
MAINTAINER : 메인테이너 정보 (작성자 정보)
RUN : Shell Script 또는 명령을 실행
CMD : 컨테이너가 실행되었을 때 명령이 실행
LABEL : 라벨 작성 (docker inspect 명령으로 label 확인할 수 있습니다.)
EXPOSE : 호스트와 연결할 포트 번호를 설정한다.
ENV : 환경변수 설정
ADD : 파일 / 디렉터리 추가
COPY : 파일 복사
ENTRYPOINT : 컨테이너가 시작되었을 때 스크립트 실행
VOLUME : 볼륨 마운트
USER : 명령 실행할 사용자 권한 지정
WORKDIR : "RUN", "CMD", "ENTRYPOINT" 명령이 실행될 작업 디렉터리
ARG : Dockerfile 내부 변수
ONBUILD : 다른 이미지의 Base Image로 쓰이는 경우 실행될 명령 수행
SHELL : Default Shell 지정
도커파일로 개별 설정이후에 컴포즈로 묶어주는것
도커, 컴포즈 파일은 Tab을 인식 못하기때문에 하위 디렉토리를 나누어 줄 경우 무조건 스페이스바로 나누어야함
도커파일에서 EXPOSE 부분에 포트와 서버 응답포트를 같게 설정해주자
SQL 파일 실행 하기
COPY (sql 파일 경로) /docker-entrypoint-initdb.d/
DB 서버 시간 설정
RUN apt-get update; \
apt-get install -y apt-utils nano curl git locales tzdata;
# LOCALE 설정
RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.utf8
# localtime 에 링크할 시간대를 링크.
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# 원하는 시간대 링크후 아래 수행시, /etc/timezone 파일변경됨.
RUN dpkg-reconfigure -f noninteractive tzdata
Prisma env 설정
# 도커 컨테이너가 다른 컨테이너에 접근할 경우 host는 접근 컨테이너에 서비스 이름 이다.
DATABASE_URL=postgresql://{db_user_name}:{pass}@{host}:5432/{db_name}?{접근 할 스키마 지정 옵션 추가 가능}
Network
# 네트워크 생성
docker network create (네트워크 이름)
# 네트워크 삭제
docker network rm (네트워크 이름)
# 네트워크 목록 불러오기
docker network ls
# 네트워크 정보 불러오기
docker network inspect (네트워크 이름)
위는 내부 네트워크 지정 이며 DockerCompose 내에서
사용할 외부 내트워크를 지정 해주어야 한다.
...
services:
db:
network:
- testnet
...
...
networks:
testnet:
external: true