소개
Docker는 컨테이너에서 애플리케이션 프로세스를 더 쉽게 실행하고 관리할 수 있도록 지원하는 플랫폼입니다. 애플리케이션을 인프라와 분리할 수 있는 방법을 제공합니다. 컨테이너는 가상 머신과 매우 유사하지만, 이식성이 더 뛰어나고 효율적이며 사용하기 쉽습니다. Docker를 설치하는 방법은 여러 가지가 있습니다. Linux 배포판. 기존 운영 체제에 Docker를 설치하는 가장 대중적이고 쉬운 방법은 yum 명령어를 사용하는 것입니다.
이 튜토리얼에서는 CentOS 7에서 몇 가지 간단한 단계로 Docker를 설정하고 사용하는 방법을 보여줍니다.
사전 요구 사항:
- 64비트 CentOS 7 인스턴스.
- sudo 권한이 있는 non-root 사용자.
이 튜토리얼 전체에서 실행하는 모든 명령어는 non-root 사용자로 실행되며, 필요한 경우 sudo 키워드를 사용하여 root 권한이 제공됩니다.
1단계: CentOS 7 인스턴스에 Docker 설정하기
공식 CentOS 7 리포지토리에는 Docker의 최신 설치 패키지가 없을 수 있습니다. 이 섹션에서는 공식 Docker 리포지토리에서 최신 버전의 Docker를 설치합니다. 먼저 다음을 사용하여 패키지 데이터베이스를 업데이트해야 합니다.
|
1 |
sudo yum check-update |
업데이트 단계가 완료되면 아래 명령어를 실행하여 최신 버전의 Docker를 다운로드하고 설치합니다.
|
1 |
curl -fsSL https://get.docker.com/ | sh |
이제 Docker가 설치되었으므로 아래 명령어를 실행하여 Docker 데몬을 시작할 수 있습니다.
|
1 |
sudo systemctl start docker |
Docker 데몬이 실행 중인지 확인하려면 다음을 입력합니다.
|
1 |
sudo systemctl status docker |
systemctl status 명령어의 출력은 실행 중임을 보여주는 아래 공유된 출력과 유사해야 합니다.
|
1 2 3 4 5 6 |
Output: ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2021-02-17 18:22:06 UTC; 10s ago Docs: https://docs.docker.com Main PID: 21884 (dockerd) |
마지막으로 시스템을 재부팅할 때 Docker가 자동으로 시작되도록 하려면 다음 명령어를 사용합니다.
|
1 |
sudo systemctl enable docker |
Docker 설치를 통해 Docker 서비스와 클라이언트 유틸리티(Docker 명령줄 클라이언트)가 제공됩니다. 이 튜토리얼의 다음 섹션에서는 Docker 명령어를 사용하여 더 많은 실습을 진행할 수 있습니다.
또한 다음의 퍼블릭 클라우드의 Ubuntu에서 Docker를 설치 & 운영하는 방법에 대한 심층 튜토리얼.
2단계: Sudo 접두사 없이 Docker 명령어 사용하기
Docker 명령어를 실행하려면 root 권한이 필요합니다. 따라서 명령어를 실행하려면 앞에 sudo를 붙여야 합니다. 설치 중에 기본적으로 Docker 그룹이 생성됩니다. 사용자를 이 그룹에 추가하면 sudo 없이 Docker 명령어를 실행할 수 있습니다. sudo 없이 Docker 명령어를 실행하려고 하거나 사용자를 그룹에 추가하지 않으면 아래와 유사한 출력이 발생합니다.
|
1 2 3 |
Output: docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'. |
사용자 이름을 Docker 그룹에 추가하면 sudo를 사용하지 않고도 Docker 명령어를 실행할 수 있습니다.
|
1 |
sudo usermod -aG docker $(whoami) |
다른 사용자를 Docker 그룹에 추가하려면 명령어에서 사용자 이름을 바꾸기만 하면 됩니다.
|
1 |
sudo usermod -aG docker username |
이 가이드의 나머지 부분에서는 모든 명령어가 Docker 사용자 그룹의 사용자에 의해 실행된다고 가정합니다. 그렇지 않은 경우 명령어와 함께 sudo 접두사를 사용할 수 있습니다.
3단계: Docker 명령 실행하기
이제 Docker를 설치하고 실행했으므로, Docker 명령줄 유틸리티에 익숙해지기 위해 몇 가지 명령을 살펴보겠습니다. Docker 명령은 일반적으로 다음과 같은 형식을 취합니다:
|
1 |
docker [옵션] [명령] [인수] |
사용 가능한 모든 하위 명령을 찾으려면 다음을 사용해야 합니다:
|
1 |
docker |
현재 Docker 20.10.3 기준, 사용 가능한 하위 명령의 전체 목록은 다음과 같습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
출력: attach 연결 로컬 표준 입력, 출력, 및 오류 스트림 에 하나의 실행 중인 컨테이너 build 빌드 하나의 이미지 에서 하나의 Dockerfile commit 생성 하나의 새로운 이미지 에서 하나의 컨테이너의 변경 사항 cp 컨테이너와 로컬 파일 시스템 간에 파일/폴더를 복사합니다 create 새 컨테이너를 생성합니다 diff 컨테이너 '의 파일 시스템의 파일 또는 디렉토리 변경 사항 검사 events 가져오기 실제 시간 이벤트 에서 그 서버 exec 실행 하나의 명령 에서 하나의 실행 중인 컨테이너 export 내보내기 하나의 컨테이너'의 파일 시스템 로 하나의 tar 아카이브 history 표시 그 이력 의 하나의 이미지 images 목록 이미지 import 가져오기 그 콘텐츠 에서 하나의 타볼 로 생성 하나의 파일 시스템 이미지 info 표시 시스템-전반의 정보 inspect 반환 낮은-수준 정보 에 대한 Docker 개체 kill 강제 종료 하나 또는 이상 실행 중인 컨테이너 load 로드 하나의 이미지 에서 하나의 tar 아카이브 또는 STDIN login 로그 인 로 하나의 Docker 레지스트리 logout 로그 아웃 에서 하나의 Docker 레지스트리 logs 가져오기 그 로그 의 하나의 컨테이너 pause 일시 중지 모든 프로세스 내부의 하나 또는 이상 컨테이너 port 목록 포트 매핑 또는 특정 특정 매핑 대상 그 컨테이너 ps 목록 컨테이너 pull 가져오기 하나의 이미지 또는 하나의 저장소 ~로부터 하나의 레지스트리 push 밀어넣기 하나의 이미지 또는 하나의 저장소 ~로 하나의 레지스트리 rename 이름 바꾸기 하나의 컨테이너 restart 재시작 하나 또는 이상 컨테이너 rm 삭제 하나 또는 이상 컨테이너 rmi 삭제 하나 또는 이상 이미지 run 실행 하나의 명령어 ~에서 새로운 새 컨테이너 save 저장 하나 또는 이상 이미지 ~로 하나의 tar 아카이브 (스트리밍되는 ~로 STDOUT 기본적으로 기본값) search 검색 그 Docker Hub ~을 위한 이미지 start 시작 하나 또는 이상 중지된 컨테이너 stats 표시 실시간 실시간 스트림 ~의 컨테이너(의) 리소스 사용량 통계 stop 중지 하나 또는 이상 실행 중인 컨테이너 tag 생성 하나의 태그 TARGET_IMAGE ~하는 참조하는 ~를 SOURCE_IMAGE top 표시 그 실행 중인 프로세스 ~의 하나의 컨테이너 unpause 일시 중지 해제 모든 프로세스 ~내의 하나 또는 이상 컨테이너 update 업데이트 설정 ~의 하나 또는 이상 컨테이너 version 표시 그 Docker 버전 정보 wait 대기 ~할 때까지 하나 또는 이상 컨테이너가 중지, 그 후 출력 해당 종료 코드 |
특정 명령어와 함께 –help 플래그를 사용하여 해당 명령어에 대한 자세한 정보를 얻을 수 있습니다:
|
1 |
docker subcommand --help |
시스템에 대한 자세한 정보를 얻으려면 다음을 사용하십시오:
|
1 |
docker info |
4단계: Docker 이미지 작업하기
Docker 이미지는 Docker 컨테이너의 청사진이라고 할 수 있습니다. 이러한 이미지는 일반적으로 다음에서 가져옵니다. Docker Hub, 이는 Docker 프로젝트에서 관리하는 레지스트리입니다. 누구나 Docker Hub에 자신의 이미지를 생성하고 푸시할 수 있습니다. 결과적으로 레지스트리에서 다양한 애플리케이션과 OS 배포판을 쉽게 찾을 수 있습니다. Docker Hub에 대한 액세스를 확인하는 간단한 프로그램을 사용해 보겠습니다:
|
1 |
docker run hello-world |
Docker가 작동 중임을 보여주는 다음과 같은 출력을 얻어야 합니다:
|
1 2 3 4 |
Output: Hello from Docker! 이 메시지는 보여줍니다 ~라는 것을 귀하의 설치가 보입니다 ~로 작동하는 것으로 올바르게 작동하고 있습니다. ... |
search 명령어를 사용하여 Docker Hub에서 다양한 Docker 이미지를 찾을 수 있습니다. 예를 들어, CentOS 이미지를 검색하려면 아래 명령어를 참조하십시오:
|
1 |
docker search centos |
검색 쿼리는 하위 문자열과 일치하는 모든 이미지 목록을 표시합니다. 귀하의 경우 출력은 다음과 같아야 합니다:
|
1 2 3 4 5 6 7 8 |
Output: NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos 그 공식 빌드 의 CentOS. 6410 [OK] ansible/centos7-ansible Ansible 상에서 Centos7 132 [OK] consol/centos-xfce-vnc Centos 컨테이너 with "headless" VNC sess… 125 [OK] jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL 저장소… 117 [OK] centos/systemd systemd 활성화된 기본 컨테이너. 96 [OK] ... |
검색 결과에는 이미지에 대한 정보를 설명하는 여러 열이 있습니다. OFFICIAL 열의 OK는 해당 이미지가 애플리케이션을 개발한 회사에서 생성하고 지원함을 나타냅니다. 이미지를 확정했다면, Docker pull 명령어를 사용하여 로컬 머신에 다운로드할 수 있습니다:
|
1 |
docker pull centos |
이미지를 다운로드한 후, Docker run 명령어를 사용하여 컨테이너를 실행할 수 있습니다. 사전에 다운로드하지 않고 이미지를 직접 실행하려고 하면, Docker가 이미지를 다운로드한 후 컨테이너를 실행합니다:
|
1 |
docker run centos |
다음 명령어를 사용하여 로컬 머신에 다운로드된 이미지 목록을 확인할 수 있습니다:
|
1 |
docker images |
다음과 유사한 출력이 표시됩니다:
|
1 2 3 4 |
출력: REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 300e315adb2f 2 개월 전 209MB hello-world latest bf756fb1ae65 13 개월 전 13.3kB |
이 튜토리얼의 뒷부분에서 컨테이너를 실행하기 위해 이미지를 수정할 수 있습니다. 이렇게 새로 만든 이미지는 Docker Hub 및 Docker 이미지를 호스팅하는 다른 레지스트리에 추가하거나 푸시할 수 있습니다.
5단계: 대화형으로 컨테이너 실행하기
컨테이너에는 여러 유형이 있습니다. 4단계에서 실행한 hello-world 컨테이너는 메시지를 출력한 후 종료되는 유형의 컨테이너입니다. 또 다른 유형은 대화형 컨테이너입니다. 대화형 컨테이너는 가상 머신과 유사한 방식으로 사용할 수 있습니다.
최신 CentOS 이미지로 컨테이너를 생성해 보겠습니다. Docker run 명령어에서 -i 및 -t 플래그를 사용하면 CentOS 컨테이너에 대화형으로 액세스할 수 있습니다:
|
1 |
docker run -it centos |
명령 프롬프트가 변경되며 아래 출력과 같이 표시됩니다:
|
1 2 |
출력: [root@3ce69d2a35b9 /]# |
|
1 |
참고: 명령 프롬프트에 표시되는 컨테이너 ID는 고유하며 나중에 유용하게 사용됩니다. 이 예시의 경우 그 ID는 in handy afterwards, in the example it is 3ce69d2a35b9입니다. |
이제 실행하는 모든 명령어는 컨테이너 내부에서 실행됩니다. 이는 가상 머신에서 명령어를 실행하는 것과 유사합니다. 다음을 설치해 보겠습니다: MySQL 서버를 CentOS 컨테이너에 설치합니다. 다음 명령어를 사용하여 설치할 수 있습니다:
|
1 |
yum install mysql |
6단계: 컨테이너의 변경 사항을 Docker 이미지로 커밋하기
컨테이너를 시작한 후에는 파일 생성/수정 또는 앱 설정과 같이 유사한 가상 머신에서 수행할 수 있는 모든 작업을 수행할 수 있습니다. 이러한 변경 사항은 해당 컨테이너에만 유지되며, 컨테이너를 삭제하면 변경 사항이 손실된다는 점에 유의하십시오.
이 튜토리얼 부분에서는 변경한 사항이 포함된 컨테이너로부터 새로운 Docker 이미지를 생성하는 방법을 배웁니다. 이후 Step5 MySQL 서버가 설치된 CentOS 컨테이너가 실행 중입니다. 이 컨테이너는 이제 순수 CentOS 이미지와 다릅니다. 나중에 사용할 수 있도록 이 컨테이너 상태를 저장할 수 있습니다. 먼저 다음을 사용하여 컨테이너를 종료해야 합니다.
|
1 |
exit |
아래 명령어를 사용하여 컨테이너에서 변경한 사항을 새 Docker 이미지로 커밋합니다.
|
1 |
docker commit -m "Changes done to the image" -a "Author Name" container-id repository/new_image_name |
명령어에서 -m은 커밋 메시지를 나타내며 기본적으로 변경된 사항을 표시해야 하고, -a 태그는 작성자를 언급하는 데 사용됩니다. Container-id는 다음에서 가져온 것입니다: Step5, 대화형 모드에서 컨테이너를 실행한 후 얻은 것이며, 일반적으로 저장소(repository)는 Docker Hub의 사용자 이름입니다. 예를 들어:
|
1 |
docker commit -m "added mysql-server" -a "CloudSigma" 59839a1b7de2 finid/centos-mariadb |
|
1 |
참고: 이후 그 새로운 이미지가 이다 커밋되면 그것은 이다 저장됩니다 에 귀하의 시스템에. 안에 그 다음 단계에서 의 이 튜토리얼의, 귀하는 할 것이다 배우게 됩니다 어떻게 에 푸시하는지 하나의 이미지를 에 Docker Hub 및 안에 그 유사한 레지스트리에 어느 호스트하는 docker 이미지를. 일단 귀하의 이미지가 이다 푸시되면 에 그 레지스트리에, 그것은 할 수 있다 되다 액세스될 수 있습니다 에 의해 다른 사람들에 의해 또한 또한. |
이제 이미지가 커밋되었으므로, Docker images 명령어는 기존 이미지뿐만 아니라 새 이미지도 나열해야 합니다:
|
1 |
docker images |
명령어의 출력은 아래와 유사해야 합니다:
|
1 2 3 4 5 |
출력: REPOSITORY TAG IMAGE ID CREATED SIZE cloudsigma23/centos-mysql latest 1b9368efea70 13 초 전 308MB centos latest 300e315adb2f 2 개월 전 209MB hello-world latest bf756fb1ae65 13 개월 전 13.3kB |
예제에서 볼 수 있듯이, Docker Hub의 CentOS 이미지를 사용하여 새로운 centos-mysql 이미지가 생성되었습니다. 크기의 차이는 일부 변경 사항이 적용되었음을 나타냅니다. 이 예제에서는 컨테이너에 MySQL 서버가 추가된 것입니다. 다음에 MySQL 서버가 있는 컨테이너가 필요할 때는 새 이미지를 실행하기만 하면 됩니다! 짜잔! MySQL 서버가 사전 설치되어 실행 중인 CentOS 컨테이너를 갖게 되었습니다.
7단계: Docker 컨테이너 관리
이제 Docker에 익숙해졌으므로, 한동안 사용하다 보면 이미 실행 중인 컨테이너와 비활성 상태인 컨테이너가 있을 것입니다. 활성 컨테이너 목록을 가져오려면 다음을 사용해야 합니다:
|
1 |
docker ps |
다음과 유사한 출력이 표시되어야 합니다:
|
1 2 3 |
출력: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 604c889cf404 centos "/bin/bash" 20 분 전 Up 20 분 intelligent_easley |
활성 및 비활성 컨테이너를 모두 나열하려면 명령어에 -a 플래그를 사용해야 합니다:
|
1 |
docker ps -a |
가장 최근에 생성한 컨테이너를 찾으려면 -l 플래그를 제공하면 됩니다:
|
1 |
docker ps -l |
실행 중인/활성화된 컨테이너를 중지하려면 간단한 명령어를 실행하세요:
|
1 |
docker stop container-id |
Docker ps 명령어의 출력에서 container-id를 찾을 수 있습니다.
8단계: 저장소에 이미지 게시하기
새 이미지를 생성한 후 다음 단계는 이를 친구들과 공유하는 것입니다. Docker Hub 또는 다른 레지스트리를 사용하여 전 세계에 공개할 수도 있습니다. 이미지를 푸시하기 전에 해당 레지스트리에 로그인해야 합니다.
튜토리얼의 다음 부분에서는 이미지를 Docker Hub에 푸시하는 방법을 배웁니다. 먼저 Docker Hub에 가입하세요. 아래 명령어를 사용하여 이미지를 푸시하려면 Docker Hub에 로그인해야 합니다:
|
1 |
docker login -u docker-registry-username |
올바른 비밀번호를 입력하고 인증에 성공하면 이미지를 푸시할 수 있습니다. 이미지를 푸시하려면 아래 명령어를 사용하세요:
|
1 |
docker push docker-registry-username/docker-image-name |
명령어의 출력은 다음과 유사할 것입니다:
|
1 2 3 4 5 |
출력: The push refers to repository [docker.io/cloudsigma23/centos-mysql] ee30e80cbcc5: Pushed 2653d992f4ef: Mounted from library/centos ... |
이미지를 푸시하고 나면 아래 이미지와 같이 계정 대시보드에 표시되어야 합니다:

