본문 바로가기

Container/Docker

m1 맥에 도커 설치, Rocky Linux 컨테이너 생성, SSH 접속 테스트

도커?

도커(docker)는 리눅스 환경에서 동작하는 컨테이너 기반 가상화 프로그램으로, 프로세스를 격리시키고 OS를 가상화해서 하나의 서버에 여러 독립적 환경을 구축할 수 있게 해주는 오픈소스 프로젝트입니다.

기존의 Virtual Machine 프로그램들과 비교하여 가볍고, Dockerfile 빌드를 통해 서버 구축을 자동화할 수 있는 등, 서버 관리에 많은 이점이 있습니다.

 

하지만, 도커는 리눅스 기반의 프로그램이기 때문에, 리눅스 이외의 환경(Windows, Mac 등)에서 도커를 실행하려면 가상화가 필요합니다. 

 

이 글에선, 도커 엔진과 CLI 클라이언트 등의 기능이 포함된 Docker Desktop을 설치해서 컨테이너를 만들고, SSH로 접속하는 내용을 다룹니다.

 

도커 데스크탑에 대해 자세히 알고 싶다면 아래 링크를 참고해 주세요 :)

https://docs.docker.com/desktop/#:~:text=Docker%20Desktop%20is%20an%20easy,%2C%20Kubernetes%2C%20and%20Credential%20Helper.

 

 

도커 설치

먼저 아래 명령어를 실행해서, 도커 실행에 필수 요소인 Rosetta2를 설치합니다.

Rosetta2는 에뮬레이터로써, Intel 용으로 제작된 프로그램을 Apple Silicon 환경에서 실행할 수 있도록 변환해주는 프로그램입니다.

softwareupdate --install-rosetta

대문자 'A'를 입력해서 설치에 동의해서 설치를 진행시킵니다

 

다음으로 아래 링크에서 애플 실리콘 전용 설치 파일을 다운로드 해서 도커를 설치합니다.

https://docs.docker.com/desktop/mac/apple-silicon/

 

또한, 터미널에서 설치를 원하시는 경우 Homebrew로 도커를 설치할 수 있습니다.

brew install --cask docker

- cask: GUI(Graphic User Interface) 환경으로 설치, 생략하면 CLI(Command Line Interface) 환경으로 설치합니다. 단, CLI 환경으로 설치하면 맥에서 도커를 실행하기 위한 작업을 따로 해주어야 합니다.

 

설치가 완료되면 도커를 실행합니다.

 

도커를 실행하면 터미널에서 docker 명령어가 정상적으로 동작하며, 아래 명령어를 통해 튜토리얼 컨테이너를 실행할 수 있습니다.

docker run -d -p 80:80 docker/getting-started

 

이제 localhost에 접속해보면 튜토리얼 페이지를 확인할 수 있습니다.

주소창에 localhost를 입력해서 튜토리얼 페이지를 확인할 수 있다

 

 

이제 컨테이너 생성을 위해 OS 이미지를 pull 받습니다.

현재 CentOS는 올해를 끝으로 지원이 종료될 예정이기 때문에, 대체 OS로 떠오르고 있는 록키 리눅스를 pull 받아 진행했습니다.

docker pull rockylinux/rockylinux

 

pull이 완료되면 image를 확인합니다.

docker images

 

이제 rockylinux 이미지를 사용해 컨테이너를 실행시킵니다.

docker run -itd -p 8080:80 -p 2222:22 --privileged --name rocky rockylinux/rockylinux /usr/sbin/init

실행 옵션 설명

run: 컨테이너 실행 명령어

-i: interactive 옵션으로, 키보드 입력을 컨테이너의 표준 입력에 연결하여 키보드 입력을 컨테이너의 쉘 등에 보냄

-t: tty 옵션으로, 터미널을 통해 컨테이너 조작이 가능하게 함

--name: 컨테이너에 이름을 설정, 컨테이너 중 유일해야 하며 설정하지 않을 시 자동으로 생성

-d: 백그라운드로 컨테이너를 실행

--privileged: 컨테이너 주요 자원에 접근할 수 있는 권한 부여

-p: 포트포워딩 설정, 위 예에선 호스트 PC의 2222 포트로 요청이 오면, 컨테이너의 22번 포트로 포워딩

/usr/sbin/init: 록키 리눅스를 실행할 때 초기화 스크립트를 실행하도록 설정, systemctl 명령어를 위해 필요

 

아래의 명령어로 컨테이너에 접속할 수 있습니다.

docker exec -it 컨테이너id /bin/bash

 

rocky 리눅스의 버전을 확인해 봅니다.

cat /etc/rocky-release

 

이제 openssh를 설치합니다.

dnf install -y openssh-server openssh-clients openssh-askpass

dnf는 yum이 가지고 있던 고질적 문제를 해결하고, 성능이 개선된 레드햇 패키지 관리자입니다.

-y: 패키지를 install 할 때, 자동으로 동의하도록 설정하는 install 옵션

openssh-server: 다른 호스트에서 이 서버로 ssh 접속을 할 수 있는 기능이 포함된 패키지

openssh-clients: 이 서버에서 다른 호스트로 ssh 접속을 할 수 있는 기능이 포함된 패키지

openssh-askpass: openssh 사용 시 암호를 요청하는 대화창을 보여주는 기능이 포함된 패키지

 

이제 ssh 데몬을 실행합니다.

systemctl start sshd
systemctl status sshd

 

다음으로 root 계정의 비밀번호를 설정하기 위해 passwd 패키지를 설치하고, root 계정의 비밀번호를 설정합니다.

dnf install -y passwd
passwd root

 

이제 컨테이너에서 나갑니다.

exit

 

선택 사항으로, 현재 상태를 이미지로 저장해서 추후에 다시 사용할 수 있습니다.

docker commit -m 'installed openssh' -a 'Docker Test' 컨테이너ID 레파지토리명

 

마지막으로, 맥 터미널에서 컨테이너에 ssh로 접속을 해봅니다.

ssh -l root -p 2222 localhost

-l: 로그인 할 계정명 입력

-p: 접속할 포트 번호

 

 

'Container > Docker' 카테고리의 다른 글

Dockerfile 빌드 시 매개변수 전달하기  (0) 2023.01.21