欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker部署postgresql的方法實(shí)現(xiàn)

 更新時(shí)間:2025年01月10日 11:01:05   作者:Aderversa  
本文主要介紹了Docker部署postgresql的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

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)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Docker使用nodejs鏡像構(gòu)建express服務(wù)的方法

    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-07
  • Docker鏡像創(chuàng)建的方法

    Docker鏡像創(chuàng)建的方法

    本文給大家匯總介紹了docker中鏡像創(chuàng)建的幾種方法,包括基于已有鏡像創(chuàng)建、基于本地模板創(chuàng)建以及基于Dockerfile創(chuàng)建。有需要的小伙伴可以參考下
    2018-08-08
  • Docker安裝Redis并使用Another?Redis?Desktop?Manager連接的方法

    Docker安裝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-09
  • Docker自動(dòng)化構(gòu)建Automated Build實(shí)現(xiàn)過(guò)程圖解

    Docker自動(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)境的過(guò)程

    這篇文章主要介紹了docker中搭建?PHP8?+?Apache?環(huán)境,文章以安裝?pdo-mysql?擴(kuò)展為例介紹php安裝擴(kuò)展的詳細(xì)過(guò)程,需要的朋友可以參考下
    2022-03-03
  • docker?gitea?drone實(shí)現(xiàn)超輕量級(jí)CI?CD實(shí)戰(zhàn)詳解

    docker?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-10
  • docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn)

    docker-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-07
  • Windows的docker刪除容器后WSL2磁盤(pán)空間不釋放的問(wèn)題的解決方法

    Windows的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-12
  • docker在ubuntu14.04下的安裝步驟

    docker在ubuntu14.04下的安裝步驟

    這篇文章主要介紹了docker在ubuntu14.04下的安裝步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Docker Compose 搭建簡(jiǎn)單的Python網(wǎng)絡(luò)應(yīng)用程序(步驟詳解)

    Docker 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

最新評(píng)論