반응형

목차

  1. 명령어와 옵션, 활용 예시
  2. Dockerfile이란?
  3. Dockerfile 작성 팁
  4. Dockerfile 작성 예시

도커는 이전 Container 시리즈에서 다룬 적이 있으니 Docker에 대해 알고 싶으시다면 다음 페이지에 접속해 보시는 것도 좋을 듯합니다. 컨테이너에 들어가면서 데몬을 다운로드하는 것이 조금 복잡해졌습니다. 때문에 다운로드 페이지도 참고하셔도 좋을 듯합니다.

 

[Container 이론] 3. 컨테이너를 다루는 시스템 Docker

목차 Docker란? Docker 개념 개발자가 Docker를 사용하는 과정 Docker 이미지 레이어 컨테이너의 한계 마치며 Docker란? Docker는 2013년에 처음 등장한 컨테이너 기반 가상화 도구입니다. 이를 통해 컨테이

easyitwanner.tistory.com

 

 

[Docker] Linux에 docker 다운로드

목차 Docker 설치 순서 상태 확인 오류 마치며 Docker 설치 이번 컨테이너 강의에서부터 Ubuntu OS로 변경되어 기준이 Ubuntu로 진행될 것이다. RadHat기반은 apt-get 대신 yum이나 dnf로 바꿔주고 그대로 진행

easyitwanner.tistory.com


명령어와 옵션, 활용 예시

docker 명령어는 Docker 엔진과 상호 작용하는 데 사용되는 명령줄 인터페이스(CLI) 도구입니다. 이를 통해 로컬 시스템 또는 원격 Docker 호스트에서 Docker 컨테이너, 이미지, 네트워크 및 볼륨을 관리할 수 있습니다. docker 명령은 특정 작업을 수행하기 위한 다양한 하위 명령을 제공합니다.

  1. docker build:  Dockerfile 및 주어진 컨텍스트(일반적으로 현재 디렉터리)에서 Docker 이미지를 빌드합니다.

    • -t, --tag: 생성할 이미지의 이름과 태그를 지정합니다.(예: -t my-image:1.0)
    • -f, --file: 사용할 Dockerfile의 경로를 지정합니다.
    • -q, --quiet: 빌드 로그를 출력하지 않고 빌드를 실행합니다.
    • --build-arg: Dockerfile 내에서 사용할 빌드 인자를 설정합니다.
    • --no-cache: 캐시를 사용하지 않고 이미지를 빌드합니다.
    • --pull: 빌드하기 전에 베이스 이미지를 업데이트합니다.

    • 예_
      docker build -t my-image:1.0 .
      docker build -t myimage:latest .

      • 빌드할 때 맨 끝에 한 칸 띄어 쓰고 . 을 꼭 찍어주어야 합니다.

  2. docker run: Docker 이미지에서 새 컨테이너를 생성하고 시작합니다. 포트 매핑 및 볼륨 탑재와 같은 컨테이너 동작을 사용자 지정하기 위해 다양한 플래그를 제공할 수 있습니다.

    • -d: 백그라운드에서 컨테이너 실행(분리 모드)
    • -p <host-port>:<container-port>: 컨테이너 포트를 호스트 포트에 매핑(예: -p 8080:80)
    • -v <host-path>
      <container-path>: 호스트 디렉토리를 컨테이너의 볼륨으로 마운트(예: -v /path/on/host:/path/in/container)
    • --name <container-name>: 컨테이너의 이름을 지정합니다.
    • --env <key=value>: 컨테이너에 환경 변수 설정

    • 예_
      docker run -d -p 8080:80 --name my-container my-image:1.0

  3. docker images: 사용 가능한 이미지 목록을 출력합니다.

    • -a: 중간 레이어를 포함한 모든 이미지 표시
    • --filter <key=value>: 특정 키-값 쌍으로 이미지를 필터링합니다(예: --filter dangling=true).

  4. docker ps: 실행 중인 모든 컨테이너, 해당 상태 및 컨테이너 ID, 이미지 및 포트 매핑과 같은 기본 정보를 나열합니다.

    • -a: 중지된 컨테이너를 포함하여 모든 컨테이너 표시
    • -q: 컨테이너 ID만 표시(다른 명령에서 사용)

  5. docker exec: 실행 중인 컨테이너에서 명령 실행합니다.

    • -d: 컨테이너 내부에서 실행 중인 명령어를 백그라운드로 실행합니다.
    • -i: 컨테이너 내부에서 실행 중인 명령어의 입력을 활성화합니다.
    • -t: 컨테이너 내부에서 실행 중인 명령어의 터미널을 활성화합니다.

    • 예_
      docker exec -it my-container bash
      docker exec mycontainer ls

  6. docker stop: 실행 중인 컨테이너 중지합니다.

    • -t <초>: 컨테이너를 중지하기 전에 시간제한을 지정합니다.

    • 예_
      docker stop my-container

  7. docker rm: 컨테이너 제거

    • -f: 실행 중인 컨테이너 강제 제거
    • -v: 컨테이너의 볼륨도 제거합니다.

    • 예_
      docker rm my-container
      docker rm container1 container2 container3

  8. docker rmi: 이미지 제거

    • -f: 이미지 강제 제거(컨테이너에서 사용하더라도)
    • -a: 사용하지 않는 이미지를 포함하여 모든 이미지 제거
    • --no-prune: 태그 되지 않은 이미지나 dangling 이미지를 삭제하지 않습니다.

    • 예_
      docker rmi myimage:latest           # myimage:latest 이미지 삭제
      docker rmi myimage:latest -f        # 강제로 myimage:latest 이미지 삭제
      docker rmi $(docker images -q)      # 모든 이미지 삭제
      docker rmi $(docker images -aq) -f  # 모든 이미지 강제 삭제

  9. docker login: Docker 레지스트리에 로그인합니다.

    • -u : userID(아이디)
    • -p : password(비밀번호)

  10. docker push: Docker 레지스트리에 이미지 푸시

    • -f, --force: 이미지를 레지스트리에 강제로 푸시합니다.
    • --disable-content-trust: 이미지의 콘텐츠 트러스트를 비활성화합니다.
    • -q, --quiet: 상세 정보 대신 짧은 출력을 보여줍니다.
    • --help: 도움말을 출력합니다.

    • 예_
      docker push myimage:v1.0

  11. docker pull: Docker 레지스트리에서 이미지를 가져옵니다.

    • 예_
      docker pull ubuntu

  12. docker logs: 컨테이너의 로그를 표시합니다.

    • 예_
      docker logs my-container

