리눅스

CentOS 7 docker 설치 및 컨테이너 사용 방법

Link2Me 2021. 12. 31. 21:00
728x90

CentOS 7 에 docker 를 설치하고 컨테이너를 사용하는 방법을 적어둔다.

기능 익히고 테스트한다고 삽질만 엄청했다.

 

CentOS 7 에 docker 설치

https://docs.docker.com/engine/install/centos/

 

Install Docker Engine on CentOS

 

docs.docker.com

# Docker 설치
# https://docs.docker.com/engine/install/centos/ 사이트 자료를 참고하여 설치한다.
yum -y update
yum install -y yum-utils
 
# Docker repository 시스템에 추가
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
 
# 최신버전의 Docker 설치(Install Docker Engine)
yum -y install docker-ce docker-ce-cli containerd.io
 
# Docker 데몬 시작 및 부팅 시 Docker 데몬 자동 시작
systemctl start docker
systemctl enable docker
 
# Docker 실행중인지 확인
systemctl status docker
 
 

 

 

컨테이너 사용 준비

 

 

# 실행 중인 컨테이너를 나열
docker container ls
 
# Docker Hub 저장소에서 이미지 검색
docker search centos
 
# CentOS 7의 공식 빌드를 다운로드 받고 싶다면 image pull 하위 명령을 사용하여 이를 수행
# docker image pull centos
# 위 명령어로 하면 CentOS 8.X가 설치되더라.
# centOS 7 설치
docker image pull centos:7
docker image ls
 
# docker 이미지 목록 보기
docker images
 
#################################################################################
# CentoOS 이미지를 기반으로 도커 컨테이너를 시작
# docker container run -it centos:7 /bin/bash 를 하면 centos:latest 로 접속된다.
# 즉, centos:8로 접속된다.
# --privileged 옵션과 -d 옵션으로 /sbin/init을 실행한후 exec로 /bin/bash를 실행시켜야 한다
 
docker run --name mycentos -8022:22 -8080:80 -8000:8000 \
 --privileged -d —cap-add=SYS_ADMIN centos:7 /sbin/init
docker exec -it mycentos /bin/bash
 
# 위에 두줄로 docker 를 실행하거나 아래 세줄로 실행한다.
docker create --name mycentos -8022:22 -8080:80  -8000:8000 \
 --privileged —cap-add=SYS_ADMIN centos:7 /sbin/init
docker start mycentos
docker exec -it mycentos /bin/bash
 
# -i : 연결이 종료되어도 컨테이너 상태를 유지한다.
# -t : 가상 tty를 할당한다.
# -d : 백그라운드에서 컨테이너를 실행하고 컨테이너 ID를 인쇄한다.
# -p : 호스트와 컨테이너의 포트를 포워딩한다.
# -name : 컨테이너의 이름을 지정한다.
# -v : 호스트와 컨테이너의 디렉토리를 마운트한다.
# /bin/bash : 컨테이너 생성 후 /bin/bash를 실행하여 bash 쉘을 이용할 수 있게 해 줌.
 
# 위 명령을 실행하고 나면 docker 명령어 사이트로 접속되어 있어 docker container ls 명령어는 수행되지 않는다.
# docker 접속 상태에서 빠져나오기
exit
 
# docker centos:7 으로 접속된 상태에서 CentOS 7 Python 3.6.8 설치를 한다.
# docker run 하는 시점에 포트를 바인딩 하지 않았다면 도커 container를 다시 띄워야 한다.
# 포트 추가를 미쳐 못한 경우 추가 방법 ==> 이미지를 새로 만들어 실행
docker ps -a
# STATUS 가 UP으로 보일 것이다.
docker stop mycentos
# 이미지를 다른 이미지 이름으로 저장 ==> docker commit mycentos 이미지이름
# docker 백업전 상태 저장
#sudo docker commit -p [CONTAINER ID] [NAMES]
docker commit -p mycentos mycentos7_backup
 
