Docker docker-compose 사전 요약

Docker docker-compose 사전 요약


22.04.07 업데이트

Concept


[ Build Once, Run Anyware ]

Role


Docker 컨테이너 내에서 개발하여 OS가 다르더라도 동작 환경을 통일시켜 응용 프로그램이 문제없이 동작할 수 있도록 한다

BestPractice

  • 1 용기 1 처리
  • 가벼운 Docker image
  • 로 설정
  • 실행 사용자가 루트로 설정된 경우
  • Immutable Infrastructure용 이미지
  • Install

  • 홈페이지 설치
  • 에서
    https://www.docker.com/products/docker-desktop
    ※ PC OS의 내용을 설치
    docker-desktop

    Docker command


    Basic commands

  • docker ps -a
  • docker images
  • docker volume ls
  • docker exec -it <ContainerName> bash
  • docker rm <ContainerName>
  • docker rmi <ImageName>
  • docker volume rm <VolumeName>
  • docker container prune
  • dokcer image prune
  • docker volume prune
  • Docker Hub의 docker image pull


    docker pull <imageName>:<tag>
    (ex.)
    docker pull node:14.15.4-slim
    

    local의 모든 docker 이미지에서 docker container 만들기


    존재하지 않으면 Docker Hub에서 pull
    docker run node:14.15.4-slim
    

    local이 가지고 있는 docker 이미지 확인 방법


    docker images
    

    local이 가지고 있는 docker container 확인 방법


    docker ps
    docker ps -a
    
    옵션 (a) 을 추가하면 모두 표시할 수 있습니다.

    상태 docker container running


    docker restart <ContainerID>
    

    런닝 상태가 된 docker container


    docker exec -it <ContainerID> bash
    

    편집된 docker container에서 local에 새 그림 만들기


    docker commit <ContainerID> <NewImageName>:<tag>
    
    꼬리표가 붙다.Default는 latest입니다.

    docker image 복사 시 tag 지정


    docker tag <imageName>:<tag> <NewImageName>:<tag>
    

    docker image push를 docker hub에


    docker push <userName>/<ImageName>:<tag>
    

    docker hub pull original image


    docker pull <username>/<imageName>:<tag>
    

    docker container 삭제


    docker rm <containerName>
    
    아이디도 괜찮아요.

    docker 이미지 삭제


    docker rmi <imageName>
    
    아이디도 괜찮아요.

    local volume에 대한 확인 방법


    docker volume ls
    
    가끔 확인해 보니 쓰레기가 엉망진창으로 쌓여 있다
  • rm에서 삭제 가능
  • docker volume rm <target>
    

    local에 구축된 docker 네트워크 확인 방법


    docker network ls
    
  • rm에서 삭제 가능
  • docker network rm <target>
    

    docker 시스템 prune(한 번에 삭제)

  • all stopped containers
  • all networks not used by at least one container
  • all dangling images
  • all dangling build cache(이건 대단해)
  • docker system prune
    

    탭 가져오기


    docker search <imageName>
    

    docker container에서 종료하는 단축키 명령


    exit -> ctrl + d
    detach -> ctrl + p + q
    
    detach를 통해 뽑으면 컨테이너의 프로그램이 끊기지 않습니다. (작동 유지)
  • detach 후 다시 container
  • 에 입장
    docker attach <ContainerName>
    

    Dockerfile


    Sample


    FROM node:16.13.0-slim
    
    RUN apt-get update && apt-get install -y \
        sudo curl vim wget procps \
        && apt clean \
        && rm -rf /var/lib/apt/lists/*
    
    ENV NEXT_TELEMETRY_DISABLED=1
    ENV USER_NAME=node
    ENV USER_UID=1000
    ARG wkdir=/home/${USER_NAME}/app
    
    WORKDIR ${wkdir}
    
    COPY ./app/package*.json /home/${USER_NAME}/app/
    COPY ./app/yarn.lock /home/${USER_NAME}/app/
    
    COPY ./app/ /home/${USER_NAME}/app/
    
    RUN yarn install
    
    RUN yarn build
    
    RUN echo "root:root" | chpasswd \
        && usermod -aG sudo ${USER_NAME} \
        && echo "${USER_NAME}:${USER_NAME}" | chpasswd \
        && echo "%${USER_NAME}    ALL=(ALL)    NOPASSWD:    ALL" >> /etc/sudoers.d/${USER_NAME} \
        && chmod 0440 /etc/sudoers.d/${USER_NAME} \
        && chown -hR ${USER_NAME}:${USER_NAME} ${wkdir}
    
    USER ${USER_NAME}
    
    
    # CMD [ "yarn", "start" ]
    
  • Docker file에서 docker image,contaainer
  • 를 제작, 조작
    docker build -t <image name>:<tag name> (path)
    
    ex.)
    docker build -t practice:latest .
    

    docker-compose


    Basic commands

  • docker-compose up
  • docker-compose up -d
  • docker-compose up -d --build
  • docker-compose exec <ServiceName> bash
  • docker-compose stop
  • docker-compose restart
  • docker-compose down
  • Sample


    version: '3.3'
    services:
      frontend:
        image: ${IMAGE_BASENAME}/ui:${TAG}
        container_name: ${CONTAINER_BASENAME}-ui
        build:
          context: .
          dockerfile: Dockerfile
        volumes:
          - ./app:/home/node/app
          - frontend-volume:/home/node/app/node_modules
        ports:
          - ${FRONTEND_PORT}:3000
        tty: true
        restart: always
    volumes:
      frontend-volume:
        name: ${CONTAINER_BASENAME}-volume
        driver: local
    

    함께 삭제


    docker-compose down --rmi all --volumes --remove-orphans
    

    Practices


    Hello World image의 pull과 run


    docker pull hello-world
    docker run hello-world
    
    처리 결과
    docker ( 🍇 ) :$ docker run -it hello-world
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (arm64v8)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

    이미지 사용


    docker run -it ubuntu bash
    
  • container에 명명
  • docker run -it --name tests ubuntu  bash
    
  • container가running->exited가 되면 삭제
  • docker run --rm -it --name tests ubuntu  bash
    
  • container를detachedrun
  • 으로
    docker run -d -it --name tests ubuntu  bash
    

    Docker Hub Push, Pull

  • run
  • docker run -it --name sample ubuntu bash
    
  • test 파일 만들기
  • pwd
    touch test
    
  • container에서 이미지 만들기
  • docker commit <ContainerID> ubuntu:v1
    
  • 이미지에서 이름 변경 복사
  • docker tag ubuntu:v1 <NewImageName>:<tag>
    
    (ex.)
    docker tag ubuntu:v1 yt0323/my-practice:v2
    
    Docker Hub Repository와 함께 Name
  • 이미지 Push
  • 를 Docker Hub에 연결
    docker push yt0323/my-practice:v2
    
  • Docker Hub에서pull 이미지
  • docker pull yt0323/my-practice:v2
    docker run yt0323/my-practice:v2
    

    좋은 웹페이지 즐겨찾기