Dockerfile이란?

먼저 Dockerfile은 Docker 이미지를 만들기 위한 지침서입니다. Docker 이미지는 애플리케이션과 그것이 실행되는 환경을 함께 패키징 한 것입니다. 이 Dockerfile은 이미지를 생성할 때 Docker 엔진에 의해 자동으로 읽히며, 이미지 내에서 애플리케이션을 실행할 때 필요한 모든 것을 설정합니다.

Dockerfile을 작성하면 Docker 엔진이 지정된 명령어를 실행하여 Docker 이미지를 빌드합니다. 이때 Dockerfile에는 애플리케이션을 실행하기 위한 필요한 모든 요구사항이 포함되어야 합니다. 예를 들어, Dockerfile에서는 애플리케이션 코드, 의존성 패키지, 환경 설정 등을 정의할 수 있습니다.

Dockerfile을 사용하면 다양한 환경에서 동일한 애플리케이션을 실행할 수 있으며, 다른 환경에서도 일관된 동작을 보장할 수 있습니다. 또한 Docker 이미지를 빌드하면 이미지를 공유하고 배포할 수 있으며, Docker Hub와 같은 이미지 저장소에 업로드할 수도 있습니다.


Dockerfile 작성 팁
  1. 불필요한 패키지를 설치하지 마세요.
    도커 이미지의 용량은 적을수록 좋습니다. 불필요한 패키지를 설치하지 않는 것은 이미지의 용량을 줄이는데 도움이 됩니다.

  2. 각 명령어마다 캐시를 이용하세요.
    Dockerfile에서 명령어마다 이미지 캐시를 이용하면 이미지를 더 빠르게 빌드할 수 있습니다. 그러나 명령어마다 캐시를 이용하면 이미지 용량이 커지는 문제가 있으므로 주의해야 합니다.

  3. Dockerfile에서는 COPY보다 ADD를 사용하세요.
    ADD 명령어는 COPY 명령어와 같은 역할을 하지만 압축 파일 등의 압축을 푸는 등의 추가 기능을 제공합니다.
    하나의 컨테이너에 하나의 프로세스를 실행하세요.

  4. 각 컨테이너는 하나의 프로세스만 실행하는 것이 좋습니다. 하나의 컨테이너에 여러 개의 프로세스를 실행하는 것은 컨테이너의 운영 및 디버깅을 어렵게 만들 수 있습니다.

  5. 명령어를 정렬해서 사용하세요.
    Dockerfile에서 명령어를 정렬하면 코드의 가독성이 향상되어 유지보수하기 쉬워집니다.

  6. Dockerfile에서는 .dockerignore 파일을 사용하세요.
    .dockerignore 파일을 사용하면 이미지 빌드 시 불필요한 파일이나 디렉토리를 제외할 수 있습니다.

  7. 각 명령어는 새로운 라인에서 시작하세요.
    Dockerfile에서는 한 줄에 여러 개의 명령어를 사용하지 않는 것이 좋습니다. 한 줄에 여러 개의 명령어를 사용하면 이미지 빌드 시 오류가 발생할 가능성이 높아집니다.

  8. 최신 버전의 베이스 이미지를 사용하세요.
    최신 버전의 베이스 이미지를 사용하면 보안 및 기능 개선이 반영될 가능성이 높아집니다.

  9. Dockerfile에서는 환경 변수를 사용하세요.
    환경 변수를 사용하면 이미지를 빌드할 때 환경 변수를 동적으로 바꿀 수 있습니다.

  10. 최소한의 계층을 사용하세요.
    Dockerfile에서는 최소한의 계층을 사용하는 것이 좋습니다. 계층을 줄이면 이미지 용량이 줄어들어 보안 및 배포가 더욱 수월해집니다.

