우수한 소프트웨어와 실용적인 튜토리얼
Docker의 과거와 현재
도커 핵심 개념은 '모든 앱을 어디서나 빌드, 배포, 실행'입니다. 즉, 한 번 패키징하면 어디서나 실행할 수 있다는 뜻입니다.
과거에는 서버에서 애플리케이션 운영 환경을 구성할 때 다양한 구성 요소를 설치해야 했습니다. 예를 들어 JavaWeb 환경에서는 Tomcat을 설치해야 했습니다.MySQL 등등. 이러한 것들을 설치하고 구성하는 것이 얼마나 번거로운지는 말할 것도 없고, 크로스 플랫폼도 아닙니다. 이러한 환경을 Windows에 설치하면, 리눅스 운영체제가 크로스 운영체제가 아니더라도, 동일한 운영체제를 사용하는 다른 서버로 애플리케이션을 이식하는 것은 매우 번거롭습니다.
Linux 컨테이너 기술의 등장으로 이 문제가 해결되었고, 이를 기반으로 Docker가 개발되었습니다. 애플리케이션은 Docker 컨테이너에서 실행되며, Docker 컨테이너는 모든 운영 체제에서 일관성을 유지하여 크로스 플랫폼 및 크로스 서버 환경을 구현합니다. 환경을 한 번만 구성하면 되며, 클릭 한 번으로 다른 머신에 배포할 수 있어 운영이 크게 간소화됩니다.
Docker 설치 및 구성
여기에서는 주로 Ubuntu와 Windows에서 Docker를 설치하는 방법을 소개합니다. 다른 운영 체제의 설치 튜토리얼을 검색하실 수 있습니다.
중국에서는 Docker 공식 홈페이지 접속 속도가 좋지 않기 때문에 매우 빠른 DaoCloud에서 이미지를 다운로드하는 것을 권장합니다.
윈도우
먼저 Docker 다운로드 페이지로 이동하세요.
의 경우 윈10 시스템이 Windows 10 이하인 경우 Docker Toolbox를 다운로드하세요. 다운로드가 완료되면 "다음"을 클릭하여 설치를 완료하세요.
알아채다:Windows에서 Docker를 실행하려면 BIOS에서 Intel Virtual Technology를 활성화해야 합니다. Docker를 열 수 없고 오류가 발생하는 경우, 컴퓨터 모델에 맞는 관련 튜토리얼을 검색해 보세요.
우분투
- Ubuntu에 포함된 설치 소스를 사용하여 Docker를 설치할 수 있습니다. 다음 두 명령을 실행하세요.
$ sudo apt-get 업데이트
$ sudo apt-get install docker.io
- 하지만 자체 설치 소스로 설치된 Docker는 최신 버전이 아닙니다. 다음과 같은 방법으로 최신 버전을 설치하는 것이 좋습니다.
$ curl -sSL https://get.daocloud.io/docker | sh
- 설치가 완료되면 docker version 명령을 사용하여 docker 버전 정보를 볼 수 있습니다.
알아채다:일반적으로 클라이언트와 서버 정보가 표시됩니다. 서버 정보가 없으면 서비스가 시작되지 않은 것입니다. 이 경우, service docker start 명령을 사용하여 서비스를 시작해야 합니다.
Ubuntu에서 Docker 제거
잘못된 버전을 설치한 경우 제거 후 다시 설치할 수 있습니다.
$ sudo apt-get remove --purge docker.io
$ rm -rf /var/lib/docker
Docker 핵심 개념
Docker에는 세 가지 핵심 개념이 있습니다.
- 저장소
- 영상
- 컨테이너
Docker가 저장소를 사용하여 이미지를 관리하는 방식은 Git과 매우 유사합니다. 우리가 구성하려는 애플리케이션 런타임 환경은 다음과 같은 이미지입니다. nginx 로컬에 이미지가 없는 경우 원격 저장소에서 이미지를 가져와야 합니다. 이미지를 시작하면 이미지 사본이 복사되어 컨테이너에 실행됩니다. 컨테이너의 내용을 변경하면 해당 내용을 커밋하여 새 이미지로 저장할 수도 있습니다.
첫 번째 Docker 인스턴스
여기에서는 Nginx를 예로 들어 Docker에서 애플리케이션을 시작하는 과정을 보여드리겠습니다.
Nginx 시작은 세 단계로 나뉩니다.
- nginx 이미지 가져오기
- nginx 컨테이너를 실행하세요
- nginx 포트 매핑
이미지 가져오기
먼저 Docker 공식 저장소에서 nginx를 검색하고, 'official'이라는 단어가 있는 것을 찾아 클릭하고 pull 명령어를 복사합니다.
이미지를 로컬 컴퓨터로 가져오려면 이 명령을 실행하세요. 로컬 이미지를 보려면 "docker images"를 실행하세요.
사실, docker pull nginx 명령은 단축형입니다. 전체 명령은 다음과 같습니다.
$ 도커 풀 registry.hub.docker.com/library/nginx
전체 명령은 nginx 앞에 등록 서버 주소를 추가합니다. docker pull의 기본 주소가 이 주소이므로, 이 주소는 생략할 수 있습니다.
왜 이렇게 말씀하시는 걸까요? 공식 저장소에서 이미지를 다운로드하는 속도가 너무 느리고, 때로는 다운로드가 안 될 수도 있기 때문입니다. 등록 서버 주소를 국내 서버로 변경하면 속도를 높일 수 있습니다.
거울 가속
중국에는 많은 이미지 저장소가 있습니다. 이 글에서는 알리바바 클라우드(Alibaba Cloud) 사용법을 소개합니다. 이어서 알리바바 클라우드에 이미지를 업로드하는 방법도 소개하겠습니다. 이 서비스는 무료입니다.
이 주소를 방문하세요:
알리바바 클라우드 계정이 없으시다면 직접 등록하세요. 위 페이지에서 나만의 전용 가속 주소를 확인하실 수 있으며, 시스템별로 설치 방법이 다릅니다. 제공된 튜토리얼을 따라 설치하시면 됩니다.
nginx 컨테이너를 실행하세요
이미지를 가져온 후 다음 명령을 실행하여 시작합니다.
$ docker run -d nginx
이 명령은 nginx를 백그라운드에서 시작합니다. -d 옵션을 사용하지 않으면 포그라운드에서 시작합니다. 시작 후에는 당분간 접근할 수 없습니다. 또한, 컨테이너 내부의 nginx 포트를 컨테이너 외부로 매핑해야 접근할 수 있습니다.
nginx 포트 매핑
$ docker run -d -p 8080:80 nginx
이전 명령과 비교하면 하나만 추가되었습니다. -피
매개변수 다음에 포트가 옵니다. 여기서는 로컬 머신의 8080번 포트를 컨테이너의 80번 포트에 매핑합니다. 브라우저에서 localhost:8080으로 접속하면 nginx의 시작 페이지를 볼 수 있습니다.
이미지 및 컨테이너에 대한 기본 작업
거울 작동
- 로컬 이미지 보기
$ 도커 이미지
- 이미지에 태그 추가
$ docker 태그 이전 태그 새 태그
새 태그 이미지 ID는 원래 태그 이미지 ID와 정확히 동일합니다. 실제로는 동일한 이미지 파일을 가리키지만 별칭은 다릅니다.
- 이미지 삭제
$ docker rmi 이미지 ID/이미지 태그
알아채다:이미지를 삭제하려면 먼저 해당 이미지를 사용하는 컨테이너를 삭제해야 합니다. 강제로 삭제할 수도 있지만 권장하지는 않습니다. 또한, 태그 또는 ID로 이미지를 삭제할 수 있습니다. ID가 동일하면 태그로 삭제하세요.
컨테이너 운영
- 실행 중인 컨테이너 보기
$ 도커 PS
- 실행 중인 컨테이너 중지
$ docker stop 컨테이너 ID
두 컨테이너를 구별할 수 있는 한 컨테이너 ID를 전부 입력할 필요는 없습니다.
- 모든 컨테이너 보기
$ 도커 ps -a
- 컨테이너 삭제
$ docker rm 컨테이너 ID
컨테이너를 삭제하기 전에 먼저 컨테이너를 중지해야 합니다.
- 실행 중인 컨테이너를 이미지로 저장합니다.
$ docker commit 컨테이너 ID 이미지 태그
특별한 주의:컨테이너를 변경했지만 새 이미지로 저장하지 않으면 컨테이너 삭제 후 모든 변경 사항이 저장되지 않습니다. 다음 글에서는 이 문제를 해결할 수 있는 또 다른 Docker 데이터 저장소를 소개합니다. 또한, 이 명령 뒤의 태그는 생략하고 이름만 쓸 수 있습니다. 기본값은 latest입니다.
- 컨테이너에 들어가기
$ docker exec -it 컨테이너 bash
Docker 컨테이너는 Linux와 유사한 파일 시스템을 가지고 있으며 일부 Linux 명령을 사용할 수 있습니다. 컨테이너를 종료하려면 다음을 입력하세요.
알아채다:일부 이미지에는 bash가 없습니다. 예를 들어, docker pull daocloud.io/library/nginx:1.13.8-alpine-perl을 실행하면 이 명령이 오류를 보고합니다. 이 경우 sh를 사용하여 연결을 설정할 수 있습니다.
$ docker exec -it 컨테이너 /bin/sh
- 컨테이너에 파일 복사
$ docker cp 파일 컨테이너 ID:newfile
- 컨테이너 내부의 파일을 컨테이너 외부로 복사합니다.
$ docker cp 컨테이너 ID:파일 새파일
컨테이너에서 컨테이너 외부로 파일을 복사하는 명령은 컨테이너 외부에서 실행됩니다.
이미지 및 컨테이너 가져오기 및 내보내기
이미지 가져오기 및 내보내기
- 이미지 내보내기
$ docker save -o name.tar 이미지 태그
- 이미지 가져오기
$ docker load --입력 이름.tar
컨테이너 수입 및 수출
- 수출 컨테이너
$ docker export -o name.tar 컨테이너 ID
- 컨테이너 가져오기(docker import name.tar image-tag)
컨테이너를 가져오면 실제로는 이미지로 가져옵니다.
원격 저장소에 자신의 이미지를 푸시하세요
먼저 Docker가 저장소와 이미지를 어떻게 관리하는지 알아보겠습니다.
창고는 등록 서버에 위치합니다. 하나의 창고는 하나의 이미지만 관리하며, 하나의 이미지는 여러 버전을 가질 수 있습니다.
Docker Hub에 이미지 푸시
- Docker Hub(등록 서버)에 액세스하세요.
- 계정이 없으신 경우 직접 계정을 등록하신 후, 다음 페이지에서 '저장소 만들기'를 클릭해 저장소를 생성하세요.
- 예를 들어, 내 이름은 웹 서버이고 내 창고 이름은
스톰싱/웹서버
- 그런 다음 다음 명령을 사용하여 Docker Hub에 로컬로 로그인합니다.
- Docker Hub에 이미지를 업로드하려면 이미지 이름이 웨어하우스 이름과 일치해야 합니다. 이를 위해 이미지에 새 태그를 만들 수 있습니다. 예를 들어, nginx 이미지에 stormxing-webserver 태그를 다시 만듭니다. 버전을 입력하지 않으면 기본적으로 latest가 사용됩니다.
- 마지막으로 푸시하세요. 완료되면 저장소 페이지의 태그 옵션에서 이미지를 볼 수 있습니다.
이미지를 Alibaba Cloud Warehouse로 푸시합니다.
Docker Hub는 이미지를 푸시할 수 있지만 속도가 너무 느립니다. 속도가 빠른 국내 Docker Hub를 사용하는 것이 좋습니다. 여기서는 Alibaba Cloud를 소개합니다.
- 먼저 이 주소에 로그인하고 창고를 만든 다음 로그인 비밀번호를 설정하세요.
- 창고를 생성하고 지역 창고를 선택하세요
- 마지막으로 알리바바 클라우드의 운영 가이드는 매우 자세하고 기본적으로 위의 단계와 동일하므로 여기서는 자세한 내용을 설명하지 않겠습니다.
요약하다
이 글에서는 주로 Docker의 역할을 소개합니다.Docker의 세 가지 핵심 구성 요소
또한 (웨어하우스, 이미지, 컨테이너)의 기본 작업을 소개하고, 자신의 이미지를 원격 웨어하우스로 푸시하는 방법도 소개합니다.