도커교과서를 읽고서 (1)

Yunes·2023년 4월 14일

북스터디

목록 보기
1/8

용어정리

  • 빌드 : 애플리케이션을 컨테이너에서 실행할 수 있도록 패키징하는 것
  • 공유 : 다른 사람이 패키지를 사용할 수 있도록 공유
  • 실행 : 패키지를 내려받아 컨테이너를 통해 애플리케이션을 실행하는 것
    도커에서 패키지를 이미지라고 부르며 패키지를 통해 컨테이너를 만들 수 있다.

자주 사용하는 명령어

버전 확인

docker version
docker compose version

환경 초기화

docker container rm -f $(docker container ls -aq) // 실행중인 컨테이너를 포함하여 모든 컨테이너를 제거

현재 실행중인 모든 컨테이너에 대한 정보 확인

docker container ls

대상 컨테이너에서 실행중인 프로세스의 목록 확인 top

docker container top 83

대상 컨테이너에서 수집된 모든 로그를 출력 logs

docker container logs 83

컨테이너를 백그라운드에서 계속 동작

docker container run --detach --publish 8088:80 diamol/ch02-hello-diamol-web

컨테이너 삭제

docker container rm --force $(docker container ls --all --quiet)

docker 허브의 특정 이미지 pull

docker image pull diamol/ch03-web-ping

내려받은 이미지로 컨테이너를 실행

docker container run -d --name web-ping diamol/ch03-web-ping

실행중인 컨테이너를 삭제하고 환경변수 TARGET의 값을 다른 값으로 지정한 새로운 컨테이너 실행

docker rm -f web-ping
docker container run --env TARGET=google.com diamol/ch03-web-ping

Dockerfile

FROM diamol/node

ENV TARGET="blog.sixeyed.com"
ENV METHOD="HEAD"
ENV INTERVAL="3000"

WORKDIR /web-ping
COPY app.js .

CMD ["node", "/web-ping/app.js"]

컨테이너 이미지 빌드하기

docker image build --tag web-ping .
docker image build --tag web-ping:v2 .

태그 뒤 web-ping:v2 이렇게 달면 실제로 Tag 명이 입력한 값으로 들어간다.

특정 태그명을 가진 이미지 목록 확인

docker image ls 'w*'

특정 이미지의 히스토리 확인하기

docker image histroy web-ping

CREATED BY 항목은 해당 레이어를 구성한 Dockerfile 스크립트의 인스트럭션이다.

컨테이너의 변화에서 이미지를 생성 : commit

docker contaienr commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker container commit ch03lab ch03-lab-soln
docker container run -it --name ch03lab diamol/ch03-lab

echo Elton >> ch03.txt

exit

docker container commit ch03lab ch03-lab-soln

docker container run ch03-lab-soln cat ch03.txt

이 CLI를 Dockerfile로 실행하려면, 이미지를 빌드하고 컨테이너를 실행하고 명령어를 실행하기 위한 필요한 명령어가 포함된 Dockerfile을 작성해야 합니다. 다음은 예시입니다:

FROM diamol/ch03-lab
RUN echo Elton >> ch03.txt
CMD ["cat", "ch03.txt"]

echo는 인수를 표준 출력으로 출력하는 명령입니다. 이 경우, "Elton" 텍스트가 "ch03.txt" 파일에 추가됩니다.

cat 명령어는 파일의 내용을 출력하는 명령어입니다. 이 경우 ch03.txt 파일의 내용을 출력합니다.

자바 소스코드로 빌드

FROM diamol/maven AS builder

WORKDIR /usr/src/iotd
COPY pom.xml .
RUN mvn -B dependency:go-offline

# 도커 빌드가 실행중인 디렉터리에 포함된 모든 파일과 서브 디렉터리를 현재 이미지 내 작업 디렉터리로 복사하라는 의미
COPY . .
# 애플리케이션을 빌드하고 패키징
RUN mvn package

# app
FROM diamol/openjdk

WORKDIR /app
COPY --from=builder /usr/src/iotd/target/iotd-service-0.1.0.jar .

EXPOSE 80
ENTRYPOINT ["java", "-jar", "/app/iotd-service-0.1.0.jar"]

docker image build -t image-of-the-day .

컨테이너 간 통신에 사용되는 도커 네트워크 생성

docker network craete nat

80번 포트를 호스트 컴퓨터를 통해 공개하고 nat 네트워크에 컨테이너를 접속하기

docker container run --name iotd -d -p 800:80 --network nat image-of-the-day

도커 허브에 직접 빌드한 이미지 푸시하기, 도커 허브에 로그인

$dockerId="도커허브계정이름" (윈도)
export dockerId="도커허브계정이름" (리눅스, macOS)

