아래 명령어를 뜯어보자.
docker run -p 5432:5432 -d \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_DB=stripe-example \
-v pgdata:/var/lib/postgresql/data \
postgres
docker run
Create and run a new container from an image.
이미지에서 새로운 컨테이너를 생성하고 실행하는 명령어로,
docker container run
의 alias 이다.
-p 5432:5432
Publish a container's port(s) to the host
컨테이너의 포트를 호스트의 포트로 'publish' 한다고 한다.
-d
Run container in background and print container ID
'--detach' 의 alias 이다.
'run container in background' 라는 말에서, 그럼 백그라운드에서 실행되지 않기도 한다는 말인가? 라는 의문이 들어 찾아보았다.
그렇다. -d 옵션을 주지 않고 실행한다면 해당 터미널 자체가 컨테이너 인스턴스로 사용되기 때문에 더 이상 추가적인 명령어를 입력할 수 없게되고, 해당 터미널을 종료하면 컨테이너의 실행도 종료되게 된다.
-e POSTGRES_PASSWORD=postgres
Set environment variables
환경변수를 설정할 수 있도록 하는 옵션이다.
POSTGRES_PASSWORD
This environment variable is required for you to use the PostgreSQL image. It must not be empty or undefined. This environment variable sets the superuse password for PostgreSQL.
The default superuser is defined by the POSTGRES_USER environment variable.
superuser의 비밀번호를 설정하는 환경변수이다.
PGPASSWORD라는 환경변수와는 별개라고 하니 주의.
-e POSTGRES_USER=postgres
POSTGRES_USER
This optional environment variable is used in conjunction with POSTGRES_PASSWORD to set a user and its password.
This variable will create the specified user with superuser power and a database with the same name.
superuser 권한을 가진 user를 생성함과 동시에 동일한 이름의 데이터베이스를 생성하는데에 사용된다. 명시하지 않으면 postgres
가 기본으로 사용된다고 한다.
-e POSTGRES_DB=stripe-example
This optional environment variable can be used to define a different name for the default database that is created when the image is first started.
-v pgdata:/var/lib/postgresql/data
Bind mount a volume
: 을 기준으로 앞쪽에는 호스트의 경로, 뒷쪽에는 컨테이너의 경로를 의미한다. 호스트 컴퓨터 파일시스템의 특정 경로를 컨테이너 파일시스템의 특정 경로로 마운트 시켜준다.
마운트와 볼륨에 대해서는 따로 더 알아보자.
postgres
postgres 이미지를 사용하겠다는 의미이다.
Docker PostgreSQL Tutorial with Persistent Data - Ben Awad, Youtube