posted by 귀염둥이채원 2018. 12. 27. 15:53

도커 컨테이너 CentOS에서 postgres 10.6을 설치하는 방법입니다.


# ==========================================

# 컨테이너 기동

# ==========================================

-p 옵션을 사용하여 호스트와 컨테이너의 포트를 연결해준다.

(SQL 클라이언트이자 데이터베이스 관리 도구인 pgadmin, dbeaver를 통해 접근이 가능하다.)


$ docker run -dit \

--name centos7.4_postgres \

--privileged \

-e container=docker \

-v /sys/fs/cgroup:/sys/fs/cgroup:ro \

-p 5432:5432 \

centos:latest \

/usr/sbin/init


# ==========================================

# Postgres 설치

# ========================================== 

# CentOS 배포판 확인

아래 명령으로 postgresql 버전을 확인한다.

$ yum list | grep ^postgresql


# postgresql yum 저장소 업데이트

http://yum.postgresql.org/에 접속해서 버전 확인

https://download.postgresql.org/pub/repos/yum/에 접속해서 원하는 버전의 주소를 찾는다.

$ yum update

$ rpm -Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7.4-x86_64/pgdg-centos10-10-2.noarch.rpm


# postgresql 설치

$ yum install -y postgresql10.x86_64 postgresql10-server.x86_64


# 설치 패키지 확인

아래 명령을 실행해서 설치되었는지 확인한다.

$ rpm -qa | grep post


# 계정 확인

아래 명령을 통해 postgres 계정이 생성되었는지 확인한다.

$ cat /etc/passwd


# ==========================================

# 초기화, 기동, 접속, 종료

# ==========================================

# 초기화

아래 며령을 수행해서 postgresql을 초기화한다.

$ /usr/pgsql-10/bin/postgresql-10-setup initdb


# postgresql 계정 패스워드 설정

$ passwd postgres


# postgresql 기동

$ su - postgres

$ /usr/pgsql-10/bin/pg_ctl start


# postgresql 접속

$ -bash-4.2$ psql          ---> password 필요 없음

psql (10.6)

Type "help" for help.

postgres=# select version();

 PostgreSQL 10.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit

(1 row)


# postgresql 종료

$ su - postgres

$ /usr/pgsql-10/bin/pg_ctl stop


# ==========================================

# 관리자 비밀번호 설정

# ==========================================

postgres=# \password postgres

Enter new password:

Enter it again:


# ==========================================

# 로컬 서버에서 암호를 이용한 접속으로 변경

# ==========================================

$ vi /var/lib/pgsql/10/data/pg_hba.conf

#local   all             all                                     peer  --> 암호 X

local   all             all                                     md5    --> 암호 O


# ==========================================

# Remote에서 접근 가능하도록 설정

# ==========================================

$ vi /var/lib/pgsql/10/data/pg_hba.conf

# IPv4 local connections:

host    all             all             0.0.0.0/0            trust        <-- 추가 (암호 X)

host    all             all             0.0.0.0/0            md5        <-- 추가 (암호 O)


$ vi /var/lib/pgsql/10/data/postgresql.conf

#listen_addresses = 'localhost'         # what IP address(es) to listen on;

listen_addresses = '*'          # what IP address(es) to listen on;

'DB > postgres' 카테고리의 다른 글

pgAdmin, DBeaver 무엇을 사용할까?  (0) 2018.12.28
PostgreSQL 백업 및 복원 하는 방법  (0) 2018.12.27
[PostgreSQL] psql 명령어 사용법 정리  (0) 2018.12.27
posted by 귀염둥이채원 2018. 12. 27. 14:54

컨테이너에 postgresql을 설치하던 중 아래와 같은 에러가 발생했다.

$ /usr/pgsql-10/bin/postgresql-10-setup initdb

Failed to get D-Bus connection: Operation not permitted

failed to find PGDATA setting in postgresql-10.service


문제는 권한이 없는 (non-privileged) 컨테이너를 실행중이라고 한다.

systemd 의 경우 CAP_SYS_ADMIN capability가 필요하다.

도커는 보안을 위해 권한이 없는 컨테이너의 경우 capability 를 활성화 시키지 않는다.

또한 systemd는 컨테이너의 cgroup 파일 시스템에 RO(Read Only) 접근을 필요로 한다.

