<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Docker_Postgresql_%EC%84%A4%EC%B9%98_%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</id>
	<title>Docker Postgresql 설치 환경설정 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Docker_Postgresql_%EC%84%A4%EC%B9%98_%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Docker_Postgresql_%EC%84%A4%EC%B9%98_%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95&amp;action=history"/>
	<updated>2026-05-17T23:24:16Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Docker_Postgresql_%EC%84%A4%EC%B9%98_%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95&amp;diff=328&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: = Docker로 Postgresql 설치 및 환경설정 =  == 개요 == {{틀:고지상자 |제목=Docker로 Postgresql 설치/삭제 및 데이터 외부저장 볼륨 생성 |내용=# Postgresql 설치  ## 설치후 Postgresql 유저/db/테이블 생성 # Docker로 컨테이너 삭제  ## 생성된 유저/db/테이블 도 같이 삭제됨을 확인 # 다시 컨테이너를 생성 ## 이전 설치된 유저/db/테이블이 있는지 확인  # 데이터 외부저장 볼륨 생성 ## 데...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Docker_Postgresql_%EC%84%A4%EC%B9%98_%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95&amp;diff=328&amp;oldid=prev"/>
		<updated>2024-10-14T16:21:38Z</updated>

		<summary type="html">&lt;p&gt;새 문서: = Docker로 Postgresql 설치 및 환경설정 =  == 개요 == {{틀:고지상자 |제목=Docker로 Postgresql 설치/삭제 및 데이터 외부저장 볼륨 생성 |내용=# Postgresql 설치  ## 설치후 Postgresql 유저/db/테이블 생성 # Docker로 컨테이너 삭제  ## 생성된 유저/db/테이블 도 같이 삭제됨을 확인 # 다시 컨테이너를 생성 ## 이전 설치된 유저/db/테이블이 있는지 확인  # 데이터 외부저장 볼륨 생성 ## 데...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Docker로 Postgresql 설치 및 환경설정 =&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
{{틀:고지상자&lt;br /&gt;
|제목=Docker로 Postgresql 설치/삭제 및 데이터 외부저장 볼륨 생성&lt;br /&gt;
|내용=# Postgresql 설치 &lt;br /&gt;
## 설치후 Postgresql 유저/db/테이블 생성&lt;br /&gt;
# Docker로 컨테이너 삭제 &lt;br /&gt;
## 생성된 유저/db/테이블 도 같이 삭제됨을 확인&lt;br /&gt;
# 다시 컨테이너를 생성&lt;br /&gt;
## 이전 설치된 유저/db/테이블이 있는지 확인 &lt;br /&gt;
# 데이터 외부저장 볼륨 생성&lt;br /&gt;
## 데이터를 저장할 볼륨을 별도로 생성하여 컨테이너가 삭제 되어도 이전 설치된 유저/db/테이블 정보 저장하는 방법&lt;br /&gt;
}}&lt;br /&gt;
{{틀:고지상자&lt;br /&gt;
|제목=도커 컨테이너를 삭제해도 데이터를 영구적으로 저장하는 방법 &lt;br /&gt;
|내용=# docker는 프로세스 형태로 자원을 격리하여 사용하기 때문에 컨테이너가 삭제되면 기존에 저장되었던 데이터는 사라지는 문제점.&lt;br /&gt;
# docker volume을 사용하거나 로컬 컴퓨터 파일에 마운트하여 docker 내부에 생성되는 데이터를 docker 외부에 저장하여 영구적으로 데이터를 저장하는 방법 &lt;br /&gt;
* 하단 상세 설명 참조 ([[#볼륨과 마운트로 데이터 저장하는 방법]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Docker로 Postgresql 다운로드 및 실행 ==&lt;br /&gt;
&lt;br /&gt;
=== Docker 이미지 다운 로드 ===&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt; &lt;br /&gt;
# Docker 이미지 다운로드&lt;br /&gt;
$docker pull postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt; &lt;br /&gt;
# Docker 이미지 확인&lt;br /&gt;
$docker images&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== postgresql Docker 실행  ===&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt; &lt;br /&gt;
$ docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=cafe1234 -d postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{틀:고지상자&lt;br /&gt;
|제목= 파라미터 설명&lt;br /&gt;
|내용=* docker run : docker image에서 container 생성&lt;br /&gt;
* -p 5432:5432     : 해당 container의 port forwarding에 대해 inbound/outbound port 모두 5432으로 설정한다.&lt;br /&gt;
* -name postgres   : container의 이름은 postgres로 한다.&lt;br /&gt;
* -e               : container 내부의 환경변수 설정&lt;br /&gt;
* POSTGRES_PASSWORD=&amp;quot;암호&amp;quot;&amp;quot; : ROOT 암호를 설정 따옴표 내의 내용은 암호이다.&lt;br /&gt;
* -d postgres : postgres이라는 이미지에서 분리하여 container를 생성한다.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Docker 프로세스 확인 ===&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt; &lt;br /&gt;
$ docker ps -a &lt;br /&gt;
&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES&lt;br /&gt;
2093fec3b2ac        postgres            &amp;quot;docker-entrypoint.s…&amp;quot;   2 minutes ago       Up 2 minutes                0.0.0.0:5432-&amp;gt;5432/tcp   postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker 컨테이너 내부 접속 및 사용자 , 데이터베이스 생성, 테이블 생성 ==&lt;br /&gt;
&lt;br /&gt;
=== Docker 컨네이너(postgresql 이미지 내부) 쉘로 내부 접속  ===&lt;br /&gt;
* Docker 내부 쉘실행 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker exec -it postgres /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 컨테이너 내부 접속 ===&lt;br /&gt;
&lt;br /&gt;
* postgresql 접속 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
root@ac61c662ee4c:/# psql -U postgres&lt;br /&gt;
&lt;br /&gt;
psql (13.0 (Debian 13.0-1.pgdg100+1))&lt;br /&gt;
Type &amp;quot;help&amp;quot; for help.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 사용자 생성 (dbcafe) ===&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
postgres=# CREATE USER dbcafe PASSWORD &amp;#039;cafe1234&amp;#039; SUPERUSER;&lt;br /&gt;
....&lt;br /&gt;
CREATE ROLE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DB 생성(test_db) ===&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
postgres=# CREATE DATABASE test_db OWNER dbcafe;&lt;br /&gt;
....&lt;br /&gt;
CREATE DATABASE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 디비(test_db) 접속 ===&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
postgres=# \c test_db dbcafe&lt;br /&gt;
&lt;br /&gt;
You are now connected to database &amp;quot;test_db&amp;quot; as user &amp;quot;dbcafe&amp;quot;.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 테이블 생성 ===&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt; &lt;br /&gt;
test_db=# CREATE TABLE tb_emp (&lt;br /&gt;
emp_no integer NOT NULL,&lt;br /&gt;
emp_name character varying(255),&lt;br /&gt;
age integer,&lt;br /&gt;
dept_no integer,&lt;br /&gt;
CONSTRAINT pk_emp PRIMARY KEY (emp_no)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 테이블 정보 조회 ===&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
test_db=# \dt&lt;br /&gt;
        List of relations&lt;br /&gt;
 Schema | Name | Type  |  Owner&lt;br /&gt;
--------+------+-------+----------&lt;br /&gt;
 public | tb_emp | table | dbcafe&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt; &lt;br /&gt;
# postgresql 접속 종료 &lt;br /&gt;
postgres=# \q&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 기본적인 데이터베이스 생성과정 완료&lt;br /&gt;
* 아래는 컨테이너를 종료하고 다시 시작했을 때, 생성된 정보가 있는지 확인 &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 컨테이너 재접속 후 생성된 정보 확인 == &lt;br /&gt;
&lt;br /&gt;
=== 기존 docker 종료 후 재접속 ===&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker exec -it postgres /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* postgresql 접속 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
root@ac61c662ee4c:/#  psql -U postgres&lt;br /&gt;
psql (13.0 (Debian 13.0-1.pgdg100+1))&lt;br /&gt;
Type &amp;quot;help&amp;quot; for help.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 사용자 정보 조회 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
postgres=# \du&lt;br /&gt;
                                   List of roles&lt;br /&gt;
 Role name |                         Attributes                         | Member of&lt;br /&gt;
-----------+------------------------------------------------------------+-----------&lt;br /&gt;
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}&lt;br /&gt;
 dbcafe    | Superuser                                                  | {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dbcafe 유저로 test_db 디비접속 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
postgres=# \c test_db dbcafe&lt;br /&gt;
You are now connected to database &amp;quot;test_db&amp;quot; as user &amp;quot;dbcafe&amp;quot;.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 테이블 정보 조회 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
test_db=# \dt&lt;br /&gt;
        List of relations&lt;br /&gt;
 Schema | Name | Type  |  Owner&lt;br /&gt;
--------+------+-------+----------&lt;br /&gt;
 public | tb_emp | table | dbcafe&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 컨테이너만 종료되고 다시 시작했을 때는 기존에 저장되어 있던 데이터가 잘 살아 있는 것을 확인할 수 있다.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Docker 컨테이너 삭제 ==&lt;br /&gt;
* postgres 도커 중지 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker stop postgres &lt;br /&gt;
postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* postgres 도커 삭제 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker rm postgres&lt;br /&gt;
postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* postgres 컨테이너 없음 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker exec -it postgres /bin/bash&lt;br /&gt;
Error: No such container: postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 컨테이너가 삭제되었기 때문에 다시 접속할 수가 없음.&lt;br /&gt;
&lt;br /&gt;
* 다시 컨테이너를 생성 하려면 docker run 실행&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=cafe1234 -d postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt; &lt;br /&gt;
$ docker exec -it postgres /bin/bash&lt;br /&gt;
root@fd7f90041ffa:/# psql -U postgres&lt;br /&gt;
psql (13.0 (Debian 13.0-1.pgdg100+1))&lt;br /&gt;
Type &amp;quot;help&amp;quot; for help.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt; &lt;br /&gt;
postgres=# SELECT * FROM PG_USER;&lt;br /&gt;
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig&lt;br /&gt;
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------&lt;br /&gt;
 postgres |       10 | t           | t        | t       | t            | ******** |          |&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt; &lt;br /&gt;
postgres=# \q&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 생성했던 계정 존재하지 않음.&lt;br /&gt;
* 컨테이너 자체를 삭제하는 경우 해당 베이스 이미지만 그대로 사용하기 때문에 더이상 데이터가 남아 있지 않음.&lt;br /&gt;
* 데이터를 종속시키기 위해서는 컨테이너 볼륨이나 로컬 컴퓨터에 데이터를 저장할 수 있는 공간을 따로 생성하여 외부에 저장할 수 있는 상태로 만들어야 함&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 볼륨과 마운트로 데이터 저장하는 방법 ==&lt;br /&gt;
* 데이터를 영구적으로 보관하는 방법 &lt;br /&gt;
&lt;br /&gt;
=== 모든 컨테이너를 종료하고 삭제 ===&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker stop $(docker ps -a -q)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt; &lt;br /&gt;
$ docker rm $(docker ps -a -q)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 데이터를 저장할 볼륨 생성 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker volume create pgdata &lt;br /&gt;
pgdata&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* -v 옵션으로 생성된 볼륨 지정&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=cafe1234 -d -v pgdata:/var/lib/postgresql/data postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 다시 컨테이너에 접속하여 계정을 생성해 보고, 컨테이너 삭제후에 계정 정보가 남아 있는지 확인&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
docker exec -it postgres /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
root@608f0aa10061:/# psql -U postgres&lt;br /&gt;
psql (13.0 (Debian 13.0-1.pgdg100+1))&lt;br /&gt;
Type &amp;quot;help&amp;quot; for help.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
postgres=# CREATE USER dbcafe PASSWORD &amp;#039;cafe1234&amp;#039; SUPERUSER;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
postgres=# \du&lt;br /&gt;
                                   List of roles&lt;br /&gt;
 Role name |                         Attributes                         | Member of&lt;br /&gt;
-----------+------------------------------------------------------------+-----------&lt;br /&gt;
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}&lt;br /&gt;
 dbcafe  | Superuser                                                  | {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker stop postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker rm postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=cafe1234 -d -v pgdata:/var/lib/postgresql/data postgres&lt;br /&gt;
791984a503b91542aaadd48703c6b694e745b3004c3a7c2f00d0eedf91cf27ea&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker exec -it postgres /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
root@791984a503b9:/# psql -U postgres&lt;br /&gt;
psql (13.0 (Debian 13.0-1.pgdg100+1))&lt;br /&gt;
Type &amp;quot;help&amp;quot; for help.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
postgres=# \du&lt;br /&gt;
                                   List of roles&lt;br /&gt;
 Role name |                         Attributes                         | Member of&lt;br /&gt;
-----------+------------------------------------------------------------+-----------&lt;br /&gt;
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}&lt;br /&gt;
 dbcafe    | Superuser                                                  | {}&lt;br /&gt;
&lt;br /&gt;
postgres=# \q&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 컨테이너를 삭제했음에도 불구하고 계정정보가 저장 되어 있는것을 확인&lt;br /&gt;
* 그렇다면 볼륨 정보는 어디에 저장되어 있을까?&lt;br /&gt;
&lt;br /&gt;
=== 저장된 볼륨정보 조회 ===&lt;br /&gt;
* Docker 볼륨 조회 &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$  docker volume list&lt;br /&gt;
local               pgdata&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker volume inspect pgdata&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;CreatedAt&amp;quot;: &amp;quot;2020-10-09T07:13:50Z&amp;quot;,&lt;br /&gt;
        &amp;quot;Driver&amp;quot;: &amp;quot;local&amp;quot;,&lt;br /&gt;
        &amp;quot;Labels&amp;quot;: {},&lt;br /&gt;
        &amp;quot;Mountpoint&amp;quot;: &amp;quot;/var/lib/docker/volumes/pgdata/_data&amp;quot;,&lt;br /&gt;
        &amp;quot;Name&amp;quot;: &amp;quot;pgdata&amp;quot;,&lt;br /&gt;
        &amp;quot;Options&amp;quot;: {},&lt;br /&gt;
        &amp;quot;Scope&amp;quot;: &amp;quot;local&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 각 운영체제별로 상의할 수 있음&lt;br /&gt;
* 위 명령으로 볼륨 리스트와 해당 볼륨의 위치 및 상세 정보 확인&lt;br /&gt;
&lt;br /&gt;
=== 해당 볼륨 삭제 후 로컬 컴퓨터에 디렉토리에 데이터 저장하는 방법 ===&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker volume remove pgdata&lt;br /&gt;
Error response from daemon: remove pgdata: volume is in use - [791984a503b91542aaadd48703c6b694e745b3004c3a7c2f00d0eedf91cf27ea] &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* docker 컨테이너가 실행되고 있는 상태에서 볼륨을 삭제하는 경우에는 에러가 발생하기 때문에 컨테이너를 종료하고 볼륨을 삭제한다. &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker stop postgres&lt;br /&gt;
postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker rm postgres&lt;br /&gt;
postgres&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker volume remove pgdata&lt;br /&gt;
pgdata&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* docker에서 모든 볼륨을 삭제하고 싶다면 &amp;quot;docker volume prune&amp;quot; 명령을 입력한다. &lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$  docker volume prune&lt;br /&gt;
WARNING! This will remove all local volumes not used by at least one container.&lt;br /&gt;
Are you sure you want to continue? [y/N] y &lt;br /&gt;
Total reclaimed space: 7.402GB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ mkdir pgdata&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=cafe1234 -d -v ~/pgdata:/var/lib/postgresql/data postgres&lt;br /&gt;
06006c5d1160b471eaeb73b429e6a08329f9087a7f32b86aab811fe7e4246a65&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 상대경로에 pgdata라는 디렉토리 생성 &lt;br /&gt;
# -v 옵션으로 해당 디렉토리를 마운트&lt;br /&gt;
# 해당 디렉터리로 이동하여 postgresql 데이터가 저장되어 있는지 확인.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ cd pgdata&lt;br /&gt;
$ ls -l&lt;br /&gt;
total 112&lt;br /&gt;
-rw-------   1 dbcafe  staff      3 10  9 16:35 PG_VERSION&lt;br /&gt;
drwx------   5 dbcafe  staff    160 10  9 16:35 base&lt;br /&gt;
drwx------  59 dbcafe  staff   1888 10  9 16:35 global&lt;br /&gt;
drwx------   2 dbcafe  staff     64 10  9 16:35 pg_commit_ts&lt;br /&gt;
drwx------   2 dbcafe  staff     64 10  9 16:35 pg_dynshmem&lt;br /&gt;
-rw-------   1 dbcafe  staff   4782 10  9 16:35 pg_hba.conf&lt;br /&gt;
-rw-------   1 dbcafe  staff   1636 10  9 16:35 pg_ident.conf&lt;br /&gt;
drwx------   5 dbcafe  staff    160 10  9 16:35 pg_logical&lt;br /&gt;
drwx------   4 dbcafe  staff    128 10  9 16:35 pg_multixac&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 실제 로컬 컴퓨터에 postgresql를 사용하기 위한 데이터가 저장되어 있는 것을 확인할 수 있다. &lt;br /&gt;
* 이 상태에서 위와 동일한 방법으로 진행하면 컨테이너 내부에서 변경된 모든 데이터는 해당 디렉토리가 삭제되지 않는 이상 사라지지 않으며, 설정파일을 직접 수정하여 적용할 수도 있다. &lt;br /&gt;
* CIFS나 NFS를 통한 외부 스토리지에 저장하여 데이터를 저장하는 방식도 가능하다.&lt;br /&gt;
* 리눅스의 경우 해당 디렉토리에 권한문제(퍼미션)로 인해 접속이 되지 않을 수도 있다. 이 경우 root 권한으로 접속해서 볼 수 있으며, 만약 디렉토리를 만들었음에도 불구하고 데이터가 저장되지 않거나 컨테이너가 재대로 실행되지 않은 경우, 소유자 권한 오류로 인해서 docker 컨테이너가 해당 디렉토리에 접근하지 못할 가능성이 크다. 따라서 이런 에러가 발생하는 경우에는 소유자 권한을 변경하면 정상적으로 사용할 수 있다.&lt;br /&gt;
&amp;lt;source lang=shell&amp;gt;&lt;br /&gt;
$ sudo chown -R 200:200 some_dir &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 컨테이너를 실행할 때, 디렉토리를 마운트 하는 경우에 절대경로를 사용하는 것을 추천한다.&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>