도커는 소프트웨어를 개발, 배포 및 실행하기 위한 오픈 소스 플랫폼으로, 컨테이너 기반의 가상화 기술을 제공합니다. 도커를 사용하면 개발 환경을 쉽게 구축하고 관리할 수 있으며, 애플리케이션을 효율적으로 배포할 수 있습니다. 이제 도커를 사용하여 환경을 세팅하는 방법에 대해 알아보겠습니다.
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 -> 컨테이너 접속
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
로드 후 도커를 실행하고 접속합니다.
결론적으로, 위의 설명을 통해 도커를 사용하여 환경을 세팅하는 방법에 대해 알아보았습니다. 도커를 통해 개발 환경을 쉽게 구축하고 배포할 수 있으며, 이를 통해 개발자들은 애플리케이션을 보다 효율적으로 관리할 수 있습니다. 도커를 활용하여 개발 및 배포 프로세스를 간소화하고, 시스템의 일관성과 안정성을 유지할 수 있습니다.
'취미' 카테고리의 다른 글
[DB] Linux MariaDB 설치하기 (0) | 2024.01.22 |
---|---|
[DB] Python DB 데이터베이스 연결 (0) | 2024.01.21 |
[Linux] 리눅스 스토리지 마운트 centos7 (0) | 2024.01.21 |
ImportError: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found 해결하기 (0) | 2024.01.20 |
[matplotlib] python matplotlib 그래프 한글 깨짐 해결 (0) | 2024.01.20 |