echo $dockerId (환경변수 제대로 정의되었는지 확인)

docker login --username $dockerId

기존 이미지에 새로운 이미지 참조를 부여

docker image tag image-of-the-day $dockerId/image-of-the-day:v1

—filter 로 특정 이미지만 조회

docker image ls --filter reference=image-of-the-day --filter reference='*/image-of-the-day'

이미지를 레지스트리에 푸시

docker image push $dockerId/image-of-the-day:v1

도커 허브에 새로 푸시된 이미지에 대한 도커 허브 웹 페이지 URL 출력

echo "https://hub.docker.com/r/$dockerId/image-of-the-day/tags"

FE 빌드 방법

코딩 작업이 끝난 후 프로젝트 루트 디렉토리에서 하단의 명령어 실행

클래스 - 이미지

인스턴스 - 컨테이너

# 이미지 빌드 **(이미지 생성)**
# 버전이 달라질때(빌드시) v뒤의 숫자를 1씩 증가시켜주면 됩니다.
docker build -t 도커허브계정명/이미지명:v4 .

# 도커 허브 로그인
docker login --username 도커허브계정명

# 도커 이미지 허브에 push
# 이 단계까지 해주시면BE 에서 이 이미지를 사용할 수 있습니다.
docker image push 도커허브계정명/이미지명:v4 .

# 위에서 빌드한 이미지를 실행하여 컨테이너 생성 및 실행
# 컨테이너 생성 (컨테이너의 3000포트와 호스트 컴퓨터의 8000포트를 연결)
# 마지막 v뒤 숫자를 빌드할때 생성한 것과 일치되도록 실행해주세요.
# 이미지 이름 앞에 도커허브계정명을 입력해야 push를 할 수 있습니다.
# FE는 첫 단계 이미지 빌드에서 이미 이미지가 생성되어서 상단의 도커 허브에 push 하는 단계를 거치지 않아도 하단의 명령어를 통해 공유될 결과물을 확인할 수 있습니다.
docker run -p 8080:3000 도커허브계정명/이미지명:v4
# 혹시 생성한 이미지가 생각나지 않는다면 (mac 명령어라 ls 가 아니면 docker image --help 에서 이미지 리스트 명령어인거로 치시면 됩니다.)
docker image ls

정리

  • FE 는 1) 이미지 빌드 (이미지 생성) 2) 이미지 공유 (이미지 push) 를 해줘야 BE 에서 확인할 수 있다.
  • 이미지 공유를 하기 위해선 두가지 조건을 충족해야 한다.
    1. 터미널에서 (cmd) 도커 허브 로그인
    2. 이미지 이름앞에 도커허브계정명/이미지명 이런 형식으로 생성해야 한다.

BE 활용 방법

# 도커 허브에 로그인 유무, 이미지 유무에 상관없이 프론트엔드에서 전해주는 최신 태그(v@) 만 맞게 하단의 명령어만 실행해주면 컨테이너, 이미지가 생성됩니다.
docker run -p 8080:3000 도커허브계정명/이미지명:v4

정리

  • BE 는 도커 허브에 올라온 이미지명만 맞게 docker run -p 8080:3000 도커허브계정명/이미지명:v@ 명령어를 입력해주면 된다.

Install Docker form Windows

  • 윈도우에서 도커 설치과정

    1. 제어판 - 프로그램 및 기능 - Windows 기능 켜기 / 끄기 - Hiver-V 혹은 가상 머신 플랫폼, Windows 하이퍼바이저 플랫폼 체크 - 확인 후 재부팅

    2. 웹에서 docker desktop 검색후 windows 용 설치

    3. install 하면 다음 과 같은 오류창이 뜬다.

    4. Windows PowerShell 검색후 wsl —update 명령어 입력

    5. 컨테이너 실행

      docker run -p 8080:3000 도커허브계정명/이미지명:v4

      💡 주의사항

    • 컨테이너와 이미지는 리소스의 어느정도를 소모한다. 사용하지 않을때 종료시키거나 안쓰는 경우 삭제해주면 된다.

    • 현재 실행중인, 설치된 컨테이너와 이미지는 Docker desktop 에서 확인 가능하다.

      docker container ls // 컨테이너 목록 조회
      docker image ls // 이미지 목록 조회
      
      docker container rm -f $(docker container ls -aq) // 실행중인 컨테이너를 포함하여 모든 컨테이너 제거
      docker image rm -f 00 // 00 은 docker image ls 로 조회했을때 나타난 이미지의 ID 앞 2~3글자를 붙인다. 해당 이미지를 삭제하는 명령어
profile
미래의 나를 만들어나가는 한 개발자의 블로그입니다.

0개의 댓글