웹사이트 검색

Rocky Linux 9에서 Docker를 설치하고 사용하는 방법


소개

Docker는 가상 머신과 같은 컨테이너에서 애플리케이션 프로세스를 간단하고 쉽게 실행할 수 있게 해주는 애플리케이션으로, 이식성이 더 높고 리소스 친화적이며 호스트 운영 체제에 더 의존합니다. Docker 컨테이너의 다양한 구성 요소에 대한 자세한 소개는 The Docker Ecosystem: An Introduction to Common Components를 확인하십시오.

이 튜토리얼에서는 Rocky Linux 9의 기존 설치에 설치하고 사용하는 방법을 배웁니다.

전제 조건

  • Rocky Linux 9용 초기 설정 가이드를 사용하여 설정된 sudo 권한이 있는 루트가 아닌 사용자가 있는 Rocky Linux 9 서버에서 이를 설정하는 방법을 설명합니다.

이 자습서의 모든 명령은 루트가 아닌 사용자로 실행해야 합니다. 명령에 루트 액세스가 필요한 경우 앞에 sudo가 옵니다. Rocky Linux 9용 초기 설정 가이드에서는 사용자를 추가하고 sudo 액세스 권한을 부여하는 방법을 설명합니다.

1단계 - 도커 설치

공식 Rocky Linux 9 리포지토리에서 사용 가능한 Docker 설치 패키지는 최신 버전이 아닐 수 있습니다. 최신 버전을 얻으려면 공식 Docker 리포지토리에서 Docker를 설치하십시오. 이 섹션에서는 이를 수행하는 방법을 보여줍니다.

그러나 먼저 패키지 데이터베이스를 업데이트해 보겠습니다.

  1. sudo dnf check-update

다음으로 공식 Docker 리포지토리를 추가합니다.

  1. sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Docker의 Rocky Linux 전용 리포지토리는 없지만 Rocky Linux는 CentOS를 기반으로 하며 동일한 리포지토리를 사용할 수 있습니다. 리포지토리가 추가된 상태에서 다음 세 가지 패키지로 구성된 Docker를 설치합니다.

  1. sudo dnf install docker-ce docker-ce-cli containerd.io

설치가 완료되면 Docker 데몬을 시작합니다.

  1. sudo systemctl start docker

실행 중인지 확인합니다.

  1. sudo systemctl status docker

출력은 다음과 유사해야 하며 서비스가 활성화되어 실행 중임을 보여줍니다.

Output
● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago Docs: https://docs.docker.com Main PID: 749 (docker)

마지막으로 서버를 재부팅할 때마다 시작되는지 확인합니다.

  1. sudo systemctl enable docker

이제 Docker를 설치하면 Docker 서비스(데몬)뿐만 아니라 docker 명령줄 유틸리티 또는 Docker 클라이언트도 제공됩니다. 이 자습서의 뒷부분에서 docker 명령을 사용하는 방법을 살펴보겠습니다.

2단계 - Sudo 없이 Docker 명령 실행(선택 사항)

기본적으로 docker 명령을 실행하려면 루트 권한이 필요합니다. 즉, 명령 앞에 sudo를 붙여야 합니다. Docker 설치 중에 자동으로 생성되는 docker 그룹의 사용자가 실행할 수도 있습니다. sudo 접두사를 지정하지 않거나 docker 그룹에 속하지 않고 docker 명령을 실행하려고 하면 다음과 같은 결과가 표시됩니다.

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)

이 변경 사항을 활성화하려면 Droplet에서 로그아웃하고 동일한 사용자로 다시 로그인해야 합니다.

로그인하지 않은 docker 그룹에 사용자를 추가해야 하는 경우 다음을 사용하여 사용자 이름을 명시적으로 선언합니다.

  1. sudo usermod -aG docker username

이 문서의 나머지 부분에서는 docker 사용자 그룹의 사용자로 docker 명령을 실행한다고 가정합니다. 선택하지 않은 경우 명령 앞에 sudo를 추가하십시오.

3단계 — Docker 명령 사용