이와 유사한 방식으로 실패하는 경우, 로그인하지 않았을 가능성이 높습니다:
|
1 2 3 4 5 6 7 |
출력: The push refers to repository [docker.io/cloudsigma23/centos-mysql] ee30e80cbcc5: Layer already exists 2653d992f4ef: Layer already exists errors: denied: requested access to the resource is denied unauthorized: authentication required |
로그인한 후 푸시 시도를 반복할 수 있습니다.
결론
Docker를 활용할 수 있는 방법은 여러 가지가 있습니다. 이 튜토리얼은 시작하는 데 필요한 충분한 정보를 제공할 것입니다. 그리고 Docker는 매우 트렌디한 프로젝트이므로, 사용법뿐만 아니라 다양한 사용 사례에 대한 자세한 정보를 다음에서 찾을 수 있습니다: 프로젝트 블로그 페이지.
Docker로 무엇을 할 수 있는지 자세히 알아보려면 다른 Docker 튜토리얼도 확인해 보세요:
- Docker 리소스 정리하기 – 이미지, 컨테이너, 볼륨
- Docker Compose로 Laravel, Nginx, MySQL 배포하기
- OpenVPN Access Server를 사용하여 Docker에서 자체 VPN 서버 실행하기
즐거운 컴퓨팅 되세요!
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.