|
vor 7 Jahren | |
---|---|---|
nginx | vor 7 Jahren | |
node | vor 7 Jahren | |
postgres | vor 7 Jahren | |
.gitignore | vor 7 Jahren | |
Dockerfile | vor 7 Jahren | |
README.md | vor 7 Jahren |
From https://www.codeschool.com/screencasts/build-a-node-app-with-postgres-and-docker
Run nginx
docker run -p 81:80 --name web nginx
docker run -p 81:80 --name web --rm nginx
docker run -p 81:80 --name web -d nginx
foreground, mounting the nginx/html
directory:
docker run --rm \
-p 81:80 \
--name web \
--mount type=bind,source="$PWD"/nginx/html,target=/usr/share/nginx/html \
nginx
# or...
docker run --rm \
-p 81:80 \
--name web \
-v "$PWD"/nginx/html,/usr/share/nginx/html \
nginx
Enter the container: docker exec -it web /bin/bash
Build a local image from the Dockerfile
docker build -t osinet/nginx:latest .
Run the newly built image:
docker run --rm \
-p 81:80 \
--name web \
--mount type=bind,source=$PWD/nginx/html,target=/usr/share/nginx/html \
osinet/nginx
List images
docker images
docker images -a
docker images osinet/nginx
mkdir node
cd node
# edit Dockerfile
docker build -t node-app .
docker run -p 8888:8888 \
-v $PWD/node/src:/usr/src/app/src \
--name voting-node \
--rm \
node-app
Build and run the container
mkdir postgres
cd postgres
# edit Dockerfile
docker build -t node-pg .
docker run -p 5432:5432 \
--name voting-pg \
--rm \
node-pg
Enter the container with a PG client:
# Without the -U, PG will try to use undeclared used root.
docker container exec -it voting-pg psql -U postgres
In psql
in the container, list databases, create table, list tables:
\l
CREATE TABLE votes (
id INTEGER PRIMARY KEY,
number_of_votes INTEGER,
option_name VARCHAR(20)
);
\dt
Now we have a table:
List of relations
Schema | Name | Type | Owner
--------+-------+-------+----------
public | votes | table | postgres
(1 row)
Insert initial data
INSERT INTO votes (id, number_of_votes, option_name) VALUES (1, 13, 'sandwiches');
INSERT INTO votes (id, number_of_votes, option_name) VALUES (2, 21, 'tacos');
SELECT * FROM votes;
Results:
id | number_of_votes | option_name
----+-----------------+-------------
1 | 0 | sandwiches
2 | 0 | tacos
(2 rows)
To reach PG, the app needs to know the address. To get to it from inside the
container where the app runs, look for the gateway
value in the results of
docker bridge
:
[...snip...]
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
[...snip...]
We then know that the IP to use in client.connect()
will be 172.17.0.1
, at
least in the current configuration. Will probably have to come from the outside
for more flexibility.
Posting data to update:
curl -d"yourVote=sandwiches" http://localhost:8888/vote
curl -d"yourVote=tacos" http://localhost:8888/vote
curl -d"yourVote=invalid" http://localhost:8888/vote