# docker 이미지 백업
# sudo docker save -o [저장할이름].tar [이미지 이름]
sudo docker save -o mycentos7.tar mycentos7_backup
 
 
# 새로운 container 이름 부여하고 포트 추가
docker run --privileged --8022:22 -8080:80 -8000:8000 \
 --name mycentos7 mycentos7_backup /sbin/init
docker exec -it mycentos7 /bin/bash
 
 
 
# Failed to get D-Bus connection: Operation not permitted 
# 메시지가 나오는 것은 --privileged 옵션과 /sbin/init 을 생략했을 때 나온다.
 
 
# 정지된 컨테이너를 다시 띄울 땐 docker start로 띄움
docker start <컨테이너명>
docker start <컨테이너ID>
docker attach <컨테이너명>
# docker 컨테이너 내부로 접속
docker exec -it <컨테이너명> /bin/bash

 

docker SSH 접속을 위한 환경 구축

 

docker centos container 에 접속된 상태에서 실행하는 명령어이다.

 

###############################################################
# CentOS 컨테이너에 설치되어 있는 게 거의 없다.
yum -y install ntsysv
yum -y install initscripts && yum clean all
yum -y install net-tools
yum -y groupinstall 'Development Tools'
yum -y install sudo
yum -y install policycoreutils selinux-policy-targeted
yum -y update
 
# docker root 암호 변경 ==> SSH 에서 root 접속하기 위한 암호 설정
passwd root
 
# docker SSH 설정
yum -y install openssh-server openssh-clients openssh-askpass 
cd ~ 
ssh-keygen -t rsa -'' -f ~/.ssh/id_rsa 
cd .ssh 
cat id_rsa.pub >> authorized_keys 
mkdir /var/run/sshd 
sed -'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 -8022 root@172.16.100.3
 
 
 

 

 

docker SSH 접속 테스트 (docker container 밖에서 실행)

ssh -l root -p 8022 192.168.1.20

또는

ssh -p 8022 root@192.168.1.20

 

 

파이썬 장고 설치 스크립트 예시

 
###############################################################
# 파이썬(Python) 설치 과정
###############################################################
 
# python 2.7.X 버전이 설치된 것을 확인한다.
rpm -qa | grep python
 
# Python 모듈을 빌드하려면 개발 도구가 필요
yum -y install epel-release
yum -y groupinstall 'Development Tools'
yum -y install yum-utils
yum -y install zlib zlib-devel libffi-devel
yum -y install zip unzip wget mc git net-tools
yum -y install mariadb-devel 
yum -y install gcc gcc-c++ python3 python3-devel openssl openssl-devel
 
python3 -V
pip3 -V
 
# pip 설치는 가상환경 만들어서 하는 걸 권장하므로 아래 한줄은 주석처리했다.
# pip3 install --upgrade pip
 
# 현재 Alias 확인
ls -/bin/python*
 
ln -/bin/pip3.6 /bin/pip
 
# 아래와 같이 수정하지 않으면 yum 설치가 되지 않는다.
vi /usr/bin/yum
# 첫줄에 python 을 python2.7 로 변경하고 저장(:wq)한다.
 
vi /usr/libexec/urlgrabber-ext-down
# 첫줄에 python 을 python2.7 로 변경하고 저장(:wq)한다.
 
###### SQLite3 DB 설정 ###################################
cd /root
mkdir sqlite3
cd sqlite3
wget https://kojipkgs.fedoraproject.org//packages/sqlite/3.10.2/1.fc22/x86_64/sqlite-3.10.2-1.fc22.x86_64.rpm
wget https://kojipkgs.fedoraproject.org//packages/sqlite/3.10.2/1.fc22/x86_64/sqlite-devel-3.10.2-1.fc22.x86_64.rpm
sudo yum -y install sqlite-3.10.2-1.fc22.x86_64.rpm sqlite-devel-3.10.2-1.fc22.x86_64.rpm
sqlite3 –version
.quit
# 빠져나오는 것은 .quit
 