Docker가 설치되고 작동하면 이제 명령줄 유틸리티에 익숙해질 시간입니다. docker를 사용하는 것은 인수가 뒤따르는 일련의 옵션 및 하위 명령을 전달하는 것으로 구성됩니다. 구문은 다음 형식을 취합니다.

  1. docker [option] [command] [arguments]

사용 가능한 모든 하위 명령을 보려면 다음을 입력하십시오.

  1. docker

Docker 1.11.1부터 사용 가능한 하위 명령의 전체 목록에는 다음이 포함됩니다.

Output
attach Attach to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on a container or image kill Kill a running container load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container network Manage Docker networks pause Pause all processes within a container port List port mappings or a specific mapping for the CONTAINER ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart a container rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop a running container tag Tag an image into a repository top Display the running processes of a container unpause Unpause all processes within a container update Update configuration of one or more containers version Show the Docker version information volume Manage Docker volumes wait Block until a container stops, then print its exit code

특정 명령에 사용할 수 있는 스위치를 보려면 다음을 입력하십시오.

  1. docker docker-subcommand --help

시스템 전체 정보를 보려면 다음을 사용하십시오.

  1. docker info

4단계 — 도커 이미지 작업

Docker 컨테이너는 Docker 이미지에서 실행됩니다. 기본적으로 Docker 프로젝트 배후에 있는 회사인 Docker가 관리하는 Docker 레지스트리인 Docker Hub에서 이러한 이미지를 가져옵니다. 누구나 Docker Hub에서 Docker 이미지를 빌드하고 호스팅할 수 있으므로 Docker 컨테이너를 실행하는 데 필요한 대부분의 애플리케이션 및 Linux 배포에는 Docker Hub에서 호스팅되는 이미지가 있습니다.

Docker Hub에서 이미지에 액세스하고 다운로드할 수 있는지 확인하려면 다음을 입력합니다.

  1. docker run hello-world

다음을 포함해야 하는 출력은 Docker가 올바르게 작동하고 있음을 나타내야 합니다.

Output
Hello from Docker. This message shows that your installation appears to be working correctly. ...

search 하위 명령과 함께 docker 명령을 사용하여 Docker Hub에서 사용 가능한 이미지를 검색할 수 있습니다. 예를 들어 Rocky Linux 이미지를 검색하려면 다음을 입력합니다.

  1. docker search rockylinux

이 스크립트는 Docker Hub를 크롤링하고 이름이 검색 문자열과 일치하는 모든 이미지 목록을 반환합니다. 이 경우 출력은 다음과 유사합니다.

Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 2224 [OK] jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8... 22 [OK] jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M... 17 [OK] million12/centos-supervisor Base CentOS-7 with supervisord launcher, h... 11 [OK] nimmis/java-centos This is docker images of CentOS 7 with dif... 10 [OK] torusware/speedus-centos Always updated official CentOS docker imag... 8 [OK] nickistre/centos-lamp LAMP on centos setup 3 [OK] ...

OFFICIAL 열에서 OK는 프로젝트 배후의 회사에서 구축하고 지원하는 이미지를 나타냅니다. 사용하려는 이미지를 식별했으면 다음과 같이 pull 하위 명령을 사용하여 컴퓨터에 다운로드할 수 있습니다.

  1. docker pull rockylinux

이미지를 다운로드한 후 run 하위 명령과 함께 다운로드한 이미지를 사용하여 컨테이너를 실행할 수 있습니다. run 하위 명령으로 docker를 실행할 때 이미지가 다운로드되지 않은 경우 Docker 클라이언트는 먼저 이미지를 다운로드한 다음 이를 사용하여 컨테이너를 실행합니다.

  1. docker run rockylinux

컴퓨터에 다운로드된 이미지를 보려면 다음을 입력하십시오.

  1. docker images

출력은 다음과 유사해야 합니다.

[secondary_lable Output]
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rockylinux              latest              778a53015523        5 weeks ago         196.7 MB
hello-world         latest              94df4f0ce8a4        2 weeks ago         967 B

