본문 바로가기
취미

[도커] Docker 환경 세팅, Docker 접속, DockerFile 작성

by climb_JJIYO 2024. 1. 21.
반응형

도커는 소프트웨어를 개발, 배포 및 실행하기 위한 오픈 소스 플랫폼으로, 컨테이너 기반의 가상화 기술을 제공합니다. 도커를 사용하면 개발 환경을 쉽게 구축하고 관리할 수 있으며, 애플리케이션을 효율적으로 배포할 수 있습니다. 이제 도커를 사용하여 환경을 세팅하는 방법에 대해 알아보겠습니다.

Docker(도커) 이해하기

도커는 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼입니다.

응용 프로그램을 패키지화하고 실행하는 데 사용합니다. 소프트웨어의 환경을 일관되게 유지하고, 배포 및 관리를 간편하게 할 수 있습니다.

도커를 사용하면 개발 환경, 테스트, 배포 등에서 일관성 있고 효율적인 환경을 유지할 수 있습니다. 또한 가상화의 오버헤드를 최소화하면서 빠르고 가벼운 컨테이너를 제공하여 자원을 효율적으로 활용할 수 있습니다.

 

1. 컨테이너

  • 도커는 컨테이너 기술을 사용하여 응용 프로그램과 그에 필요한 모든 종속성을 패키지화합니다.
  • 컨테이너는 격리된 환경에서 실행되며, 호스트 시스템과는 독립적으로 동작합니다.

2. 이미지

  • 도커 컨테이너를 실행하기 위한 실행 가능한 패키지입니다.
  • 도커 이미지는 응용 프로그램 코드, 런타임, 시스템 도구, 라이브러리 등을 포함합니다.

3. 도커 허브

  • 도커 이미지를 저장하고 공유하는 중앙 저장소입니다.
  • 도커 허브에는 다양한 공개 및 개인적인 도커 이미지가 저장되어 있습니다.

4. 도커 컴포즈

  • 여러 컨테이너로 구성된 복잡한 애플리케이션을 정의하고 실행하기 위한 도구입니다.
  • yaml 파일을 사용하여 애플리케이션의 서비스, 네트워크, 데이터베이스 등을 정의할 수 있습니다.

5. 도커 클라이언트 및 서버

  • 도커는 클라이언트-서버 아키텍처를 기반으로 합니다.
  • 도커 클라이언트는 도커 명령을 입력하고, 도커 서버는 이미지를 빌드하고 컨테이너를 실행하는 등의 작업을 수행합니다.

6. 도커 명령어

  • 도커 명령어를 사용하여 이미지 빌드, 컨테이너 실행, 로그 확인, 네트워크 설정 등 다양한 작업을 수행할 수 있습니다.

Docker(도커) 세팅하기

더보기
  • OS : Ubuntu 20.04
  • Python version : 3.10.9
  • CUDA version : 11.8

1. Dockerfile 작성

도커파일(Dockerfile)은 도커 이미지를 생성하기 위한 텍스트 기반의 스크립트 파일입니다. 도커 파일을 사용하면 도커 이미지가 어떻게 구성되는지를 정의할 수 있습니다. 이 파일은 컨테이너에서 실행되는 애플리케이션의 환경, 의존성 및 실행 명령을 정의하는 데 사용됩니다.

 

도커파일을 각 명령이 캐시 됩니다. 변경사항이 발생하면 해당 명령부터 이미지를 다시 빌드하게 됩니다. 이러한 캐싱 메커니즘을 통해 중복된 작업을 피하고 더 효율적으로 이미지를 빌드할 수 있습니다.

 

도커파일을 사용하면 동일한 환경에서 여러 애플리케이션을 실행하거나 배포하기가 훨씬 쉬워집니다. 이미지는 도커 파일을 기반으로 만들어지며, 도커 파일을 공유하면 다른 사용자나 환경에서 동일한 설정을 사용할 수 있습니다.

 

FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04

