※ 22/08 이슈사항 정리

1. 컨테이너 내부에서 모든 설정 완료 후 Commit -> 이미지 생성
  • 해당 방법은 export 된 이미지를 전달하는 방법으로 docker(podman) load 명령어로 바로 이미지를 로드
  • OCP 담당자 말에 따르면 Openshift 에서 컨테이너가 한번 실행 되면 보안 정책 상 안쪽에서 들어가서 작업 할 수 없기 때문에 해당 방법으로는 환경설정 수정이 필요하기에 정확한 접근 방법이 아닌 듯
  • docker(podman) 명령으로 컨테이너 접속이 가능하고, 수정 또한 가능하지만, 정책상 불가능 하다는 걸로 보아 고객사에서 컨테이너를 관리를 위한 정책인 듯 하다.
2. VM(CentOS7) 에서 RHEL8.6 용 Dockerfile 생성 (postgreSQL 14 패키지 수동 설치 커맨드 입력 필요)
  • DockerFile을 생성하는 방법으로 OCP 담당자가 원하는 방법
  • 메인 VM에 RHEL8 버전 용 기본설치 패키지 & PostgreSQL 14 (RHEL8) 용 패키지 전부 COPY 후 설치 커맨드 + 설정 커맨드 모두 Dockerfile로 생성
3. 공식 지원되는 PostgreSQL 14 버전 image를 사용하여 컨테이너 구성 & weasyM을 따로 구성 (Dockerfile 작성 후 이미지 빌드 -> 실행)
  • weasyM 시스템 아키텍처에 따르면 Flume 수집기쪽 포트가 PostgreSQL로 연결 되는 걸로 보임
  • 단일 컨테이너로 뜨는 PostgreSQL에 포트포워딩 방법을 생각 해야 할 듯 하다.

  • Flume 수집기와 연결 된 PostgreSQL 컨테이너의 포트를 일치 & WeasyM과 단일 컨테이너로 실행 중인 PostgreSQL간 포트 매핑 필요








※ DockerFile 문법정리

FROM : Docker Base Image (기반이 되는 이미지, <이미지 이름>:<태그> 형식으로 설정)
USER : 실행 유저
MAINTAINER : 메인테이너 정보 (작성자 정보)
RUN : Shell Script 또는 명령을 실행
CMD : 컨테이너가 실행되었을 때 명령이 실행
LABEL : 라벨 작성 (docker inspect 명령으로 label 확인할 수 있습니다.)
EXPOSE : 호스트와 연결할 포트 번호를 설정한다.
ENV : 환경변수 설정
ADD : 파일 / 디렉터리 추가
COPY : 파일 복사
ENTRYPOINT : 컨테이너가 시작되었을 때 스크립트 실행
VOLUME : 볼륨 마운트
USER : 명령 실행할 사용자 권한 지정
WORKDIR : "RUN", "CMD", "ENTRYPOINT" 명령이 실행될 작업 디렉터리
ARG : Dockerfile 내부 변수
ONBUILD : 다른 이미지의 Base Image로 쓰이는 경우 실행될 명령 수행
SHELL : Default Shell 지정



※ 관련 Docker Command 정리

  • Dockerfile 빌드
    • docker build -t {태그명:버전} .

  • Docker 컨테이너 관련 커맨드
    • docker ps -al
    • docker stop `docker ps -al|grep -v "CONTAINER"|grep weasym|cut -b1-12`
    • docker rm `docker ps -al|grep -v "CONTAINER"|grep weasym|cut -b1-12`
    • docker run -it -d --user postgres --privileged -v /data/pgsql/14/data/:/data/pgsql/14/data/ -p 55432:5432 -p 18080:18080 -p 19000:19000 --name weasym weasym:4.0 /bin/bash /opt/runtest.sh
    • docker logs `docker ps -al|grep -v "CONTAINER"|grep weasym|cut -b1-12`
    • docker inspect -f "{{ .NetworkSettings.IPAddress }}" `docker ps -al|grep -v "CONTAINER"|grep "weasym"|cut -b1-12`




최종 Dockerfile

  • RHEL8.6 Base Image의 openjdk 사용
    • root 계정으로 연관 패키지 설치
    • OS 파라미터 설정
    • PostgreSQL 14 버전 패키지 COPY & 설치
    • 볼륨 매핑 될 디렉터리 생성
    • weasyM 패키지 COPY
    • runtest.sh (전체 start Shell script) COPY



FROM registry.access.redhat.com/ubi8/openjdk-8:1.14-3

USER root