이 튜토리얼의 뒷부분에서 볼 수 있듯이 컨테이너를 실행하는 데 사용하는 이미지를 수정하고 새 이미지를 생성하는 데 사용할 수 있으며, 그런 다음 Docker Hub에 업로드(푸시는 기술 용어임)할 수 있습니다. 다른 Docker 레지스트리.

5단계 - Docker 컨테이너 실행

이전 단계에서 실행한 hello-world 컨테이너는 테스트 메시지를 내보낸 후 실행되고 종료되는 컨테이너의 예입니다. 그러나 컨테이너는 그보다 훨씬 더 유용할 수 있으며 대화식일 수 있습니다. 결국 가상 머신과 유사하지만 리소스 친화적일 뿐입니다.

예를 들어 Rocky Linux의 최신 이미지를 사용하여 컨테이너를 실행해 보겠습니다. -i 및 -t 스위치의 조합은 컨테이너에 대한 대화형 셸 액세스를 제공합니다.

  1. docker run -it rockylinux

명령 프롬프트는 현재 컨테이너 내부에서 작업하고 있다는 사실을 반영하도록 변경되어야 하며 다음 형식을 취해야 합니다.

Output
[root@59839a1b7de2 /]#

중요: 명령 프롬프트에서 컨테이너 ID를 기록해 둡니다. 위의 예에서는 59839a1b7de2입니다.

이제 컨테이너 내에서 모든 명령을 실행할 수 있습니다. 예를 들어 실행 중인 컨테이너에 MariaDB 서버를 설치해 보겠습니다. 컨테이너 내부에서 루트 권한으로 작업하므로 명령에 sudo 접두사를 붙일 필요가 없습니다.

  1. dnf install mariadb-server

6단계 - 컨테이너의 변경 사항을 Docker 이미지에 커밋

Docker 이미지를 시작하면 가상 머신에서와 마찬가지로 파일을 생성, 수정 및 삭제할 수 있습니다. 변경 사항은 해당 컨테이너에만 적용됩니다. 시작하고 중지할 수 있지만 docker rm 명령으로 제거하면 변경 사항이 완전히 손실됩니다.

이 섹션에서는 컨테이너의 상태를 새 Docker 이미지로 저장하는 방법을 보여줍니다.

Rocky Linux 컨테이너 내부에 MariaDB 서버를 설치한 후 이제 이미지에서 실행되는 컨테이너가 있지만 컨테이너는 생성에 사용한 이미지와 다릅니다.

컨테이너의 상태를 새 이미지로 저장하려면 먼저 컨테이너를 종료합니다.

  1. exit

그런 다음 다음 명령을 사용하여 새 Docker 이미지 인스턴스에 대한 변경 사항을 커밋합니다. -m 스위치는 귀하와 다른 사람들이 변경 사항을 알 수 있도록 도와주는 커밋 메시지용이며 -a는 작성자를 지정하는 데 사용됩니다. 컨테이너 ID는 대화형 도커 세션을 시작할 때 자습서의 앞부분에서 기록한 것입니다. Docker Hub에 추가 리포지토리를 생성하지 않은 경우 리포지토리는 일반적으로 Docker Hub 사용자 이름입니다.

  1. docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name

예를 들어:

  1. docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 59839a1b7de2 sammy/rockylinux-mariadb

참고: 이미지를 커밋하면 새 이미지가 로컬, 즉 컴퓨터에 저장됩니다. 이 자습서의 뒷부분에서는 이미지를 Docker Hub와 같은 Docker 레지스트리에 푸시하여 자신과 다른 사람이 이미지를 평가하고 사용할 수 있도록 하는 방법을 배웁니다.

해당 작업이 완료된 후 현재 컴퓨터에 있는 Docker 이미지를 나열하면 새 이미지와 해당 이미지가 파생된 이전 이미지가 표시되어야 합니다.

  1. docker images

출력은 다음과 같아야 합니다.

Output
REPOSITORY TAG IMAGE ID CREATED SIZE sammy/rockylinux-mariadb latest 23390430ec73 6 seconds ago 424.6 MB rockylinux latest 778a53015523 5 weeks ago 196.7 MB hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

