ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 도커 튜토리얼 1부. 도커 기초 다지기
    Docker 2024. 3. 31. 17:25

     

    안녕하세요.

     

    오늘부터 도커에 대해 알아보는 튜토리얼 시리즈를 시작하겠습니다.

     

    이 시리즈를 통해 도커의 핵심 개념부터 실전 활용까지 다뤄볼 예정입니다.

     

    도커는 최근 가장 주목받는 컨테이너 기술 중 하나입니다.

     

    컨테이너 기술은 애플리케이션 배포 및 운영 효율성을 크게 높여줍니다.

     

    이에 따라 개발자, DevOps 엔지니어뿐만 아니라 모든 IT 분야에서 도커 활용도가 높아지고 있죠.

     

    이번 1부에서는 도커의 기본 개념과 핵심 용어, 간단한 실습을 다룰 예정입니다.

     

    이를 통해 도커 기술의 기반을 잡고, 다음 파트에서 실제 활용 방법을 배울 수 있을 것입니다.

     


    ** 목 차 **


    도커 기초 용어

    1. Docker Image

    • 특정 소프트웨어가 구성된 독립적이고 가상화되며 실행 가능한 "패키지"입니다.
    • 코드, 의존성 라이브러리, 소프트웨어 실행에 필요한 환경 설정이 포함되어 있습니다.
    • 기본적인 하드웨어 요구 사항(RAM, 디스크 여유 공간 등)을 제외하고 아키텍처나 시스템 구성에 관계없이 어떤 머신에서도 실행할 수 있습니다.
    • 컨테이너 내에서 실행되며, 도커 컨테이너 이미지라고도 합니다.

    2. Docker Container

    • 이미지를 실행하기 위한 가상 환경으로 볼 수 있습니다.
    • 호스트 시스템 환경과 이미지 내 환경을 분리하기 위해 격리된 환경을 제공합니다.
    • 마이크로서비스나 소규모 운영 체제를 실행하는 데 사용할 수 있습니다.
    • 커널과 통신하며 커널은 이미지 내 소프트웨어를 지원하는 데 필요한 하드웨어 자원을 제공합니다. 이미지는 커널과 직접 통신하지 않습니다.
    • 특수한 파일 시스템을 가진 프로세스의 한 종류라고 볼 수 있습니다.

    3. DockerHub

    • 'GitHub/GitLab'이 Git에 해당한다면, DockerHub는 Docker에 해당하는 웹 기반 스토리지 플랫폼입니다.
    • '공개/비공개'로 도커 이미지에 접근할 수 있습니다.
    • dockerhub.com을 방문해보세요.

    도커 실습하기

    1. 리눅스에서 도커 설치

    1. 터미널을 열고 다음 명령어를 입력합니다(편의상 데비안 계열 배포판으로 가정):
    2. sudo apt update; sudo apt install docker
    3. 최신 버전인지 확인:
    4. docker version
    5. 작동 중인지 다음 명령어로 확인:
    6. sudo systemctl status docker

    녹색 필드가 나오면 잘 작동 중입니다.

     

    아니라면 다음 명령어를 실행한 후 위 명령어를 다시 실행해보세요.

    sudo systemctl enable docker.service docker.socket
    sudo systemctl start docker.service docker.socket

    Tip:
    도커 명령어 사용 시 어떤 플래그나 명령어를 사용해야 할지 모르겠다면, 명령어 뒤에 "--help"를 붙여보세요.

    • 예) docker run --help, docker --help, docker images --help 등
    • man docker run, man docker images 등도 작동합니다. 하지만 전부 다는 아닙니다.

    2. 맥에서 도커 설치

    1. Docker Desktop을 설치합니다.다음 링크에서 안내에 따라 설치하면 됩니다.
    1. 설치가 완료되면 Docker 아이콘이 상단 메뉴 바에 나타납니다. 아이콘을 클릭하면 Docker가 실행됩니다.
    2. 터미널을 열고 다음 명령어로 Docker 버전을 확인합니다.
    docker version
    1. 다음 명령어로 Docker가 제대로 작동하는지 확인합니다.
    docker run hello-world

    "Hello from Docker!" 메시지가 출력되면 정상적으로 설치된 것입니다.

    Tip:

    • Docker 명령어 사용 시 어떤 플래그나 명령어를 사용해야 할지 모르겠다면, 명령어 뒤에 "--help"를 붙여보세요.
      • 예) docker run --help, docker --help, docker images --help 등
    • Docker Desktop 환경설정에서 도커 리소스(CPU, 메모리 등)를 조절할 수 있습니다.

    맥 사용자도 Docker Desktop을 설치하면 리눅스 환경과 유사하게 도커를 사용할 수 있습니다.


    도커 명령어 및 기능은 동일하게 작동합니다.


    도커 컨테이너 중지하기

    1. 실행 중인 컨테이너 목록 확인:
    2. docker ps # 비어있으면 실행 중인 컨테이너 없음
    3. 특정 컨테이너를 중지하려면 컨테이너 ID의 처음 3~4자리 문자를 입력하거나 ID 전체를 복사합니다.
    4. docker stop <container_ID1> <container_ID2> ...
    5. 위 명령어가 작동하지 않으면 다음을 실행합니다.
    sudo docker rm -f <container_ID>  

    DockerHub에서 이미지 가져오기 or 컨테이너 실행하기

    큰 용량을 차지하지 않는 최소 리눅스 운영체제인 Alpine Linux 이미지로 작업해보겠습니다.

    1. DockerHub에서 로컬 머신으로 이미지 가져오기. 두 가지 방법이 있습니다.
    • docker run: 로컬에 이미지가 있는지 먼저 확인하고 없으면 DockerHub에서 가져옵니다.
    • docker pull: DockerHub에서 이미지를 가져옵니다.

    따라서 docker run이 더 나은 방법입니다.

    docker run -it alpine # run in interactive mode
    
     docker run -it alpine
    Unable to find image 'alpine:latest' locally
    latest: Pulling from library/alpine
    bca4290a9639: Pull complete
    Digest: sha256:c5b1261d6d3e43071626931fc004f70149baeba2c8ec672bd4f27761f8e1ad6b
    Status: Downloaded newer image for alpine:latest
    / #
    1. "-it" 플래그를 주면 대화형 모드로 실행되어 컨테이너 실행 중에 명령어를 실행할 수 있습니다.

    불필요한 컨테이너 제거하기

    1. 특정 컨테이너가 불필요하다면 디스크 공간을 차지하지 않도록 완전히 제거해야 합니다.
    2. docker rm <container_ID1> <container_ID2> ...
    3. 중지된 모든 불필요한 컨테이너를 한꺼번에 제거:
    4. docker rm $(docker ps -aq) docker rm -f $(docker ps -aq) # 위 명령어가 작동하지 않으면

     docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    2cf115d8126b alpine "/bin/sh" 3 seconds ago Up 3 seconds nostalgic_galileo
     docker rm 2cf115
    Error response from daemon: cannot remove container "/nostalgic_galileo": container is running: stop the container before removing or force remove
     docker stop 2cf115
    2cf115
     docker rm 2cf115
    2cf115

    ---
    
    ## 이미지 검사하기  
    
    1. docker images 명령어로 로컬 머신의 이미지 목록을 확인할 수 있습니다.
    
    2. 다음 명령어를 실행하면 JSON 형식으로 이미지의 상세 정보(컨테이너, 이미지, 볼륨, 네트워크, 노드, 서비스, 작업 등)를 확인할 수 있습니다.
    
    ```sh
    docker inspect --type=image <image_ID>
    1. 로컬 머신의 모든 컨테이너 목록:
    docker ps # 실행 중인 컨테이너 목록
    docker ps -a # 실행 중인 컨테이너와 중지된 컨테이너 모두 목록
    1. 컨테이너를 검사하려면:
    docker inspect <container_ID>

    Docker port

    1. 컨테이너의 포트 매핑 목록이나 특정 매핑을 확인합니다.
    2. 예를 들어 nginx 도커 이미지를 디테치드 모드("-d" 플래그, 백그라운드 프로세스로 실행되어 부모 프로세스가 종료되어도 계속 작동)로 실행했습니다.
     docker run -d -p 80:80 nginx
    Unable to find image 'nginx:latest' locally
    latest: Pulling from library/nginx
    59f5764b1f6d: Pull complete
    f7bd43626fa7: Pull complete
    2df415630b2f: Pull complete
    059f9f6918db: Pull complete
    df91ff398a83: Pull complete
    e75b854d63f1: Pull complete
    4b88df8a13cd: Pull complete
    Digest: sha256:6db391d1c0cfb30588ba0bf72ea999404f2764febf0f1f196acd5867ac7efa7e
    Status: Downloaded newer image for nginx:latest
    900880ea518df2e9965f49a8196f48754003e1e63c357e596b0bbb1453454dd8

     docker ps
    CONTAINER ID   IMAGE     COMMAND                   CREATED              STATUS              PORTS                NAMES
    900880ea518d   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   sad_darwin
     docker port sad_darwin
    80/tcp -> 0.0.0.0:80

    이는 호스트의 80번 포트를 컨테이너의 80번 포트로 공개한다는 의미입니다.


    컨테이너 리소스 사용량 표시하기

    • 다음 명령어를 사용합니다:
    docker stats

    ~


    컨테이너 내부에서 실행 중인 프로세스 목록

    • 다음 명령어를 사용합니다:
    docker top <container_ID>  
    • 컨테이너 ID의 처음 3자리만 입력해도 작동합니다.
       docker top 900
      UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
      root                1390                1372                0                   10:12               ?                   00:00:00            nginx: master process nginx -g daemon off;
      _rpc                1433                1390                0                   10:12               ?                   00:00:00            nginx: worker process
      _rpc                1434                1390                0                   10:12               ?                   00:00:00            nginx: worker process
      _rpc                1435                1390                0                   10:12               ?                   00:00:00            nginx: worker process
      _rpc                1436                1390                0                   10:12               ?                   00:00:00            nginx: worker process
      _rpc                1437                1390                0                   10:12               ?                   00:00:00            nginx: worker process
      _rpc                1438                1390                0                   10:12               ?                   00:00:00            nginx: worker process
      _rpc                1439                1390                0                   10:12               ?                   00:00:00            nginx: worker process
      _rpc                1440                1390                0                   10:12               ?                   00:00:00            nginx: worker process

    실행 중인 컨테이너에서 명령어 실행하기

    • 다음 명령어를 사용합니다:
    docker exec <container_ID> <command>

    예를 들어 백그라운드로 실행 중인 컨테이너의 내용을 ls 명령어로 확인하고 싶다면:

    docker exec <container_ID> ls
    
     docker exec 900 ls
    bin
    boot
    dev
    docker-entrypoint.d
    docker-entrypoint.sh
    etc
    home
    lib
    media
    mnt
    opt
    proc
    root
    run
    sbin
    srv
    sys
    tmp
    usr
    var

    도커 이미지를 tar 파일로 저장하기(내보내기)

    • 다음 명령어를 사용합니다:
    docker save -o <filename>.tar <image_Name>
    
     docker images
    REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
    nginx        latest    070027a3cbe0   6 weeks ago    192MB
    alpine       latest    ace17d5d883e   2 months ago   7.73MB
     docker save -o alpine.tar alpine
     ls
    alpine.tar
     ls --al
    total 15712
    drwxr-xr-x   4 cpro95  staff      128  3 30 19:20 ./
    drwx------  34 cpro95  staff     1088  3 30 18:54 ../
    -rw-------   1 cpro95  staff  8031232  3 30 19:20 alpine.tar

    tar 파일패키지에서 도커 이미지 불러오기

    • 다음 명령어를 사용합니다:
    docker load -i <image.tar>
    
     docker load -i alpine.tar
    Loaded image: alpine:latest

Designed by Tistory.