ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker - 기본 명령어 모음
    카테고리 없음 2024. 1. 24. 23:24

     

    - 도커 client, server 버전 및 상태 확인 

    docker version 
    docker info
    
    docker (대분류) command // 대분류 container, image 소분류 run 등 
                            // 대분류는 생략 가능한 경우가 있다.

     

     

    2. docker 컨테이너 관련 명령어 

    출처: 쉬운도커(데브위키) - 인프런

     

    2.1 컨테이너 실행 및 삭제

    // 컨테이너 실행 실행 옵션은 -d (daemon) -p (포트설정) 등등이 있다.
    docker run (실행옵션) --name 컨테이너명 이미지명
    // 실행 중인 컨테이너를 삭제
    docker rm 컨테이너명/ID
    
    docker run  -d -p 80:80 --name mynginx nginx
    docker rm mynginx
    docker rm -f mynginx
    
    ----------------------------------------------------------------------------
    
    //컨테이너 실행시 메타데이터의 env 값 덮어쓰기 
    docker run --env KEY=VALUE 이미지명
    //컨테이너 실행시 메타데이터 cmd 덮어쓰기 
    docker run 이미지명 (실행명령)
    
    docker run -d -p 8080:3000 --name envApp --env COLOR=blue image
    docker run --name customCmd nginx cat usr/share/nginx/html/index.html
    
    -----------------------------------------------------------------------------
    
    docker pause 컨테이너명
    docker unpause 컨테이너명
    docker stop 컨테이너명
    docker start 컨테이너명
    docker restart 컨테이너명 
    
    -----------------------------------------------------------------------------

     

    - 실행중인 컨테이너는 삭제할 수 없다. (끄고 삭제해야한다) 

    - 이때 -f 옵션을 통해 강제로 삭제할 수 있다

     

     

    2.2 컨테이너 조회 관련 

    //컨테이너 세부 정보 조회
    docker container inspect 컨테이너명
    
    // 실행중인 컨테이너 리스트 조회
    docker ps
    
    // 컨테이너 로그 조회
    docker logs (컨테이너명)
    
    //실행하면서 로그 같이보기
    docker start -i (컨테이너명)

     

    -> 로그 지속확인 상태에서 컨트롤+c누르면 로그 보는 것만 꺼지고 컨테이너 정상 작동한다! 

     

    2.3 컨테이너에 터미널 접속 

    // -it는 디버그 모드로 컨테이너 실행, bin/bash는 cmd
    docker run -it name 컨테이너명 이미지명 bin/bash
    
    // 실행중인 컨테이너 터미널 접속
    docker exec -it 컨테이너명 bin/bash

     

     

    2.4 컨테이너와 host사이  파일 복사 

     

    docker cp 파일경로 컨테이너명:복사할 경로 
    docker cp 컨테이너명:파일경로 호스트에 복사할 경로
    
    docker cp ./init/init.sql postgres:docker-entrypoint-initdb.d/

     

     

     

     

    3. docker 이미지 관련 명령어

     

    3.1 이미지 조회 

    //로컬 이미지 조회 
    docker image ls (이미지)
    
    
    docker image ls
    docker image ls nginx

    .

    3.2 이미지 세부 정보 조회 

    docker image inspect 이미지명

     

    3.3 이미지 다운로드 (외부 저장소)

    docker pull jaja/envapp //이미지명 보통 레지스트리에 이미지명은 아이디/이미지:버전 이런식으로 저장됨

     

    3.4 로컬 스토리지의 이미지 삭제

    docker image rm 이미지명

     

    3.5 이미지 레이어 이력 조회

    docker image history 이미지명
    
    docker image history jaja/hi-nginx

     

    3.6 가동 중인 컨테이너에서 이미지 만들기 

    docker commit -m 커밋명 실행중인컨테이너명 생성할이미지명
    
    //ex
    docker commit -m "edited index" -c 'CMD ["nginx","-g","daemon off"]' mynginx (개인레지스트리)/commitnginx
    
    //이미지 레지스트리에 저장
    docker push (개인레지스트리명)/commitnginx

     

    3.7 도커 파일로 이미지 빌드 

     

    - 보통 도커 파일로 이미지를 만들 때는, Dockerfile이 있는 곳에서 빌드 시도  

    //도커 파일을 통해 이미지 빌드
    docker build -t 이미지명 Dockerfile경로
    
    //도커파일명이 Dockerfile이 아닌 경우 
    docker build -f 도커파일명 -t 이미지명 Dockerfile경로

     

    - 도커파일 명령어 

    FROM 베이스 이미지 //보통 파일 시스템이 있는 이미지가 베이스다
    
    COPY 파일경로 복사할경로 //파일을 레이어에 복사 
    
    CMD ["명령어"] //이미지 메타데이터로 컨테이너 실행 시 명령어 지정
    
    RUN 이미지를 빌드하는 과정에서 사용할 CMD명령어 (새로운 레이어에 추가됨)
    
    WORKDIR 작업 디렉토리 지정 -> 다음 명령어들이 실행될 디렉토리 지정 
            WORKDIR다음에 나오는 지시어들은 WORKDIR을 기준으로 명령어 실행 
            cmd의 cd명령어와 같다. (새로운 레이어에 추가)
            
    USER 명령어를 실행할 사용자 (su)(새로운 레이어에 추가)
    
    EXPOSE 포트번호지시(컨테이너가 사용할 포트번호)
    
    ARG 변수명 변수값 : 이미지 빌드 시점의 환경 변수 설정 (빌드과정에서 덮어쓰기 가능)
                       docker build --build-arg 변수명=변수값
                       
    ENV 변수명 변수값 : 이미지 빌드 및 컨테이너 실행 시점의 환경 변수 설정 (레이어 등록)
    
    ENTRYPOINT ["명령어"] : 고정된 명령어 -> CMD의 prefix느낌

     

    - 예시 1 (단일 빌드)

    FROM node:14
    WORKDIR /app
    COPY . . //빌드 컨텍스트에 전체 파일 /app에 저장
    RUN npm install
    ARG COLOR=red
    ENV COLOR=blue
    USER node
    EXPOSE 3000
    ENTRYPOINT ["npm"] //컨테이너 실행시 고정 실행
    CMD ["start"] // 파라미터 받아서 변경 가능

     

     

    - 예시 2 (멀티 빌드) 

    FROM mven:3.6 AS build ---빌드를 위해 사용하는 이미지 
    WORKDIR /app
    
    COPY pom.xml .
    COPY src ./src
    
    RUN mvn clean package
    
    FROM openjdk:11-jre-slim --from이 두개면 도커가 임시 컨테이너 두개 생성해서 함 
    
    WORKDIR /app
    
    COPY --from=build /app/target/*.jar ./app.jar --빌드 과정에서 생성된 파일 복사
    EXPOSE 8080
    CMD ["java","-jar","app.jar"]

    4. 레지스트리 관련 명령어 

    // 로컬 스토리지로 이미지 다운로드 
    docker pull 이미지명
    
    //로컬 스토리지의 이미지명 추가 
    docker tag 기존이미지명 추가할 이미지명
    
    //이미지를 레지스트리에 업로드
    docker push 이미지명
    
    
    //이미지 레지스트리 인정 정보 생성 
    docker login
    
    //이미지 레지스트리 인정 정보 삭제 
    docker logout

     

    - 이미지명 변경은 기존 것 그대로 둔 상태에서 이름만 바꾼 새로운 이미지 만들어요

      이렇게 하는 이유는 프로젝트(계정명)때문인 이유가 있다. 

      도커에서 push하면, 프로젝트(계정명)에 따라 어디에 저장될 지 구분한다. 

      따라서 프로젝트명이 변경되면, 이에 따라 저장할 장소 바꿔줘야하기 때문에 이러한 기능을 제공하는 듯  

    출처: 쉬운도커(데브위키) - 인프런

     

    5. 네트워크 관련 명령어 

     

    //리스트 조회
    docker network ls
    // 정보 조회
    docker network inspect 네트워크명
    // 네트워크 생성
    docker network create 네트워크명
    // 네트워크 삭제
    docker network rm 네트워크명
    
    docker network create --driver birdge --subnet 10.0.0.0/24 --gatway 10.0.0.1 second-bridge
    
    docker network create --driver bridge --subnet 10.0.0.0/24 second-bridge
    
    
    //컨테이너 시작시 터미널 접속 후 DNS서버 주소 확인
    docker run -it --network second-bridge --name containerA jaaj/bintu bin/bash
    cat /etc/resolv.conf 
    
    //동일 네트워크 내에 컨테이너와 연결 확인
    ping containerB

     

    5.1 3tier 네트워크 예제 (프론트,백,DB 네트워크)

    docker network create jawon-network
    
    // DB이미지 띄우기
    docker run -d -name leaf-postgres --network jawon-network jaja/lef-postgres:1.0.0
    
    // 백엔드 서버 띄우기 8080포트 포트 포워딩 -> DB URL에 ip주소를 컨테이너 명으로 줌(내부 DNS사용) 
    docker run -d -p 8080:8080 -e DB_URL=leaf=postgres --network jawon-network --name leaf jaja/lef-backend:1.0.0
    
    // 프론트 서버 
    docker run -d -p 80:80 --network leafy-network --name leafy-front jaja/leaf-frontend:1.0.0

    출처: 쉬운도커(데브위키) -인프런

    6. 도커 볼륨

     

    - 볼륨 관련 명령어 

    - 볼륨 관련 명령어 사용시 window의 경우 경로 시작을 /이 아닌 //로 해야하는 경우 종종 있다! 주의

     *필요시 검색해 볼 것 

     

    // 볼륨 리스트 조회
    docker volume ls 
    // 볼륨 상세 정보 조회
    docker volume inspect 볼륨명
    // 볼륨 생성
    docker volume create 볼륨명
    // 볼륨 삭제 
    docker voulume rm 볼륨명
    
    
    docker vloume create mydata 
    
    docker voulume ls
    
    docker voulume inspect mydata
    
    docker run -d --name my-postgres -e POSTGRES_PASSWORD=password -v mydata:/var/lib/postgreslq/data postgres:13
    
    docker run -d --name my-postgres-2 -v mydata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=password postgres:13
    
    //바인드 마운트
    docker run -d -p 8080:80 --name my-nginx-a -v /Users/user/easydocker/index:/usr/share/nginx/html nginx
    docker run -d -p 8001:80 --name my-nginx-b -v /Users/user/easydocker/index:/usr/share/nginx/html nginx

     

     

    참고자료: 

    https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%89%AC%EC%9A%B4-%EB%8F%84%EC%BB%A4/dashboard

     

    [2024 NEW] 개발자를 위한 쉬운 도커 강의 - 인프런

    현업 개발자가 도커를 사용한 경험을 녹여낸 새로운 커리큘럼으로 기존 교재 및 강의와 차별된 강의를 제공합니다. 단순한 명령어 사용법이 아닌 도커를 왜 사용해야하는지 대한 근본적인 질문

    www.inflearn.com

     

Designed by Tistory.