위의 예에서 rockylinux-mariadb는 Docker Hub의 기존 Rocky Linux 이미지에서 파생된 새 이미지입니다. 크기 차이는 변경 사항을 반영합니다. 그리고 이 예제에서는 MariaDB 서버가 설치된 것이 변경되었습니다. 따라서 다음에 MariaDB 서버가 사전 설치된 Rocky Linux를 사용하여 컨테이너를 실행해야 할 때 새 이미지를 사용할 수 있습니다. 이미지는 Dockerfile이라고 하는 것에서 빌드할 수도 있습니다. 그러나 이는 이 문서의 범위를 훨씬 벗어나는 매우 복잡한 프로세스입니다. 향후 기사에서 이에 대해 살펴볼 것입니다.

7단계 - Docker 컨테이너 나열

한동안 Docker를 사용하면 컴퓨터에 많은 활성(실행 중) 및 비활성 컨테이너가 생깁니다. 활성 항목을 보려면 다음을 사용하십시오.

  1. docker ps

다음과 유사한 출력이 표시됩니다.

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7c79cc556dd rockylinux "/bin/bash" 3 hours ago Up 3 hours silly_spence

모든 컨테이너(활성 및 비활성)를 보려면 -a 스위치를 전달하십시오.

  1. docker ps -a

생성한 최신 컨테이너를 보려면 -l 스위치를 전달하십시오.

  1. docker ps -l

실행 중이거나 활성 컨테이너를 중지하는 것은 다음을 입력하는 것만큼 간단합니다.

  1. docker stop container-id

container-iddocker ps 명령의 출력에서 찾을 수 있습니다.

8단계 - Docker 이미지를 Docker 리포지토리로 푸시

기존 이미지에서 새 이미지를 만든 후의 논리적인 다음 단계는 선택한 소수의 친구, Docker Hub 또는 액세스할 수 있는 다른 Docker 레지스트리의 전 세계와 공유하는 것입니다. Docker Hub 또는 다른 Docker 레지스트리에 이미지를 푸시하려면 해당 위치에 계정이 있어야 합니다.

이 섹션에서는 Docker 이미지를 Docker Hub에 푸시하는 방법을 보여줍니다.

Docker Hub에 계정을 생성하려면 Docker Hub에 등록합니다. 그런 다음 이미지를 푸시하려면 먼저 Docker Hub에 로그인하세요. 다음을 인증하라는 메시지가 표시됩니다.

  1. docker login -u docker-registry-username

올바른 암호를 지정했다면 인증이 성공해야 합니다. 그런 다음 다음을 사용하여 자신의 이미지를 푸시할 수 있습니다.

  1. docker push docker-registry-username/docker-image-name

완료하는 데 어느 정도 시간이 걸리며 완료되면 출력은 다음과 같습니다.

Output
The push refers to a repository [docker.io/sammy/rockylinux-mariadb] 670194edfaf5: Pushed 5f70bf18a086: Mounted from library/rockylinux 6a6c96337be1: Mounted from library/rockylinux ...

레지스트리에 이미지를 푸시하면 아래 이미지와 같이 계정의 대시보드에 나열되어야 합니다.

푸시 시도로 인해 이러한 종류의 오류가 발생하면 로그인하지 않았을 수 있습니다.

Output
The push refers to a repository [docker.io/sammy/rockylinux-mariadb] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required

로그인한 다음 푸시 시도를 반복합니다.

결론

Docker에는 이 기사에서 제공된 것보다 훨씬 더 많은 것이 있지만 Rocky Linux 9에서 작업을 시작하는 데는 충분할 것입니다. 대부분의 오픈 소스 프로젝트와 마찬가지로 Docker는 빠르게 개발되는 코드베이스에서 빌드되므로 최신 정보를 얻기 위해 프로젝트의 블로그 페이지를 방문하는 습관.

또한 DO 커뮤니티에서 다른 Docker 자습서를 확인하십시오.