RUN microdnf upgrade --refresh
RUN microdnf install -y tzdata
RUN microdnf install -y tzdata*
RUN microdnf install -y glibc-langpack-en
RUN microdnf install -y yum yum-utils
RUN yum install -y libtirpc
RUN yum install -y python3
RUN yum install -y libicu
RUN yum install -y libxslt
RUN microdnf install -y lz4
RUN microdnf install -y libperl.so.5.26
RUN microdnf install -y procps

RUN echo -e "* soft nofile 65536 \n* hard nofile 65536\n* soft nproc 131072\n* hard nproc 131072" >> /etc/security/limits.conf
#RUN echo -e "fs.file-max = 6815744 \nkernel.sem = 250 32000 100 128\n kernel.shmmni = 4096\n kernel.shmall = 1073741824\n kernel.shmmax = 4398046511104 \nkernel.panic_on_oops = 1 \nnet.core.rmem_default = 104857600 \nnet.core.rmem_max = 33554432 \nnet.core.wmem_default = 104857600 \nnet.core.wmem_max = 33554432 \nnet.ipv4.conf.all.rp_filter = 2 \nnet.ipv4.conf.default.rp_filter = 2 \nfs.aio-max-nr = 1048576 \nnet.ipv4.ip_local_port_range = 9000 65500 \nnet.ipv4.conf.all.arp_notify = 1 \nnet.ipv4.tcp_rmem = 4096 8388608 33554432 \nnet.ipv4.tcp_wmem = 4096 8388608 33554432 \nnet.ipv4.tcp_window_scaling = 1 \nnet.ipv4.tcp_moderate_rcvbuf = 1 \nnet.ipv4.tcp_sack = 1 \nnet.ipv4.tcp_max_syn_backlog = 30000 \n ">> /etc/sysctl.conf

RUN sysctl -p


COPY --chown=root:root ./postgresql14-libs-14.5-1PGDG.rhel8.x86_64.rpm /opt/
COPY --chown=root:root ./postgresql14-14.5-1PGDG.rhel8.x86_64.rpm /opt/
COPY --chown=root:root ./postgresql14-server-14.5-1PGDG.rhel8.x86_64.rpm /opt/
COPY --chown=root:root ./postgresql14-contrib-14.5-1PGDG.rhel8.x86_64.rpm /opt/
COPY --chown=root:root ./postgresql14-docs-14.5-1PGDG.rhel8.x86_64.rpm /opt/
COPY --chown=root:root ./postgresql14-plperl-14.5-1PGDG.rhel8.x86_64.rpm /opt/
COPY --chown=root:root ./postgresql14-plpython3-14.5-1PGDG.rhel8.x86_64.rpm /opt/

RUN rpm -ivh /opt/postgresql14-libs-14.5-1PGDG.rhel8.x86_64.rpm
RUN rpm -ivh /opt/postgresql14-14.5-1PGDG.rhel8.x86_64.rpm
RUN rpm -ivh /opt/postgresql14-server-14.5-1PGDG.rhel8.x86_64.rpm
RUN rpm -ivh /opt/postgresql14-contrib-14.5-1PGDG.rhel8.x86_64.rpm
RUN rpm -ivh /opt/postgresql14-docs-14.5-1PGDG.rhel8.x86_64.rpm
RUN rpm -ivh /opt/postgresql14-plperl-14.5-1PGDG.rhel8.x86_64.rpm
RUN rpm -ivh /opt/postgresql14-plpython3-14.5-1PGDG.rhel8.x86_64.rpm

RUN mkdir /data
RUN mkdir /data/pgsql
RUN mkdir /data/pgsql/14
RUN mkdir /data/pgsql/14/data/
RUN mkdir /opt/weasym-server/

RUN chown -R postgres:postgres /data
RUN chown -R postgres:postgres /home

USER postgres

COPY --chown=postgres:postgres ./runtest.sh /opt/
COPY --chown=postgres:postgres ./weasym-server /opt/weasym-server




runtest.sh

#!/bin/bash
export TZ=Asia/Seoul
export LANG=en_US.utf8
export PGDATA=/data/pgsql/14/data
export PATH=/usr/pgsql-14/bin:$PATH

source ~/.bash_profile

/usr/pgsql-14/bin/pg_ctl -D /data/pgsql/14/data start
cd /opt/weasym-server/bin/
./startup.sh

while :
do
#echo still alive
#date
sleep 100
done
~


추가 확인 사항
  • 위 쉘 스크립트에서 while 문으로 계속 돌려야만 Process가 죽지 않음 > Docker 커맨드나 설정 중 다른 설정이 있는지 확인 필요 (-it -d 로는 설정이 안됨)