Development/Docker

[Docker] 리눅스에서 도커 사용하기

곽진돔 2023. 9. 18. 11:33

기존에 사용 중인 서버에는 python 3.7 버전이 깔려있다.
그러면 도커 안 깔고.. 사용해도 될듯한데

특정 버전을 업그레이드해야 하는데 기존에 운영 중인 다른 서비스나 환경에 영향을 미치면 안 되기 때문에 도커를 사용하려고 한다.

설치 전에 시스템 요구 사항을 확인해야 한다.
https://docs.docker.com/desktop/install/linux-install/

 

Install Docker Desktop on Linux

Install Docker on Linux with ease using our step-by-step installation guide covering system requirements, supported platforms, and where to go next.

docs.docker.com

시스템 요구사항

Docker Desktop을 성공적으로 설치하려면 Linux 호스트가 다음 일반 요구 사항을 충족해야 합니다.

  • 가상화를 위한 64비트 커널 및 CPU 지원.
  • KVM 가상화 지원. KVM 가상화 지원 지침에 따라 KVM 커널 모듈이 활성화되어 있는지 확인하고 KVM 장치에 대한 액세스를 제공하는 방법을 확인하십시오.
  • QEMU는 버전 5.2 이상이어야 합니다. 최신 버전으로 업그레이드하는 것이 좋습니다.
  • 시스템 초기화 시스템.
  • Gnome, KDE 또는 MATE 데스크톱 환경.
    • 많은 Linux 배포판의 경우 Gnome 환경은 트레이 아이콘을 지원하지 않습니다. 트레이 아이콘에 대한 지원을 추가하려면 Gnome 확장 프로그램을 설치해야 합니다. 예를 들어 앱 표시기 open_in_new.
  • 최소 4GB RAM.
  • 사용자 네임스페이스에서 ID 매핑 구성을 활성화합니다. 파일 공유를 참조하세요.
  • 권장사항: 자격 증명 관리를 위해 초기화하세요 pass.

Linux용 Docker Desktop은 VM(가상 머신)을 실행합니다. 이유에 대한 자세한 내용은 Linux용 Docker Desktop이 VM을 실행하는 이유를 참조하세요.

램을 확인하려면 [[리눅스에서 메모리 확인하는 법]]을 참고하면 된다.

 

BOL3에 도커 설치하기

아래 명령어를 입력하면, 자동으로 배포판 버전을 감지해서 알맞은 도커를 설치해 준다.

sudo wget -qO- http://get.docker.com/ | sh

 

도커 설치 확인

설치가 완료되면 docker version 명령어를 실행하여 정상적으로 설치되었는지 확인한다.

docker version

 

도커 실행 확인

도커 실행 중인지 확인하려면 아래 명령어를 입력한다.

systemctl status docker

 

실행 중인 컨테이너 조회

docker container ls

 

이미지 검색

나는 centos를 설치할 거기 때문에 centos 이미지를 검색한다.

docker search centos

 

centos7 버전이 필요하므로, pull centos:7로 내려받는다.

docker image pull centos:7
# CenOS 7 이미지를 기반으로 Docker Container 시작
#     -i : 연결이 종료되어도 컨테이너 상태를 유지
#     -t : 가상 tty를 할당
#     -d : 백그라운드에서 컨테이너를 실행하고 컨테이너 ID를 인쇄
#     -p : 호스트와 컨테이너의 포트를 포워딩
#     -name : 컨테이너의 이름을 지정
#     -v : 호스트와 컨테이너의 디렉토리를 마운트
#     --privileged : 컨테이너 안에서 host의 리눅스 커널 기능을 모두 사용. 호스트의 주요 자원에 접근 가능
#     --rm : 프로세스 종료 시 컨테이너 자동 제거
#     /bin/bash : 컨테이너 생성 후 /bin/bash를 실행하여 bash 쉘 이용 가능
docker run --privileged --name mycentos7 -d -p 8022:22 -p 8080:80 -p 8000:8000 centos:7 /sbin/init

# Container 목록을 확인해보면 생성한 Container의 STATUS가 UP인 것을 확인 가능
docker ps -a

# Container에 접속
docker exec -it mycentos7 /bin/bash

# Container 빠져나오기
exit

# CentOS Container에 설치되어 있는 것이 거의 없음
yum install -y ntsysv initscripts && yum clean all
yum install -y net-tools groupinstall 'Development Tools' sudo policycoreutils selinux-policy-targeted make
yum -y update

 

도커 안에서, ssh -p 8022 root@{ip주소}를 입력하면 로그인이 가능하다.

[root@8d7d32b20553 /]# ssh -p 8022 root@{ip주소}

 

ssh -p {포트번호} root@{ip주소}

ssh -l root -p 8022 {ip주소}

서버에 처음 접속할 경우 에러가 발생한다.

The authenticity of host '{ip주소}:8022 ([{ip주소}]:8022)' can't be established.
ECDSA key fingerprint is SHA256: ~
ECDSA key fingerprint is MD5: ~
Are you sure you want to continue connecting (yes/no)? yes
Warnig: Permanently added '[ip주소]:8022' (ECDSA) to the list of known hosts.

 

에러 내용:

이 메시지는 실제로 에러 메시지가 아닌, SSH 클라이언트가 처음으로 특정 서버에 연결을 시도할 때 나타나는 보안 경고이다.

