1. Docker란?
1) Docker
Docker는 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있게 해주는 도구로, 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있게 해준다.
일반적으로 가상머신(Virtual Machine)은 호스트 머신(Host Machine)에 '가상화된 하드웨어'와 'OS'를 구축하며, 시스템 분리를 통해 프로세스를 격리시킨다.
하지만 Docker Container는 프로세스의 실행 환경 자체를 격리시킨다. 이렇게 되면 호스트 머신 입장에서는 단순히 프로세스에 불과하지만, 사용자나 컨테이너 입장에서는 호스트와 무관하게 동작하는 가상머신으로 보인다.
Docker는 Ubuntu 위에서 안정적으로 실행되므로 Ubuntu 사용을 적극 권장한다.
2) Docker Image
Docker Image는 어떤 어플리케이션을 실행하기 위한 환경이며, 어떤 환경이 구성되어 있는 상태를 저장해놓은 파일들의 집합이다.
3) Docker Container
Docker Container는 격리된 환경에서 실행되는 프로세스이다. Docker Image 위에서 실행되는 특별한 프로세스를 의미하며, 가상머신이 아닌 단순히 하나의 프로세스이다!
2. Dockerfile로 Image 만들기
Docker Image를 추가하는 방법은 3가지가 있다
- docker pull을 사용해 미리 만들어져있는 이미지 가져옴
- 컨테이너의 변경사항으로부터 이미지 생성(이런 경우는 잘 없음)
- Dockerfile 빌드(Docker만의 특별한 DSL로 Docker Image를 정의하는 파일)
Dockerfile은 base image와 해당 이미지 위에서 line by line으로 실행되는 명령어들이 순차적으로 적힌 하나의 파일이다.
아래 예시는 ubuntu 18.04 위에서 /root 디렉토리에 git 프로젝트를 pull 받아둔 이미지를 생성하는 Dockerfile이다.
FROM ubuntu:18.04
RUN apt-get -y update && apt-get install &&
pat-get -y --no-install-recommends install wget git ssh
RUN pip install --upgrade pip && pip install konlpy
# SSH KEY를 받아서 host 등록
ARG SSH_KEY
RUN mkdir ~/.ssh && \
echo "$SSH_KEY" > ~/.ssh/id_rsa && \
chmod 700 ~/.ssh && \
chmod -R 700 ~/.ssh/id_rsa && \
touch ~/.ssh/known_hosts && \
ssh-keyscan -t rsa xxx.xxx.xxx.xx >> ~/.ssh/known_hosts
WORKDIR /root
RUN git clone -b me --single-branch git@xxx.xxx.xxx.xx:my_project.git
Image 구축은 docker build 명령어를 통해 가능하다. 위 Dockerfile은 아래와 같은 shell script 파일을 실행시켜 image를 구축할 수 있다.
#! /bin/bash
export SSH_KEY="$(cat id_rsa)"
sudo docker build . --build-arg SSH_KEY="$SSH_KEY" --tag new_image:1.0
3. Docker 자주 쓰는 명령어
docker build (Dockerfile 있는 경로) --tag 000:1.0 # docker build
docker ps -a # 컨테이너 모두 출력
docker images # 이미지 모두 출력
docker run -d -it --name 000 --gpus all \
--mount type=bind,source=(서버경로),target=(컨테이너 내부경로) (이미지 이름)
dockedocker image prune # 이름 없는 모든 이미지를 삭제한다
docker network prune # 사용되지 않는 도커 네트워크를 모두 삭제한다.
docker volume prune # 도커 컨테이너에서 사용하지 않는 모든 도커 볼륨을 삭제한다.
docker system prune -a # 중지된 모든 컨테이너, 사용되지 않은 모든 네트워크, 하나 이상의 컨테이너에서 사용되지 않는 모든 이미지를 삭제
'개발' 카테고리의 다른 글
[ubuntu] scp로 파일 복사, 전송 (0) | 2021.03.24 |
---|---|
[ubuntu] 프로세스 확인 명령어 PS (0) | 2021.03.20 |
[git] 작업하면서 자주 쓰는 git 명령어 (0) | 2021.03.10 |
[ubuntu] 프로세스 실행시간 측정 (0) | 2021.03.10 |
[ubuntu] 프로세스 백그라운드에서 실행 (0) | 2021.03.10 |