Docker를 찍먹 해보자 - Docker[1]

Docker를 찍먹 해보자 - Docker[1]

생성일
Aug 27, 2024 05:29 AM
Description
Docker에 관련된 내용들을 알아보자
Tag
Docker

1. 도커 설치하기

도커 설치하고 실행 환경 만들기까지는 공식 독스를 보고 혼자 해보자
 

2. Docker 관련 명령어 실행해보기

docker run

<인자> (필수 아님)
☝🏻
docker run (<옵션>) <이미지 식별자> (<명령어>) (<인자>)
  • -d 옵션
    • mac에서 background에서 실행하기 위해 command에 &를 붙이는 것과 같이, detached 모드에서 실행하기 위한 옵션이라고 생각하면 된다.
  • -it 옵션
    • -i, -t 옵션을 두개 사용한 것이다.
    • 이 두 옵션은 컨테이너를 종료하지 않은 채, 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용한다. 따라서, -it 옵션은 특히 컨테이너의 쉘(shell)이나 CLI 도구를 사용할 때 매우 유용하게 사용된다.
  • —name 옵션
    • 도커 컨테이너는 각자 컨테이너 ID가 존재한다. 하지만 이로 식별하기에는 불편하기에 --name 옵션을 사용해서 컨테이너에 이름을 부여해주면 해당 이름으로 컨테이너를 식별할 수 있다.
  • -e 옵션
    • Docker 컨테이너의 환경변수를 설정하기 위함
    • Dockerfile의 ENV 설정도 덮어써지게 됩니다.
  • -p 옵션
    • 호스트와 컨테이너 간의 포트(port) 배포(publish)/바인드(bind)를 위해서 사용
    • 호스트(host) 컴퓨터에서 컨테이너에서 리스닝하고 있는 포트로 접속할 수 있도록 설정해줍니다.
  • -v 옵션
    • 호스트와 컨테이너 간의 볼륨(volumn) 설정을 위해서 사용
    • 호스트(host) 컴퓨터의 파일 시스템의 특정 경로를 컨테이너의 파일 시스템의 특정 경로로 마운트(mount)
☝🏻
볼륨이란?
  • 원래는 컨테이너를 삭제하게 되면, 작업했던 데이터가 모두 삭제된다.
  • 하지만 컨테이너는 삭제되어도 데이터를 유지하기 위해서 사용하는 것.
  • 컨테이너 내부의 데이터를 외부로 링크를 걸어주는 기능
  • -w 옵션
    • Dockerfile의 WORKDIR 설정을 덮어쓰기 위해서 사용
  • —entrypoint 옵션
    • Dockerfile의 ENTRYPOINT 설정을 덮어쓰기 위해서 사용
  • —rm 옵션
    • 컨테이너를 일회성으로 실행할 때 주로 쓰임
 

실행해보자!

nginx를 로컬 3000 포트에서 실행하기
1.docker pull nginx
  • nginx 이미지를 가져오자!
notion image
2.docker run -d -p 3000:80 --name my-nginx nginx
  • -d: 백그라운드에서 실행하자
  • -p 3000:80: 나의 컴퓨터 3000포트를 컨테이너의 80포트에 매핑하자
  • —name my-nginx: 컨테이너 이름은 my-nginx
  • nginx: 이미지 nginx
notion image
3.docker exec -it my-nginx
  • exec 옵션을 통해서 실행중인 상태의 컨테이너에 접속할 수 있다.
notion image
4.docker ps -a
  • 기본 ps command와 같이 가동 중인 도커 컨테이너 리스트를 반환해준다.
notion image
 

3. Dockerfile로 이미지 빌드해보기

Docker의 이미지를 생성하는 명령어는 무엇이 있을까?
  1. docker commit
    1. docker container를 image로 생성한다.
    2. commit 명령어를 실행하는 시점의 docker container 상태가 보존된다.
    3. 현재 docker container의 상태를 백업하는 경우에 자주 사용된다.
  1. docker build
    1. Dockerfile 이라는 단순 텍스트 파일을 사용하여 image를 생성한다.
    2. Dockerfile은 지정된 문법을 지켜야한다.
    3. Dockerfile을 작성하고 공유하면 image의 구성을 쉽게 알 수 있다.
 

docker build

docker build 명령어는 docker image를 빌드할 때 아래의 두 가지를 사용한다.
  • Dockerfile
    • 텍스트 파일이고, build시 사용될 명령어들을 모아놓은 것이다.
  • build context
    • PATH(현재 로컬의 파일 시스템의 디렉토리), URL(Git repository)을 통해 지정된 다수의 파일을 갖는 경로(위치) 이다.
    • 아래의 예시에선 현재 디렉토리가 build context
docker build .
 
docker build의 실제 처리는 Docker daemon이 하게 되고, docker build 요청이 시작되면 제일 먼저 Docker daemon에게 build context의 하위 모든 파일에 대한 정보를 전송한다.
 
뭐 내용이 많지만 일단 찍먹해보는 단계에서는 아래의 두 가지 내용만 기억하자.
☝🏻
Dockerfile 는 docker build 시 사용될 명령어들이 기재된 텍스트 파일이다.
docker build 명령어는 build context 경로를 사용하고, 재귀적으로 하위 모든 파일 콘텐츠를 사용한다.
 

Dockerfile 작성 방법

# 주석 INSTRUCTION arguments
INSTRUCTION(명령어)는 대문자, 소문자 상관없이 사용이 가능하나, 대문자로 쓰는 것이 관례이다.
 

Dockerfile 명령어

INSTRUCTION
기능
FROM
Base image 지정
RUN
- image 생성 지점에 사용할 명령어 지정 - docker run 명령어 사용 시 —entrypoint 옵션으로 덮어쓰기 가능
CMD
- container 실행 시 실행되는 명령어를 지정 - docker run 명령어 마지막에 명령어를 작성하면 덮어쓸 수 있음
LABEL
생성할 image의 메타정보를 등록한다
EXPOSE
- 컨테이너 실행 시 열어둘 포트와 통신 네트워크 프로토콜을 지정한다 기본은 TCP. - 필수로 할 필요는 없지만 다른 사람에게 port에 대한 힌트를 줄 수 있다.
ENV
- 컨테이너 실행 시 사용할 환경변수를 지정 - 이미지 생성되면 내부에 설정한 환경변수는 저장됨
ARG
- 이미지 생성 시에만 사용하는 변수 - 컨테이너 실행 후에는 사용 불가
ENTRYPOINT
- CMD와 비슷하지만 docker run을 통해 덮어쓸 수 없다. - 즉 무조건 실행한다.
WORKDIR
컨테이너 시작 시 사용될 working directory 경로
 

References