Docker部署postgresql的方法實(shí)現(xiàn)
postgresql數(shù)據(jù)庫(kù)在Docker中的鏡像的名稱(chēng)為postgres
,可以從DockerHub中pull下來(lái),如果pull不下來(lái)那么很大概率是網(wǎng)絡(luò)問(wèn)題導(dǎo)致的,這時(shí)候你可能需要在網(wǎng)上找一些能用的鏡像源,以成功拉取postgres
鏡像。
有了postgres
的鏡像之后,你就可以在本地的Docker創(chuàng)建一個(gè)postgres
的容器并運(yùn)行。我們有兩種方式來(lái)創(chuàng)建容器:
- 直接使用命令行來(lái)創(chuàng)建
postgres
的容器并運(yùn)行; - 使用
docker-compose
來(lái)創(chuàng)建postgres
的容器并運(yùn)行;
這里先介紹使用命令行的方式來(lái)創(chuàng)建postgres
容器的方式:
docker run -d \ --name postgres-exprdb \ -p 5432:5432 \ -e POSTGRES_PASSWORD=123456 \ -e POSTGRES_USER=aderversa \ -e POSTGRES_DB=testdb \ -v ~/postgresql/data:/var/lib/postgresql/data \ postgres
-e
是用來(lái)設(shè)置postgres
容器中環(huán)境變量的值的,有些特殊的環(huán)境變量將會(huì)影響到啟動(dòng)后的postgresql
的一些參數(shù),比如postgresql
數(shù)據(jù)庫(kù)的密碼、用戶等等。具體一些環(huán)境變量的含義可以查看dockerhub中有關(guān)于環(huán)境變量的介紹,本文的最后也會(huì)介紹一些環(huán)境變量的含義。-p
將PostgreSQL的5432端口 暴露到宿主機(jī)的5432端口,方便我們?cè)谕獠吭L問(wèn)容器內(nèi)的PostgreSQL服務(wù)。-v
將容器內(nèi)的/var/lib/postgresql/data
文件夾掛載到宿主機(jī)的~/postgresql/data
文件夾下,這樣數(shù)據(jù)庫(kù)中的數(shù)據(jù)就不會(huì)因?yàn)槲覀儎h除了容器而丟失。你需要自己定義好這個(gè)數(shù)據(jù)文件夾該掛載到自己主機(jī)的什么地方上,這里我給出的值僅做參考。--name postgres-exprdb
指定創(chuàng)建的PostgreSQL容器的名字。-d
表示該容器在后臺(tái)運(yùn)行,并打印創(chuàng)建容器的ID到控制臺(tái)。postgres
是我們所使用的鏡像。
運(yùn)行上述命令,使用docker ps
查看容器狀態(tài):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b1f5d4521cd0 postgres "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 0.0.0.0:5432->5432/tcp postgres-exprdb
可以看見(jiàn),容器已經(jīng)在后臺(tái)運(yùn)行了。之后,我們可以使用別的什么工具去訪問(wèn)已經(jīng)創(chuàng)建好的testdb
數(shù)據(jù)庫(kù),用定義好的特權(quán)用戶aderversa
,以及指定好的密碼123456
。
IP已知,端口已知,用戶名和密碼都有了,那么你就可以用你能想象到的方式去連接這個(gè)PostgreSQL數(shù)據(jù)庫(kù)啦。
使用docker-compose來(lái)部署
相比于在命令行中寫(xiě)冗長(zhǎng)的命令,我更喜歡將容器的配置寫(xiě)到docker-compose.yaml
文件中,然后一行:
docker compose -f docker-compose.yaml -p package_name up -d
-f
指定要要操作的文件。-p
指定項(xiàng)目的名稱(chēng)。up
是創(chuàng)建并啟動(dòng)容器的命令。-d
表示容器在后臺(tái)啟動(dòng)。
比如,我編寫(xiě)了一個(gè)docker-compose.yaml
文件:
version: "3.8" services: database_expr: image: postgres:latest container_name: postgres-expr restart: on-failure:3 ports: - 5432:5432 volumes: - ./db:/var/lib/postgresql/data healthcheck: test: [ "CMD", "pg_isready" ] interval: 10s timeout: 5s retries: 5 environment: - POSTGRES_PASSWORD=123456 - POSTGRES_USER=aderversa - POSTGRES_DB=testdb
直接對(duì)其進(jìn)行操作就可以創(chuàng)建好容器并啟動(dòng),用戶不需要關(guān)心里面有什么配置。甚至如果你覺(jué)得使用docker compose
的命令行來(lái)啟動(dòng)不夠抽象,那么你可以將它編寫(xiě)入shell腳本中,用戶直接運(yùn)行腳本,只要用戶安裝了Docker環(huán)境,就可以安裝PostgreSQL成功,他甚至不需要關(guān)心Docker命令應(yīng)該如何使用。
進(jìn)入postgres容器中執(zhí)行SQL
使用命令:
docker ps
查找出剛才創(chuàng)建的PostgreSQL容器的ID:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dcf5e3c0ff7f postgres:latest "docker-entrypoint.s…" 13 hours ago Up 13 hours (healthy) 0.0.0.0:5432->5432/tcp postgres-expr
獲得container_id = dcf5e3c0ff7f
,接著我們使用以下命令進(jìn)入容器的bash
中,方便在操作容器:
docker exec -it dcf5e3c0ff7f /bin/bash
注意,如果是在Windows下執(zhí)行這條命令的時(shí)候,使用
Git Bash
來(lái)執(zhí)行可能會(huì)因?yàn)榻K端的一些問(wèn)題執(zhí)行失敗,此時(shí)需要更換一下執(zhí)行命令的終端,比如:PowerShell。
進(jìn)入到容器中是這個(gè)樣子的:
> docker exec -it dcf5e3c0ff7f /bin/bash root@dcf5e3c0ff7f:/#
第一行是在PowerShell中執(zhí)行的,而第二行則是PostgreSQL容器中運(yùn)行的bash進(jìn)程。
接著我們就可以使用:
psql [OPTION]... [DBNAME [USERNAME]]
這里介紹連接數(shù)據(jù)庫(kù)需要使用的OPTION選項(xiàng),具體的你可以使用psql --help
來(lái)查看:
-h
指定PostgreSQL數(shù)據(jù)庫(kù)的IP地址。-p
指定PostgreSQL數(shù)據(jù)庫(kù)的端口號(hào)。-U
指定登錄到數(shù)據(jù)庫(kù)的用戶名,不指定默認(rèn)就是root
。-w
從不提示輸入密碼,字面意思,不需要輸入密碼來(lái)進(jìn)行訪問(wèn)數(shù)據(jù)庫(kù),默認(rèn)是不需要輸入密碼的。-W
強(qiáng)制密碼輸入。
按照這個(gè)用法,我們可以用以下兩種方式連接數(shù)據(jù)庫(kù):
# 這里由于我們?cè)趧?chuàng)建容器的時(shí)候指定的特權(quán)用戶是aderversa,因此root被擠占掉了 # 用戶名對(duì)于我這里來(lái)說(shuō)是必須設(shè)置的。 psql -p 127.0.0.1 -p 5432 -U aderversa testdb
或者省事一點(diǎn),直接使用:
psql testdb aderversa
執(zhí)行成功后我們就能夠進(jìn)入psql
的命令行:
psql (17.2 (Debian 17.2-1.pgdg120+1)) Type "help" for help. testdb=#
psql的使用
這里我們并不知道如何使用這個(gè)命令行,它提示我們可以使用help
來(lái)獲得幫助,那么就執(zhí)行一波help,得到了以下信息:
You are using psql, the command-line interface to PostgreSQL. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit
這里它告訴我們:
\copyright
,可以PostgreSQL DDMS的一些條款,里面大概是說(shuō):不管你出于何種目的,該軟件和其文檔都是允許你使用、復(fù)制、修改和發(fā)布的,并且是不需要任何費(fèi)用,不需要修改的同意…看起來(lái)是非常寬松的聲明,畢竟PostgreSQL遵循的是BSD協(xié)議。\h
顯示SQL命令,比如CREATE TABLE
ALTER TABLE
…。\?
顯示psql的命令,這里面還是非常多命令的,大多都是用來(lái)查看數(shù)據(jù)庫(kù)的狀態(tài)的,比如存在什么表、數(shù)據(jù)庫(kù)、視圖之類(lèi)的。這里介紹一些常用的、簡(jiǎn)單的命令:\l
,列出所有數(shù)據(jù)庫(kù);\c[onnect]
,連接到數(shù)據(jù)庫(kù)某個(gè)數(shù)據(jù)庫(kù),如果先前有連接到某個(gè)數(shù)據(jù)庫(kù)那么這個(gè)操作就是更換連接的數(shù)據(jù)庫(kù);\dt
,查看正在使用的數(shù)據(jù)庫(kù)中存在哪些表(注意,默認(rèn)創(chuàng)建的表似乎是不會(huì)列出來(lái)的);
\g
執(zhí)行psql的上一個(gè)命令。\q
退出psql。
以上就是psql的基本用法了,你可以按照自己的在上面執(zhí)行SQL語(yǔ)句,比如:
create table user ( id int primary key );
注意SQL命令以;
結(jié)尾就可以了。
創(chuàng)建完成后可以使用:
\dt
來(lái)查看你是否創(chuàng)建成功。
接下來(lái)就是你發(fā)揮創(chuàng)造力的時(shí)候了,自己嘗試著使用psql吧。
補(bǔ)充postgres容器的環(huán)境變量
POSTGRES_PASSWORD
,必要的環(huán)境變量。這個(gè)環(huán)境變量將設(shè)置PostgreSQL容器中特權(quán)用戶的密碼。如果你要使用PostgreSQL鏡像,讓它以容器的形式的運(yùn)行,那么這個(gè)環(huán)境變量就必須要設(shè)置,它一定不能夠?yàn)榭栈蛘呶炊x。默認(rèn)的特權(quán)用戶將由POSTGRES_USER
來(lái)定義。POSTGRES_USER
,可選的環(huán)境變量。設(shè)置PostgreSQL容器中的特權(quán)用戶名,需要與POSTGRES_PASSWORD
一起使用,以此設(shè)置好特權(quán)用戶的名字和密碼。如果該環(huán)境變量未被指定,那么默認(rèn)的特權(quán)用戶名為postgres
。POSTGRES_DB
,可選的環(huán)境變量。定義容器首次運(yùn)行創(chuàng)建的默認(rèn)數(shù)據(jù)庫(kù)的名字。如果該環(huán)境變量未被使用,那么該環(huán)境變量的值等于POSTGRES_USER
的值。POSTGRES_INITDB_ARGS
,可選的環(huán)境變量。大概最終是以這種方式被利用:postgres initdb ${POSTGRES_INITDB_ARGS}
。POSTGRES_INITDB_WALDIR
,可選的環(huán)境變量。定義PostgreSQL事務(wù)日志的位置。默認(rèn)的事務(wù)日志的位置是PostgreSQL主數(shù)據(jù)文件夾(PGDATA
指定)下的一個(gè)子文件夾。POSTGRES_HOST_AUTH_METHOD
,可選的環(huán)境變量。(個(gè)人理解,似乎是與密碼摘要相關(guān)的東西,這一般不需要我們關(guān)注,如果有興趣可以去PostgreSQL: Documentation: 14: 21.5. Password Authentication了解一下)。PGDATA
,可選的環(huán)境變量。定義PostgreSQL主數(shù)據(jù)文件夾的位置,默認(rèn)是/var/lib/postgresql/data
,如果有調(diào)整位置的需求那么可以按需求設(shè)置該變量的值。
到此這篇關(guān)于Docker部署postgresql的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker部署postgresql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- PostgreSQL Docker部署+SpringBoot集成方式
- Docker環(huán)境實(shí)現(xiàn)PostgreSQL自動(dòng)備份的流程步驟
- 從Docker容器中備份整個(gè)PostgreSQL的操作步驟
- Docker安裝PostgreSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟
- 使用docker compose啟動(dòng)postgresql的示例代碼
- 在docker上部署postgreSQL主從的超詳細(xì)步驟
- Docker修改Postgresql密碼的方法詳解
- Docker如何安裝PostgreSQL
- 如何使用Dockerfile創(chuàng)建PostgreSQL數(shù)據(jù)庫(kù)
- docker容器中登陸并操作postgresql的實(shí)現(xiàn)
- 一步步教你用docker部署postgreSQL數(shù)據(jù)庫(kù)
相關(guān)文章
Docker使用nodejs鏡像構(gòu)建express服務(wù)的方法
這篇文章主要介紹了Docker使用nodejs鏡像構(gòu)建express服務(wù),主要包括nodejs容器的啟動(dòng),安裝nodejs第三方依賴(lài)模塊及啟動(dòng)nodejs服務(wù)的相關(guān)操作,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Docker安裝Redis并使用Another?Redis?Desktop?Manager連接的方法
Redis?是一個(gè)使用C語(yǔ)言編寫(xiě)的、開(kāi)源的(遵守?BSD?協(xié)議)、高性能的、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value的NoSQL數(shù)據(jù)庫(kù),這篇文章主要介紹了Docker安裝Redis并使用Another?Redis?Desktop?Manager連接,需要的朋友可以參考下2022-09-09Docker自動(dòng)化構(gòu)建Automated Build實(shí)現(xiàn)過(guò)程圖解
這篇文章主要介紹了Docker自動(dòng)化構(gòu)建Automated Build實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10教你在docker?中搭建?PHP8?+?Apache?環(huán)境的過(guò)程
這篇文章主要介紹了docker中搭建?PHP8?+?Apache?環(huán)境,文章以安裝?pdo-mysql?擴(kuò)展為例介紹php安裝擴(kuò)展的詳細(xì)過(guò)程,需要的朋友可以參考下2022-03-03docker?gitea?drone實(shí)現(xiàn)超輕量級(jí)CI?CD實(shí)戰(zhàn)詳解
這篇文章主要為大家介紹了docker?gitea?drone實(shí)現(xiàn)超輕量級(jí)CI?CD實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn)
本文主要介紹了docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Windows的docker刪除容器后WSL2磁盤(pán)空間不釋放的問(wèn)題的解決方法
很多同學(xué)拉取鏡像使用一段時(shí)間后發(fā)現(xiàn) C 盤(pán)快滿了,把之前用過(guò)的鏡像和容器刪除,發(fā)現(xiàn) WSL 掛載目錄的虛擬磁盤(pán)大小沒(méi)有變化,非常的奇怪,所以本文介紹了Windows的docker刪除容器后WSL2磁盤(pán)空間不釋放的問(wèn)題的解決方法,需要的朋友可以參考下2024-12-12Docker Compose 搭建簡(jiǎn)單的Python網(wǎng)絡(luò)應(yīng)用程序(步驟詳解)
在這個(gè)頁(yè)面上,你可以建立一個(gè)簡(jiǎn)單的Python網(wǎng)絡(luò)應(yīng)用程序,運(yùn)行在Docker Compose上,這篇文章主要介紹了Docker Compose 搭建簡(jiǎn)單的Python網(wǎng)絡(luò)應(yīng)用程序,需要的朋友可以參考下2022-07-07