# Remove any third-party apt sources to avoid issues with expiring keys.
RUN rm -f /etc/apt/sources.list.d/*.list

# Install some basic utilities & python prerequisites
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y && apt-get install -y --no-install-recommends\
    vim \
    curl \
    apt-utils \
    ssh \
    tree \
    ca-certificates \
    sudo \
    git \
    bzip2 \
    libx11-6 \
    make \
    build-essential \
    libssl-dev \
    zlib1g-dev \
    libbz2-dev \
    libreadline-dev \
    libsqlite3-dev \
    wget \
    llvm \
    libncursesw5-dev \
    xz-utils \
    tk-dev \
    libxml2-dev \
    libxmlsec1-dev \
    libffi-dev \
    liblzma-dev \
    python3-openssl && \
    rm -rf /var/lib/apt/lists/*

# Set up time zone
ENV TZ=Asia/Seoul
RUN sudo ln -snf /usr/share/zoneinfo/$TZ /etc/localtime

# Set up language
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

# Add config for ssh connection
RUN echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config && \
    echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config


# Anaconda installing
WORKDIR /home
RUN wget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh
RUN bash Anaconda3-2023.03-1-Linux-x86_64.sh -b -p /home/anaconda
RUN rm Anaconda3-2023.03-1-Linux-x86_64.sh
ENV PATH /home/anaconda/bin:$PATH


# pytorch (선택)
# RUN conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

 

※ pytorch는 도커빌드 시 설치할 수도 있지만 도커이미지 파일을 용량을 기하급수적으로 늘리기 때문에 환경 빌드 후 설치하는 것을 권고합니다.

 

2. Bulid 명령 실행

도커 이미지를 생성하는 프로세스입니다. 도커 빌드를 수행하면 도커 파일에 정의된 명령어들을 차례대로 실행하며, 그 결과 도커 이미지가 생성됩니다. 도커 이미지는 컨테이너를 실행할 때 사용되며, 실행 환경, 의존성, 애플리케이션 코드 등을 패키지화한 것입니다.

# docker build -t [이미지명:태그] [Dockerfile 경로]
$ docker build -t docker_image:0.1 .

# docker 이미지 확인
$ docker images

 

3. 도커와 연결할 폴더 생성

도커 환경과 연결할 폴더를 생성합니다.

$ mkdir folder_name

# 하위폴더 사용자에 맞게 구성

 

4. Run 파일 작성 및 실행

도커 컨테이너를 실행할 때 사용되는 스크립트 파일입니다. 이 파일은 컨테이너가 시작될 때 실행되는 초기화 스크립트로서, 애플리케이션을 시작하거나 환경 설정 등을 수행하는 데 사용할 수 있습니다.

# run 파일 생성
$ vi run_file_name.sh

 

생성한 run_file_name.sh 파일에 내용을 작성합니다.

#!/bin/bash

docker run -dit  \
   -p 8091:8091 \
   --ipc=host \
   --name docker_image \
   --hostname docker_image \
   --gpus all \
   -v /home/jyhan/folder_name/src:/home/src \ # -v [로컬폴더]:[도커내폴더]
   -v /home/jyhan/folder_name/data:/home/data \ # -v [로컬폴더]:[도커내폴더]
   -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
   docker_image:0.1

 

5. Connect 파일 작성

도커에 접속하기 위한 파일입니다. 이 파일은 실행된 컨테이너에 접속할 수 있는 명령어를 실행할 수 있는 스크립트입니다.

# connect 파일 생성
$ vi conn_ovarian_2.sh

 

생성한 conn_file_name.sh 파일에 내용을 작성합니다.

#!/bin/bash

docker exec -it docker_image /bin/bash

 

6. 컨테이너 실행 및 접속

run_file_name.sh 파일로 컨테이너를 실행하고, conn_file_nams.sh 파일로 컨테이너에 접속합니다.

# 실행
$ ./run_file_name.sh

# 실행되었는지 확인
$ docker ps

# 접속
$ ./conn_file_name.sh

 

참고 1) 컨테이너를 삭제하고 싶을 때 아래 명령어를 통해 삭제합니다.

  $ docker stop [컨테이너명]
  $ docker rm [컨테이너명]

 

참고 2). sh 파일 실행 시 권한문제로 실행에 오류가 날 때는 실행권한을 부여한 후 실행시킵니다.

# 실행권한 부여하기
$ chmod +x run_ovarian.sh
$ chmod +x conn_ovarian.sh

 

 

실행한 컨테이너 VScode에서 접속

띄워놓은 컨테이너를 VScode를 사용하여 접속하는 방법입니다.

 

1) 컨테이너가 띄워져 있는 서버에 접속합니다.

2) Remote Explore -> Dev Containers -> 컨테이너 접속

vscode에서 컨테이너 접속하는 화면

 

3) 새로운 윈도우 창이 뜨면서 서버 비밀번호를 입력합니다.

4) 접속이 완료되었습니다.

 

도커 명령어 참고

1. 도커 이미지 삭제 및 컨테이너 조회 및 삭제 명령어

1) 도커 이미지 및 컨테이너 조회 명령어

# 도커 이미지 조회
docker images
# 실행중인 컨테이너 조회
docker ps
# 실행중이지 않은 컨테이너까지 모두 조회
docker ps -a

 

2) 도커 컨테이너 삭제 명령어

도커 이미지를 삭제하려고 할 때, 도커 컨테이너를 먼저 삭제해야 합니다.

# 컨테이너 조회
$ docker ps -a

# 컨테이너 중지
$ docker stop [컨테이너명]

# 컨테이너 삭제
$ docker rm [컨테이너명]

 

3) 도커 이미지 삭제 명령어

도커 컨테이너를 삭제한 수 삭제할 수 있습니다.

# 이미지 조회
$ docker images

# 이미지 삭제
$ docker rmi [이미지명:태그]

 

2. 도커 이미지 commit & save 명령어

도커의 환경 설정에 변경사항이 있을 경우 commit 후 도커 이미지를 생성합니다.

# docker commit [컨테이너명] [이미지명:버전]
docker commit docker_image docker_image:0.2

 

생성한 이미지를 저장하여 tar 파일로 생성합니다.

# sudo docker save -o [저장할이름].tar [이미지 이름]
docker save -o image_230721.tar docker_image:0.2

 

3. 도커 이미지 로드

저장된 도커 이미지 tar파일을 로드합니다.

docker load -i image_230721.tar

# 도커 이미지 확인
docker images

 

로드 후 도커를 실행하고 접속합니다.

 

결론적으로, 위의 설명을 통해 도커를 사용하여 환경을 세팅하는 방법에 대해 알아보았습니다. 도커를 통해 개발 환경을 쉽게 구축하고 배포할 수 있으며, 이를 통해 개발자들은 애플리케이션을 보다 효율적으로 관리할 수 있습니다. 도커를 활용하여 개발 및 배포 프로세스를 간소화하고, 시스템의 일관성과 안정성을 유지할 수 있습니다.

반응형