启动Docker容器-获取容器内的数据库(PostgreSQL)数据
這篇文章的內容
Docker 容器启动 – 获取容器中 PostgreSQL 数据库的数据的一系列流程备忘录。
大致的流程
-
- 使用Docker启动PostgreSQL容器
-
- 将数据插入到上述步骤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