Dockerfile 작성 예시


다음은 간단한 Docker 컨테이너를 빌드, 실행 및 관리하는 프로세스를 보여주는 전체 예제입니다.


1. 다음 내용으로 Dockerfile이라는 파일을 만듭니다.

FROM nginx:latest
COPY index.html /usr/share/nginx/html/


2. 일부 샘플 콘텐츠가 있는 동일한 디렉터리에 index.html 파일을 만듭니다.

html
Copy code
<!DOCTYPE html>
<html>
<head>
    <title>Hello Docker</title>
</head>
<body>
    <h1>Hello from Docker container!</h1>
</body>
</html>


3. Docker 이미지를 빌드합니다.

docker build -t my-nginx:1.0 .


4. 이미지에서 컨테이너를 실행합니다.

docker run -d -p 8080:80 --name my-nginx-container my-nginx:1.0


5. 웹 브라우저를 열고 http://localhost:8080을 방문하여 컨테이너에서 제공하는 콘텐츠를 확인합니다.


6. 컨테이너를 중지하고 제거하려면 다음 명령을 실행합니다.

docker stop my-nginx-container
docker rm my-nginx-container


이 예제는 Dockerfile을 사용하여 간단한 Nginx 웹 서버 컨테이너를 만들고, 여기에서 이미지를 빌드하고, 포트 매핑으로 컨테이너를 실행하고, 사용 후 컨테이너를 정리하는 방법을 보여줍니다.


반응형

'Container > Docker' 카테고리의 다른 글

[Docker] Docker 이미지 빌드와 이미지 레이어  (0) 2023.04.01
[Docker] Linux에 docker 다운로드  (0) 2023.03.27