해결을 위해서는 "–v /sys/fs/cgroup:/sys/fs/cgroup:ro" 구문을 추가해야 한다.


# 문제

$ docker run -d --name centos7.4_postgres centos:7.4.1708 /bin/bash -c "while true; do echo hello world; sleep 1; done"


# 해결

$ docker run -d --name centos7.4_postgres --privileged -it -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos:latest /usr/sbin/init


# 참고 사이트

https://serverfault.com/questions/824975/failed-to-get-d-bus-connection-operation-not-permitted

http://webkebi.zany.kr:9003/board/bView.asp?bCode=13&aCode=14170

posted by 귀염둥이채원 2018. 12. 27. 11:40

Base Image가 CentOs인 컨테이너를 데몬 형태로 기동하는 방법을 정리한다.

Image 이름에 CentOs 버전을 입력하면 원하는 도커 이미지를 받아서 컨테이너를 생성할 수 있다.


# CentOS Docker Image tag 목록

latest, centos7, 7 (docker/Dockerfile)

centos6, 6 (docker/Dockerfile)

centos7.6.1810, 7.6.1810 (docker/Dockerfile)

centos7.5.1804, 7.5.1804 (docker/Dockerfile)

centos7.4.1708, 7.4.1708 (docker/Dockerfile)  --> centos7.4.1708 

centos7.3.1611, 7.3.1611 (docker/Dockerfile)

centos7.2.1511, 7.2.1511 (docker/Dockerfile)

centos7.1.1503, 7.1.1503 (docker/Dockerfile)

centos7.0.1406, 7.0.1406 (docker/Dockerfile)

centos6.10, 6.10 (docker/Dockerfile)

centos6.9, 6.9 (docker/Dockerfile)

centos6.8, 6.8 (docker/Dockerfile)

centos6.7, 6.7 (docker/Dockerfile)

centos6.6, 6.6 (docker/Dockerfile)


# Docker command example

docker run -d --name {Container Name} centos:{Version} /bin/bash -c "while true; do echo hello world; sleep 1; done"


# CentOs6.6 컨테이너 생성

$ docker run -d --name c6.6 centos:6.6 /bin/bash -c "while true; do echo hello world; sleep 1; done"

5956c5d1e710c7bfa42311f2900419207a4eb368c733b5ba5ae736bc536edd6b


# 컨테이너 접속

$ docker exec -it c6.6 /bin/bash


# OS 버전 확인

[root@5956c5d1e710 /]# cat /etc/*rel*

CentOS release 6.6 (Final)

cpe:/o:centos:linux:6:GA


# CentOs7.4 컨테이너 생성

$ docker run -d --name c7.4 centos:7.4.1708 /bin/bash -c "while true; do echo hello world; sleep 1; done"

Unable to find image 'centos:7.4.1708' locally

7.4.1708: Pulling from library/centos

18b8eb7e7f01: Pull complete

Digest: sha256:814ef512b757f3b515e81f60bed29909fd71bc2d3b28ec8cf025eac749712ed9

Status: Downloaded newer image for centos:7.4.1708

b61d9645aafa60560ba1abd6066079082f3fa02fbc0a39179ca0266cf3e75d51


# 컨테이너 접속

$ docker exec -it c7.4 /bin/bash


# OS 버전 확인

[root@b61d9645aafa /]# cat /etc/*rel*

CentOS Linux release 7.4.1708 (Core)

Derived from Red Hat Enterprise Linux 7.4 (Source)

NAME="CentOS Linux"

VERSION="7 (Core)"

ID="centos"

ID_LIKE="rhel fedora"

VERSION_ID="7"

PRETTY_NAME="CentOS Linux 7 (Core)"

ANSI_COLOR="0;31"

CPE_NAME="cpe:/o:centos:centos:7"

HOME_URL="https://www.centos.org/"

BUG_REPORT_URL="https://bugs.centos.org/"


CENTOS_MANTISBT_PROJECT="CentOS-7"

CENTOS_MANTISBT_PROJECT_VERSION="7"

REDHAT_SUPPORT_PRODUCT="centos"

REDHAT_SUPPORT_PRODUCT_VERSION="7"


cat: /etc/prelink.conf.d: Is a directory

CentOS Linux release 7.4.1708 (Core)

CentOS Linux release 7.4.1708 (Core)


# 참고 사이트

https://hub.docker.com/_/centos/