본문으로 바로가기

[Docker]CentOS로 systemctl 사용하기

category ETC/Dockerizing 2022. 2. 8. 22:32
728x90
반응형

Trouble Shoot

cgroup 사용하기

  • 안 된다
    • cgroup은 리눅스 커널 모듈이므로 M1 Mac은 커널이 Centos와 다르기 때문에 안된다고 한다.
    • cgroup 이 안 되니 당연히 /sys/fs/cgroup를 docker로 마운트해서 사용하는 것도 불가능하다.

Centos 내부에서 systemctl을 사용하기 위한 모듈 설치

  • 안 된다
    • 6~7 버전을 시험삼아 사용할 때 yum으로 dbus와 systemd 모듈을 설치 후 시도했지만 실패함

Intel Chip 기반에서는?

  • Intel Chip 기반 맥이 없어서 모르겠다

How To ?

  • 환경
    • M1 Mac Monterey 기반에서 테스트 
    • 다음과 같은 항목을 이용하여 docker에 nginx를 올리고 nginx에 reverse proxy를 이용해 django 프로젝트와 연결하려 했음
      • docker
      • docker-compose
      • Dockerfile(dockerfile)
  • 결론
    • centos:latest 이미지를 사용하면 된다
    • centos:latest 이미지는 centos 8 버전을 사용하고 있기 때문에 추가적인 설정들이 필요했는데 아래 내용은 그 설정에 대한 내용들이다

docker

  • docker pull centos:latest

Dockerfile

FROM centos:latest

ENTRYPOINT ["/usr/sbin/init"]

# Docker 기준 centos8(centos:latest)에서 저장소를 변경시켜줘야함
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*

RUN yum search wget
RUN yum install -y wget
RUN yum install -y mysql-devel python3-devel net-tools
RUN yum install -y gcc make gcc-c++ openssl-devel libffi-devel bzip2-devel

WORKDIR /usr/local

RUN wget https://python.org/ftp/python/3.8.2/Python-3.8.2.tgz
RUN tar xzf Python-3.8.2.tgz
WORKDIR /usr/local/Python-3.8.2

RUN ./configure --enable-optimizations
RUN make && make install

RUN source ~/.bashrc

RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install setuptools-rust

WORKDIR /usr/src/app

COPY . .

RUN python3 -m pip install -r requirements.txt
  • Python에서 from future import annotation을 쓰는 경우 yum install python3을 설치하게 되면 3.6.8이 설치된다. 그러니 따로 소스 컴파일로 설치해주자

Docker-Compose.yml

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - "3600:3600"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on: # django가 먼저 올라간 뒤 실행
      - django-was
  django:
    privileged: true # docker-compose 에서는 이 옵션을 통해서 container가 systemctl 을 사용할 수 있는 권한을 준다고 한다.
    build:
      context: .
    expose:  # django 프로젝트를 컨테이너 내부에서 여러 포트로 노출 시킬 떄
      - "9001"
      - "9002"
      - "9003"
    
728x90
반응형