Docker는 컨테이너 기반의 가상화 플랫폼으로, 애플리케이션을 격리된 환경에서 실행할 수 있게 해줍니다. 이를 통해 애플리케이션을 다양한 환경에서 일관되게 실행하고 배포할 수 있습니다.
FROM
: 베이스 이미지 지정 (필수)WORKDIR
: 작업 디렉토리 지정 (cd 명령어)COPY
: 호스트에서 컨테이너로 파일 및 디렉토리 복사RUN
: 쉘 명령어 수행ENV
: 환경 변수 설정ARG
: 빌드 시 인자 설정 (빌드 후 제거)CMD
: 컨테이너 시작 시 실행할 기본 명령어ENTRYPOINT
: CMD 와 비슷하나, 고정 명령.gitignore
처럼 docker build 시 Container 내부에 복사하지 않도록 지정하는 파일도커의 기본 네트워크 모드는 Bridge이고 이외에 Host, None 이 추가적으로 존재합니다. 외에도 macvlan, ipvlan, overlay와 같은 네트워크 플러그인을 사용할 수 있습니다.
docker network ls
NETWORK ID NAME DRIVER SCOPE
5d4ec64ed746 bridge bridge local
71da3212e9dc host host local
90a304de3e67 none null local
docker info | grep Network
Network: bridge host ipvlan macvlan null overlay
도커에서 기본적으로 쓸 수 있는 네트워크입니다.
호스트의 환경을 그대로 사용하는 것을 의미합니다.
아무런 네트워크를 쓰지 않는 것을 의미합니다.
멀티 스테이지 빌드
linux/amd64
, linux/arm64
, windows/amd64
버전 확인
docker --version
이미지 빌드
docker build -t <이미지이름>:<태그> .(위치)
이미지 다운로드
docker pull <이미지이름>
이미지 목록 확인
docker images
이미지 제거
docker rmi <이미지이름>
이미지 존재 여부 확인
docker manifest inspect <이미지이름>:<이미지태그>
컨테이너 생성
docker create <이미지이름>:<태그>
이미지 다운 및 컨테이너 생성
docker run -d -p 8080:80 nginx
(nginx 이미지로 컨테이너 실행, 80번 포트를 8080번 포트로 매핑)docker run <옵션> <이미지이름>
# 필수로 알아야 하는 옵션
-d : [Detach] 백그라운드에서 컨테이너 프로세스 실행 (nohup &)
-i : [Interactive] 표준입력 연결 (입력) (-it 는 세트)
-t : [tty] 가상 터미널 생성 - 상호작용 (출력) (-it 는 세트)
--name : 컨테이너 이름 지정
-p : [Publish] 호스트 포트와 컨테이너 포트 매핑
--restart : 재시작 정책 [always 항상, on-failure 에러 코드 0이 아닌 경우, unless-stopped 수동으로 중지하지 않는 한]
-v : [volume] 호스트 볼륨 마운트
# 알아두면 좋은 옵션
-u : [user] 컨테이너 내부 실행 유저
--rm : 컨테이너 종료 시 자동 삭제, 임시 사용 [restart 와는 동시 사용 불가]
## 참고
# --restart 와 --rm 은 같이 사용할 수 없다.
# -d 와 -it 는 함께 사용할 수 없다. (docker exec -it 활용)
컨테이너 목록 조회
-a
옵션으로 모든 컨테이너 조회docker ps <옵션>
컨테이너 실행 중지
docker stop <컨테이너ID>
컨테이너 삭제
docker rm <컨테이너ID>
docker rm $(docekr ps -aq) # 전체 삭제
컨테이너 로그 확인
docker logs <컨테이너ID>
실행중인 컨테이너에 명령어 실행
docker exec -it <컨테이너ID> bash
(컨테이너 내에서 bash 쉘 실행)docker exec -it <컨테이너ID> <명령어>