docker version
docker compose version
docker container rm -f $(docker container ls -aq) // 실행중인 컨테이너를 포함하여 모든 컨테이너를 제거
docker container ls
docker container top 83
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 image pull diamol/ch03-web-ping
docker container run -d --name web-ping diamol/ch03-web-ping
docker rm -f web-ping
docker container run --env TARGET=google.com diamol/ch03-web-ping
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 스크립트의 인스트럭션이다.
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
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
docker image ls --filter reference=image-of-the-day --filter reference='*/image-of-the-day'
docker image push $dockerId/image-of-the-day:v1
echo "https://hub.docker.com/r/$dockerId/image-of-the-day/tags"
코딩 작업이 끝난 후 프로젝트 루트 디렉토리에서 하단의 명령어 실행
클래스 - 이미지
인스턴스 - 컨테이너
# 이미지 빌드 **(이미지 생성)**
# 버전이 달라질때(빌드시) 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
# 도커 허브에 로그인 유무, 이미지 유무에 상관없이 프론트엔드에서 전해주는 최신 태그(v@) 만 맞게 하단의 명령어만 실행해주면 컨테이너, 이미지가 생성됩니다.
docker run -p 8080:3000 도커허브계정명/이미지명:v4
윈도우에서 도커 설치과정
제어판 - 프로그램 및 기능 - Windows 기능 켜기 / 끄기 - Hiver-V 혹은 가상 머신 플랫폼, Windows 하이퍼바이저 플랫폼 체크 - 확인 후 재부팅
웹에서 docker desktop 검색후 windows 용 설치
install 하면 다음 과 같은 오류창이 뜬다.
Windows PowerShell 검색후 wsl —update 명령어 입력
컨테이너 실행
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글자를 붙인다. 해당 이미지를 삭제하는 명령어