##### 파이썬 가상환경 설정 ####################################
mkdir -/home/httpd/python/
cd /home/httpd/python/
python3 -m pip install virtualenv
python3 -m pip install --upgrade pip
 
# 가상환경 이름을 django 로 설정했는데 다른 명칭으로 변경해도 된다.
virtualenv django
cd /home/httpd/python/django
 
# django 가상환경 실행
source /home/httpd/python/django/bin/activate
 
pip3 install --upgrade pip setuptools
pip3 install Django
pip3 install djangorestframework
 
# MySQL 이나 MaraiDB 와 연동 목적
pip3 install mysqlclient
 
# 파이썬 디버깅 도구 설치
pip3 install pylint
pip3 install twisted
 
# 장고 프로젝트 생성 및 Web 서버 구동 테스트
cd /home/httpd/python/django
django-admin startproject config .
chmod 755 manage.py
python manage.py makemigrations
python manage.py migrate
 
# superuser 는 추가하고 싶은 만큼 여러번 실행하면 된다.
python manage.py createsuperuser
# userid,email,password 생성
 
cd config
vi settings.py
ALLOWED_HOSTS = ['*']
 
# 변경하고 :wq (저장)하고 나온다.
 
# 8000번 포트로 Web 서버 구동
cd ..
python manage.py runserver 0.0.0.0:8000
 
# 서버를 재부팅하거나 Web 서버를 중지시킨 경우에 다시 실행하는 명령어
cd /home/httpd/python/django/
source /home/httpd/python/django/bin/activate
python manage.py runserver 0.0.0.0:8000
 
# 가상환경 종료
deactivate
 
# django 프로젝트를 생성해서 하는 사항은 여기서는 생략한다.
 
 

 

 

 

여기까지 하고 크롬 브라우저로 서버 접속이 잘되는지 확인해 보자.

 

 

 

파이썬 구동이 잘되는 걸 확인할 수 있다.

 

 

 

Docker 컨테이너 이미지 백업

그 안에 작업했던 것들을 다시 설치하려면 시간이 또 허비되므로 docker container 이미지를 백업해두자.

 

docker commit -p [CONTAINER ID] [NAMES]   # commit 
 
docker ps -a
# containerID 를 획인 한 후
docker commit -p ad0218d12485 centos_python
 
# 백업하기 (save)
# docker save -o [저장할이름].tar [이미지 이름]
docker save -o centos-python.tar centos_python
 

 

docker 이미지를 확인해보면 centos 7 이미지의 크기는 204MB 인데,

필요한 것들을 설치한 centos_python 이미지는 1.07GB 로 엄청 증가된 것을 확인할 수 있다.

 

 

docker 중지, 컨테이너 삭제, 이미지 삭제

##############################################################################
# Uninstall Docker Engine(Docker 삭제)
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
 
# 컨테이너 삭제 ① 정지된 컨테이너 확인
docker ps -a
# 컨테이너 ID 확인하고 컨테이너 삭제
docker container rm containerID
 
# 컨테이너 ID 강제 삭제
docker rm -f containerID
 
#############################################################################
# docker 중지
# docker ps -a 명령어로 container ID 를 확인한다.
docker ps -a
docker stop 9be30426b6e8
docker ps -a
 
# 컨테이너 정지하지 않고 빠져나오기
Ctrl + p, Ctrl + q
 
# 컨테이너 정지하고 빠져나오기
exit
 
#############################################################################
# 다운로드된 docker 이미지 확인
docker images
 
# docker 이미지 삭제
docker image rm centos
 
#####################################################################
# 현재 접속중인 사용자에게 권한 주기
useradd jsk005
passwd jsk005
sudo usermod -aG docker jsk005
 
#####################################################################

 

728x90