본 내용은 셀메미트 상품개발 모바일팀에서 진행한 세미나입니다.

docker-logo-blue.png

Docker에 대해 아주아주! 간단하게 알아보면서 친해지는 시간을 가져보겠습니다.

장황하게 설명하면 머리가 아파서 도망가실 수 있으니 최대한 간단하고 짧게 하겠습니다.

🧐 클라이언트 개발자도 도커를 알아야하는 이유

내가 만든 애플리케이션, 테스트 또는 실사용을 위한 배포를 하려고 하는데 배포 방법을 모른다고요??? 완벽한(?) 애플리케이션을 만들었지만, 세상에 나올 수 없다면 무슨 소용일까요? 따라서 개발자, 클라이언트 개발자라도 배포 전략에 대해 알고 있어야 합니다. 특히 Docker는 배포 전략에서 컨테이너 기술이 주목받으면서 보편적으로 사용하는 오픈 소스 프로젝트입니다.

개발자마다 다른 환경에서 개발할 수 있습니다. 또한, 개발 환경과 운영 환경도 다를 수 있죠. 프로젝트마다 사용하는 버전이 다를 수도 있습니다. 이러한 환경에서도 컨테이너 기술은 구애받지 않고 애플리케이션을 테스트 또는 배포할 수 있다는 장점을 갖고 있습니다.

매력있지않나요?

그럼에도 불구하고 여전히 왜 알아야 하는지 모르겠다면, 필요하다고 생각될 때 다시 펼쳐봅시다.(다음이시간에-)

you_all_right.png

🐳 What is Docker

Docker는 에플리케이션을 구축, 테스트 및 배포할 수 있는 컨테이너 기반 가상화 플랫폼입니다.


📦 What is Container

docker_container_image.png

컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지입니다. 이러한 패키지는 운영체제를 가상화하여 어느 환경에서나 실행됩니다.


📦 Why Container

컨테이너를 사용하는 이유

  • VM보다 가볍다

    가상화를 위해서 OS를 포함하여 띄우는 VM과 달리 Container는 엔진 위에 Application 실행에 필요한 바이너리만 올립니다. vm_vs_container.png https://dockerlabs.collabnix.com/beginners/difference-vm-containers.html

  • 책임을 분리할 수 있다

    여러 소프트웨어 버전 및 구성으로 실행할 수 있습니다.

    huhuhut.png

  • 운영체제를 가리지 않는다

    컨테이너는 어느 환경에서도 구동됩니다. 예를 들어, Gitlab을 배포한다고 가정해 봅시다.

    CentOS

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    sudo yum install -y curl policycoreutils-python openssh-server
    sudo systemctl enable sshd
    sudo systemctl start sshd
    sudo firewall-cmd --permanent --add-service=http
    sudo systemctl reload firewalld sudo yum install postfix
    sudo systemctl enable postfix
    sudo systemctl start postfix
    curl https://packages.gitlab.com/install/repositories/gitlab/gitlabee/script.rpm.sh |sudo bash
    sudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ee
    

    Ubuntu

    1
    2
    3
    4
    5
    
    sudo apt-get update
    sudo apt-get install -ycurl openssh-server ca-certificates
    sudo apt-get install -y postfix
    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh
    | sudo bash sudo EXTERNAL_URL="http://gitlab.example.com" apt-get install gitlab-ee
    

    OS마다 배포하는 방법이 다릅니다.

    하지만, Docker로 배포한다면 어느 환경에서든 같은 방법으로 배포가 가능합니다.

    1
    
    docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 \--publish 22:22 --name gitlab \--restart always \--volume /srv/gitlab/config:/etc/gitlab \--volume /srv/gitlab/logs:/var/log/gitlab \--volume /srv/gitlab/data:/var/opt/gitlab \gitlab/gitlab-ce:latest
    

🐳 Let`s Docker

life_is_real.png

설치

Install Docker Engine

이미지를 만들자!

이미지란?

이미지는 컨테이너 실행에 필요한 파일과 설정 값 등을 포함하고 있는 파일입니다. 즉, 컨테이너를 실행할 수 있는 재료들이 모인 파일입니다.

이미지가 없으면 컨테이너를 실행할 수 없지만, 이미지는 컨테이너 없이 존재할 수 있습니다.

what_is_container_image.png

이미지 집합소

  1. Docker hub: 거의 모든 오픈 소스가 여기에 모여있어요!

  2. Private Registry: 나만의 작은 보물 상자 docker_private_registry.png

  3. harbor: 이미지 저장, 관리 등을 제공하는 오픈소스

    참고: 라인 개발자의 Habor 도입기

Docker hub에서 이미지 불러오기

1
2
docker pull mysql:8.0.17
docker pull mysql:latest

이미지 조회

1
docker images

컨테이너를 만들자!

위에서 가져온, 또는 생성한 이미지로 아주 간단하게 컨테이너를 생성할 수 있습니다.

1
docker run $옵션 $이미지식별자 $명령어 $인자

주로 사용하는 옵션

  • —name: 컨테이너에 부여하는 이름
  • -d: 백그라운드에서 실행, 해당 옵션이 없으면 인터럽트가 발생할 때 컨테이너는 종료됩니다.
  • -e: 컨테이너의 환경 변수를 설정합니다.
  • -p: 호스트와 컨테이너간의 포트를 설정합니다. 배포포트:내부사용포트
  • -v: 호스트와 컨테이너 간의 볼륨을 설정합니다. 호스트볼륨:내부볼륨

예시

1
2
3
4
5
docker run -d -p 3306:3306
-e MYSQL_ROOT_PASSWORD=mypassword
--name mysql
-v /home/mysql/datadir:/var/lib/mysql
mysql:8.0.17--character-set-server=utf8mb4--collation-server=utf8mb4_unicode_ci

docker hub에서 많이 사용되는 이미지 정보에는 환경변수, 볼륨 설정 등 컨테이너를 생성하는 조건에 대해서 아주 친절하게 설명해 주고 있습니다.

이번 세미나에서는 정말 간단하게 Docker에 대해서 훑어 보았습니다.

모바일팀은 아직 Docker를 직접 사용하고 있지 않지만, 필요한 시점이 왔을 때 오늘 이 시간이 꼭 도움되었길 바랍니다.

혹시 Docker의 다음 버전이 궁금하시다면 귀띔해주세요. 다시 돌아오겠습니다(그땐 졸릴지도 몰라). i_will_be_back.png