SSH는 "host-based" 인증 시스템을 사용하므로, 클라이언트는 처음 접속할 때 서버의 고유한 공개 키(fingerprint)를 저장한다. 이후의 연결 시도에서는 이 키를 기반으로 서버의 신뢰성을 검증한다.

해당 메시지는 처음으로 해당 IP와 포트에 연결을 시도하기 때문에, 클라이언트가 서버의 키를 알 수 없다는 것을 알려주는 것이다. 메시지에 나타난 fingerprint는 서버 관리자에게 제공된 것과 일치하는지 확인할 수 있으며, 일치한다면 안전하게 연결을 계속할 수 있습니다. 그렇지 않다면 연결을 중단하고 원인을 파악해야 한다.

Are you sure you want to continue connecting (yes/no)? 에 yes를 입력하면 클라이언트는 해당 서버의 키를 "known hosts" 파일에 저장하게 되므로, 다음에 동일한 서버에 연결을 시도할 때는 이 메시지가 나타나지 않는다.

마지막 줄의 Warning: Permanently added '[ip주소]:8022' (ECDSA) to the list of known hosts. 는 해당 서버의 키가 성공적으로 저장되었음을 의미한다.

docker ps로 실행 중인 프로세스를 조회하고 docker inspect {프로세스 ID} 도커에서 ip 번호를 조회해봐야 할 것 같아서 아래 명령어들을 사용했다.

 

컨테이너의 IP 주소 확인

Docker에서 컨테이너의 IP 주소를 확인하려면 다음과 같은 방법을 사용할 수 있다:

  1. docker inspect 명령어 사용: 특정 컨테이너의 상세 정보를 확인하려면 docker inspect를 사용하고, 그 결과에서 IP 주소를 추출할 수 있다.
`docker inspect <컨테이너 ID 또는 이름> | grep IPAddress`

또는

`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <컨테이너 ID 또는 이름>`
  1. docker network inspect 명령어 사용: 특정 네트워크에 연결된 모든 컨테이너의 IP 주소를 확인. 이 명령어의 결과에서 "Containers" 섹션을 찾아 해당 컨테이너의 IP 주소를 확인할 수 있다.
  2. docker network inspect <네트워크 이름>
  3. docker ps와 함께 docker exec 사용:docker ps``docker exec <컨테이너 ID 또는 이름> ip addr show
  4. 그런 다음, 원하는 컨테이너의 ID나 이름을 사용하여 컨테이너 내부에서 IP 주소를 확인:
  5. 먼저 실행 중인 모든 컨테이너를 보려면:

이 방법들을 통해 Docker 컨테이너의 IP 주소를 쉽게 확인할 수 있다.

 

IP 주소 확인

ip 주소를 확인하려면 grep IPAddress를 사용한다.

docker inspect 8d7d32b20553 | grep IPAddress
[root@BOL3 ~]# docker inspect 8d7d32b20553 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
[root@BOL3 ~]#

 

그렇지.. ipadress 가 "172.17.0.2" 이까 계속 안 됐던 거구나 ㅎㅎ!

# Docker SSH 설정
yum -y install openssh-server openssh-clients openssh-askpass
cd ~
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cd .ssh
cat id_rsa.pub >> authorized_keys
mkdir /var/run/sshd
sed -i 's/#Port 22/Port 22/g' /etc/ssh/sshd_config

vi /etc/ssh/sshd_config
# PermitRootLogin yes 찾아 주석을 해제하고 저장(:wq)하고 빠져나온다.

service sshd start

# 여기까지 하면 root 권한으로 SSH 로그인이 가능해진다.
# 가령 CentOS 7 의 IP 주소가 192.168.1.20 이라면
# docker 로 접속하기 위한 IP주소는 동일하고, Container 에 매핑한 포트가 8022이면
# 포트를 8022로 설정하고 접속하면 접속된다.

# docker 컨테이너 밖에서 SSH 접속 테스트 방법
# IP 172.16.100.3 인 경우
ssh -p 8022 root@127.17.0.2

도커 접속하기

docker exec -it mycentos7 /bin/bash

도커에 설치된 centOS 버전 확인하기

[root@8d7d32b20553 ~]# rpm --query centos-release
centos-release-7-9.2009.1.el7.centos.x86_64

root 패스워드 설정

passwd

이후 패스워드 설정
(기존 다른 서버 pw와 동일함.)

 

docker save -o centos7.tar centos:7
 chmod 644 centos7.tar

-rw------- 1 root root 211696640 9월 13 22:27 centos7.tar
권한 문제였다. 권한을 주니 다운로드가 된다.

 

root@jhkwak-MacBookPro images # osascript -e 'quit app "Docker"'

root@jhkwak-MacBookPro images # open -a Docker

root@jhkwak-MacBookPro images # docker load -i /Users/kwakjihye/programing/docker/images/centos7.tar

174f56854903: Loading layer 211.7MB/211.7MB
Loaded image: centos:7

 

도커 이미지 내보내기

[root@BOL3 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       7         eeb6ee3f44bd   24 months ago   204MB

docker imgaes 명령어로 이미지의 이름과 태그를 알 수 있다.
아래 스크립트로 이미지를 내보내기 할 수 있다.

docker save -o centos7.tar centos:7