Docker?
Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 오픈 소스 컨테이너화 플랫폼입니다. Docker는 소프트웨어를 컨테이너 라는 표준화된 유닛으로 패키징하며, Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다
Docker vs Virtual Machine
VM은 하이퍼바이저를 이용하여 하나의 Host에서 여러개의 독립적인 OS(Guest OS)를 생성하게 됨. 이 과정에서 Host에 비해 성능 손실이 발생하고, 가상머신을 배포하기 위해이미지를 생성시 Guset OS를 사용하기 위한 라이브러리, 커널등을 모두 포함하여 크기가 매우 큼
Docker는 가상공간을 생성하기위해 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 만들어 성능의 손실이 거의 없음 컨테이너에 필요한 커널은 Host의 커널을 공유해 사용하며 단지 어플리케이션을 위한 라이브러리 및 실행 파일만 존재 따라서 컨테이너를 이미지로 만들었을 때, VM보다 용량이 대폭 감소한다.
Docker architecture client-server architecture
도커는 client-server architecture를 사용합니다.
Client에서 Docker Daemon에 명령어를 보내서, 컨테이너를 building/running/distributing 하게 됩니다.
도커 Client와 Daemon은 같은 시스템 안에서 실행될 수도 있고, remote Docker Daemon에 Client를 연결하여 사용할 수도 있습니다. 그리고, 도커 Client와 Daemon은 UNIX Socket 또는 Network Interface를 기반으로하는 REST API를 사용하여 커뮤니케이션합니다.
b. image and containor
Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것이라고 생각 하면 됩니다. 그림과 같이 Image를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작하게 되는 것이죠.
그림을 보게 되면 ubuntu 이미지를 만들기 위해 layer A,B,C 를 사용합니다. 그런 다음 nginx 이미지를 만들 때 layer A,B,C,nginx가 필요하다고 할 때, layer A,B,C는 새로 만들지 않고 기존에 있는 ubuntu 이미지(layer A,B,C)에 nginx layer가 추가 되어 만들어지게 됩니다.
Docker install
도커에서 사용하는 이미지의 이름은 기본적으로 [저장소 이름]/[이미지 이름]:[태그] 의 형태로 구성됩니다.
<image >
wego/wego_detection:latest ubuntu:22.04
도커 이미지를 사용하는 방법은 크게 2가지 방법이 있습니다.
이미 만들어진 이미지를 docker hub에서 찾아 docker pull을 통해 사용가능하다.
Docker File은 도커 허브의 기존 이미지를 기반으로 라이브러리 추가 등 추가 환경설정을 진행하여 이미지를 만들기위해 작성한다.
$ mkdir docker
$ echo test >> test.txt
$ code Dockerfile
# This is an auto generated Dockerfile for ros:ros-base
# generated from docker_images/create_ros_image.Dockerfile.em
FROM ros:noetic-ros-core-focal
ARG DEBIAN_FRONTEND=noninteractive
# install bootstrap tools
RUN apt-get update && apt-get install --no-install-recommends -y \\
build-essential \\
python3-rosdep \\
python3-rosinstall \\
python3-vcstools \\
&& rm -rf /var/lib/apt/lists/*
# bootstrap rosdep
RUN rosdep init && \\
rosdep update --rosdistro $ROS_DISTRO
# install ros packages
RUN apt-get update && apt-get install -y --no-install-recommends \\
ros-noetic-ros-base=1.5.0-1* \\
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /workspace/wego_ws/src
COPY test.sh /workspace/wego_ws
WORKDIR /workspace/wego_ws