도커 - 이미지 - 이미지 인스턴스 - 컨테이너
이미지 생성하고 가져오는 법
- 이미 만들어진 이미지 카피하기 : 대표적으로 docker hub
-- docker run으로 컨테이너를 수행하려고 하면 dockerfile(이미지)를 찾다가 없으면 docker hub로 가서 찾음
-- unable to find image 오류가 나도 docker hub에 있으면 괜찮음
- docker ps -a :: docker가 생성된 모든 컨테이너, 모든 프로세스가 표시됨
- docker run -it node :: 컨테이너를 수행하면서 해당 컨테이너의 쉘로 들어가 인터랙티브가 가능하게(커맨드 입력하거나 출력을 볼 수 있게) 해줌
dockerfile 작성
- FROM baseimage_name :: FROM node :: node를 기본 이미지로 해서 그 위에 추가적으로 내가 만드는 이미지의 정보 얹기
- COPY source_path container_save_path :: 새로운 이미지에 저장해야할 파일(source path)을 지정하고 컨테이너 내 어디에 위치할지(container save path) 지정한다 :: COPY . /app :: 현재 dockerfile을 Root 디렉토리로 하여 그 밑으로 있는 파일들을 컨테이너의 /app디렉토리에 위치시킨다. 만약 container save path가 없다면 새로 디렉토리를 만든다.
- WORKDIR working_path :: 도커의 모든 명령이 시작되는 base working direcotry지정 :: WORKDIR /app :: /app디렉토리를 지정
WORKDIR /app
COPY . ./
로 지정하게 된다면 현재 base work directory가 /app이므로 ./ 의 상대경로는 /app디렉토리를 가리킨다.
- RUN command :: 도커 이미지가 만들어질 때 수행시킬 명령어를 입력 :: RUN npm install :: 이미지가 만들어지면 npm install을 수행
EXPOSE port_number :: 도커가 뜨는 컨테이너의 특정 포트를 외부로 노출시킬때 문서화하기위한 명세(안해도 지장없다. 정확하게 포트 매칭은 -p 옵션으로 해야한다.) :: EXPOSE 80 :: 도커 컨테이너의 80번 포트를 외부로 노출하여 접근함을 명세한다. 항상 모든걸 입력한 후 마지막 이전에 해야함. 특히 CMD이전에.
- CMD ["command" ...] :: 도커 컨테이너가 올라간 이후 수행시킬 명령어 입력 :: CMD ["node", "server.js"] :: 컨테이너가 올라가면 node server.js 명령어 수행
이제 dockerfile 빌드하고 이미지까지는 만들었다.
docker build .
docker images 명령어로 확인 여기서 id 확인 후 docker run id 로 하면 되는데 80번 포트가 접근이 안된다. 왜냐하면 거기서는 80을 오픈했지만 실제 외부에서는 80으로 매칭이 안되기 때문이다. 그래서 이런 명령어도 사용이 가능하다.
docker run -p 3000:80 id --> -p옵션으로 내 3000번 포트를 해당 이미지의80번포트와 매칭시켜서 컨테이너를 띄운다.
docker ps옵션을 통해 현재 띄워져있는 컨테이너 이름 획득 가능, -a(all)옵션으로 죽든 살아있든 모두 획득 가능
멈추는건 docker stop 컨테이너 이름
docker run imageid를 입력할 때 반드시 전체를 입력할 필요는 없다.
이미지가 a, ab, abc, abcde 가 있을때
docker run abcd만 해도 abcde로 컨테이너를 띄운다.
대신 docker run ab를 하면 ab, abc, abcde를 띄운다. 즉 그 이름으로 시작하는 id를 가진 이미지는 다 띄운다.
'docker' 카테고리의 다른 글
Docker MairaDB 사용 시 초기화 (0) | 2023.03.11 |
---|