$docker pull postgres
$docker run -e POSTGRES_PASSWORD=password postgres
jdbc:postgresql://localhost:5432/postgres?user=postgres&password=password
$docker run -p 5432:5432 -e POSTGRES_PASSWORD=password postgres
$docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES65d9163eece2 postgres "docker-entrypoint.s…" 27 minutes ago Up 27 minutes 0.0.0.0:5432->5432/tcp optimistic_hellman
root@65d9163eece2:/# psql -U postgrespostgres=CREATE DATABASE TEST;CREATE TABLE PERSON( ID INTEGER PRIMARY KEY, FIRST_NAME VARCHAR(1000), LAST_NAME VARCHAR(1000));...
使用Docker卷持久化数据只要我们使用相同的容器,我们的基本设置就可以使用,每次需要重启时,docker容器都会停止/启动。如果再次使用docker run,则会创建一个新的空容器,并且我们将丢失数据。实际上,默认情况下,Docker将数据保留在临时目录中。现在,我们将学习如何修改此卷映射。第一项任务是检查我们的容器,以查看数据库使用了哪个卷:
$docker inspect -f "{{ .Mounts }}" 65d9163eece2
[{volume f1033d3 /var/lib/docker/volumes/f1033d3/_data /var/lib/postgresql/data local true }]
$docker run -v C:\docker-db-volume:/var/lib/postgresql/data -e POSTGRES_PASSWORD=password postgres
在生产中使用DockerDocker Compose非常适合共享配置并将容器作为无状态服务进行管理。如果服务失败或无法处理工作量,我们可以将Docker Compose配置为自动创建新容器。这对于为REST后端构建生产集群非常有用,该集群在设计上是无状态的。但是,数据库是有状态的,并且它们的管理更为复杂:让我们回顾一下不同的上下文。让我们假设我们正在构建一个非关键环境,用于测试或生产,该环境可以容忍停机时间(在部署,备份或故障期间)。在这种情况下,我们不需要高可用性集群,我们可以简单地将Docker Compose用于单实例数据库:
version: '3'services: database: image: 'postgres' deploy: mode: global environment: - POSTGRES_PASSWORD=password ports: - "5432:5432" volumes: - "C:/docker-db-volume:/var/lib/postgresql/data"