启动Docker容器-获取容器内的数据库(PostgreSQL)数据

這篇文章的內容

Docker 容器启动 – 获取容器中 PostgreSQL 数据库的数据的一系列流程备忘录。

大致的流程

    1. 使用Docker启动PostgreSQL容器

 

    1. 将数据插入到上述步骤1中启动的PostgreSQL数据库中

 

    使用应用程序(使用C#实现)检索上述步骤2中的数据

使用Docker启动PostgreSQL容器

docker-postgres
└ docker-compose.yml
# docker-composeで使用するバージョンを定義しています。2022年5月時点では、3.9が最新です。
version: '3.9'
# サービス (コンテナ) を定義します。
services:
  # 今回は postgres をサービスとして定義しました。
  postgres:
    # Docker Image は postgres:12-alpine を使います。postgres:12-alpine は postgres:12 と比較して、イメージサイズが小さくなっています。
    image: postgres:12-alpine
    # コンテナの名前を指定します。
    container_name: postgres
    # 環境変数を設定します。
    environment:
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=mydb
    # データの永続化
    volumes:
      # postgresディレクトリを/var/lib/postgresql/dataにマウントする
      - postgres:/var/lib/postgresql/data
    # ポートの指定(HOST:CONTAINER)
    ports:
      - 5432:5432
# データの永続化
volumes:
  postgres:

在docker-postgres目录中,执行下列命令来启动容器。

docker compose up -d

使用以下命令确认容器的状态。

docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED        STATUS        PORTS                    NAMES
0721f4708e47   postgres:12-alpine   "docker-entrypoint.s…"   26 hours ago   Up 26 hours   0.0.0.0:5432->5432/tcp   postgres

docker-compose.yml的引用代码位置

 

向 PostgreSQL 数据库中插入数据。

执行以下命令,进入容器内部。

docker exec -it 072 /bin/bash
0721f4708e47:/# 

以root用户登录

0721f4708e47:/# psql -U root -d mydb
psql (12.15)
Type "help" for help.

创建数据库

mydb=# create database test;
CREATE DATABASE

更改所使用的数据库

mydb=# \c test;
You are now connected to database "test" as user "root".

创建表格

test=# create table users (id integer,name varchar(10),age integer);
CREATE TABLE

将数据插入表格

test=# INSERT INTO users (id, name, age) VALUES (1, 'Mike', 30);
INSERT 0 1
test=# INSERT INTO users (id, name, age) VALUES (2, 'Lisa', 24);
INSERT 0 1
test=# INSERT INTO users (id, name, age) VALUES (3, 'Taro', 35);
INSERT 0 1

获取数据

test=# select * from users;
 id | name | age 
----+------+-----
  1 | Mike |  30
  2 | Lisa |  24
  3 | Taro |  35
(3 rows)

从 PostgreSQL 和 Docker 容器中退出

test-# \q
0721f4708e47:/# 
0721f4708e47:/# exit
exit

请使用以下资料作为参考

 

获取 Docker 容器内的数据库(PostgreSQL)数据

参考资料

 

using System;
using Npgsql; // NuGet を利用して導入

namespace ConnectPostgreSQL
{
    class Program
    {
        static void Main(string[] args)
        {
            ConnectService service = new ConnectService();
            service.Connect();
        }
    }

     class ConnectService
    {
         public void Connect()
        {
            string sql = "SELECT * FROM Users";
            string ConnectionString = "Server=localhost;"
                + "Port=5432;"
                + "Database=test;"
                + "User ID=root;"
                + " Password=secret;";

             try
            {
                using (var connection = new NpgsqlConnection(ConnectionString))
                {
                    connection.Open();
                     using( var cmd = new NpgsqlCommand(sql, connection))
                    {
                        using ( var reader = cmd.ExecuteReader())
                        {
                            while(reader.Read())
                            {
                                Console.WriteLine(reader["id"] + ":" + reader["name"] + ":" + reader["age"]);
                            }
                        }
                    }
                }
            } catch(Exception e)
            {
                Console.WriteLine(e.Message.ToString());
            }
        }
    }
}

应用程序(使用C#)的执行结果

1:Mike:30
2:Lisa:24
3:Taro:35
广告
将在 10 秒后关闭
bannerAds