You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 304f071
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: docs/getting-started.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -23,7 +23,7 @@ The course is suitable for anyone interested in Docker or containerization and h
23
23
The 2024 edition of the course starts officially on 11th March. The material is currently being updated. At the time of writing (11th March) the following parts have already been updated
24
24
25
25
- Part 1
26
-
- Part 2 up to and including chapter _Docker networking_
26
+
- Part 2
27
27
28
28
You may continue already beyond the updated material but beware, there might be some outdated content!
Copy file name to clipboardExpand all lines: docs/part-2/section-3.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -252,8 +252,8 @@ There is again a button (and a form!) in the frontend that you can use to ensure
252
252
253
253
Submit the docker-compose.yml
254
254
255
-
* TIP: When configuring the database, you might need to destroy the automatically created volumes. Use commands `docker volume prune`, `docker volume ls` and `docker volume rm` to remove unused volumes when testing. Make sure to remove containers that depend on them beforehand.
256
-
255
+
TIPS:
256
+
* When configuring the database, you might need to destroy the automatically created volumes. Use commands `docker volume prune`, `docker volume ls` and `docker volume rm` to remove unused volumes when testing. Make sure to remove containers that depend on them beforehand.
257
257
* `restart: unless-stopped` can help if the Postgres takes a while to get ready
258
258
259
259

@@ -291,9 +291,9 @@ It might be Nginx configuration problem. Ensure there is a trailing / on the bac
291
291
292
292
:::info Exercise 2.8
293
293
294
-
Add [Nginx](https://hub.docker.com/_/nginx) to the example to work as a [reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) in front of the example app frontend and backend. According to Wikipedia
294
+
In this exercise, you shall add [Nginx](https://hub.docker.com/_/nginx) to work as a [reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) in front of the example app frontend and backend.
295
295
296
-
_A reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client, appearing as if they originated from the reverse proxy server itself._
296
+
According to Wikipedia _a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client, appearing as if they originated from the reverse proxy server itself._
297
297
298
298

299
299
@@ -303,7 +303,7 @@ The idea is that a browser makes _all_ requests to _http://localhost_. If the re
303
303
304
304
So, at the end, you should see that the frontend is accessible simply by going to <http://localhost>. All buttons, except the one labeled _Exercise 2.8_ may have stopped working, do not worry about them, we shall fix that later.
305
305
306
-
The following file should be set to _/etc/nginx/nginx.conf_ inside the nginx container. You can use a file bind mount where the contents of the file is the following:
306
+
The following file should be set to _/etc/nginx/nginx.conf_ inside the Nginx container. You can use a file bind mount where the contents of the file is the following:
Copy file name to clipboardExpand all lines: docs/part-2/section-4.md
+40-36Lines changed: 40 additions & 36 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,19 +2,19 @@
2
2
title: 'Containers in development'
3
3
---
4
4
5
-
Containers are not only great in production. They can be used in development environments as well and offer a number of benefits. The same _works-on-my-machine_ problem is faced often when a new developer joins the team. Not to mention the headache of switching runtime versions or a local database!
5
+
Containers are not only great in production. They can be used in development environments as well and offer several benefits. The same _works-on-my-machine_ problem is faced often when a new developer joins the team. Not to mention the headache of switching runtime versions or a local database!
6
6
7
-
For an example, a [software development team](https://toska.dev/) at the University of Helsinki has a fully [containerized development environment](https://ethesis.helsinki.fi/repository/handle/123456789/30995). The principle in all development projects is to have a setup so that a new developer only needs to install Docker and clone the project code from GitHub to get started. Not a single dependency is ever installed on to host machine, Git, Docker and the text editor of choice is only thing that is needed.
7
+
For example, a [software development team](https://toska.dev/) at the University of Helsinki has a fully [containerized development environment](https://ethesis.helsinki.fi/repository/handle/123456789/30995). The principle in all development projects is to have a setup so that a new developer only needs to install Docker and clone the project code from GitHub to get started. Not a single dependency is ever installed on to host machine, Git, Docker and the text editor of choice are the only things that are needed.
8
8
9
-
Even if your application is not completely containerized during development, containers can very helpful. For example, say you need MongoDB version 4.0.22 installed in port 5656. It's now a oneliner: "docker run -p 5656:27017 mongo:4.0.22" (MongoDB uses 27017 as default port).
9
+
Even if your application is not completely containerized during development, containers can be very helpful. For example, say you need MongoDB version 4.0.22 installed in port 5656. It's now an oneliner: "docker run -p 5656:27017 mongo:4.0.22" (MongoDB uses 27017 as the default port).
10
10
11
11
Let's containerize a NodeJS development environment. As you perhaps know [NodeJS](https://nodejs.org/en/) is a cross-platform JavaScript runtime that makes it possible to run JavaScript in your machine, servers and embedded devices, among many other platforms
12
12
13
-
The setup requires some expertise on the way how NodeJS works. Here is a simplified explanation if you're not familiar: libraries are defined in `package.json` and `package-lock.json` and installed with `npm install`. [npm](https://www.npmjs.com/) is the Node package manager.
13
+
The setup requires some expertise in the way how NodeJS works. Here is a simplified explanation if you're not familiar: libraries are defined in `package.json` and `package-lock.json` and installed with `npm install`. [npm](https://www.npmjs.com/) is the Node package manager.
14
14
15
-
To run application with the packages we have script defined in package.json that instructs Node to execute index.js, the main/entry file in this case the script is executed with `npm start`. The application already includes code to watch for changes in the filesystem and restart the application if any changes are detected.
15
+
To run the application with the packages we have a script defined in package.json that instructs Node to execute index.js, the main/entry file in this case the script is executed with `npm start`. The application already includes code to watch for changes in the filesystem and restart the application if any changes are detected.
16
16
17
-
The project "node-dev-env" is here [https://github.com/docker-hy/material-applications/tree/main/node-dev-env](https://github.com/docker-hy/material-applications/tree/main/node-dev-env). I already included a development Dockerfile and a helpful docker-compose.yml.
17
+
The project "node-dev-env" is here [https://github.com/docker-hy/material-applications/tree/main/node-dev-env](https://github.com/docker-hy/material-applications/tree/main/node-dev-env). We have already included a development Dockerfile and a helpful docker-compose.yml.
18
18
19
19
**Dockerfile**
20
20
```Dockerfile
@@ -50,46 +50,49 @@ And that's it. We'll use volume to copy all source code inside the volume so CMD
50
50
51
51
```console
52
52
$ docker compose up
53
-
Creating network "node-dev-env_default" with the default driver
54
-
Creating volume "node-dev-env_node_modules" with default driver
55
-
Building node-dev-env
56
-
Step 1/4 : FROM node:14
57
-
...
58
53
59
-
Attaching to node-dev-env
60
-
node-dev-env |
61
-
node-dev-env | > dev-env@1.0.0 start /usr/src/app
62
-
node-dev-env | > nodemon index.js
63
54
...
64
55
65
-
node-dev-env | App listening in port 3000
56
+
Attaching to node-dev-env
57
+
node-dev-env |
58
+
node-dev-env | > dev-env@1.0.0 start
59
+
node-dev-env | > nodemon index.js
60
+
node-dev-env |
61
+
node-dev-env | [nodemon] 2.0.7
62
+
node-dev-env | [nodemon] to restart at any time, enter `rs`
Great! The initial startup is a bit slow. It is a lot faster now that the image is already built. We can rebuild the whole environment whenever we want with `docker compose up --build`.
69
+
Great! The initial start-up is a bit slow. It is a lot faster now that the image is already built. We can rebuild the whole environment whenever we want with `docker compose up --build`.
69
70
70
-
Let's see if the application works. Use browser to access [http://localhost:3000](http://localhost:3000), it should do a simple plus calculation with the query params.
71
+
Let's see if the application works. Use the browser to access [http://localhost:3000](http://localhost:3000), it should do a simple plus calculation with the query params.
71
72
72
-
However, the calulation doesn't make sense! Let's fix the bug. I bet it's this line right here [https://github.com/docker-hy/material-applications/blob/main/node-dev-env/index.js#L5](https://github.com/docker-hy/material-applications/blob/main/node-dev-env/index.js#L5)
73
+
However, the calculation doesn't make sense! Let's fix the bug. I bet it's this line right here [https://github.com/docker-hy/material-applications/blob/main/node-dev-env/index.js#L5](https://github.com/docker-hy/material-applications/blob/main/node-dev-env/index.js#L5)
73
74
74
75
When I change the line, on my host machine the application instantly notices that files have changed:
75
76
76
77
```console
77
-
▶ docker compose up
78
-
Starting node-dev-env ... done
78
+
$ docker compose up
79
+
80
+
...
81
+
79
82
Attaching to node-dev-env
80
-
node-dev-env |
81
-
node-dev-env | > dev-env@1.0.0 start /usr/src/app
82
-
node-dev-env | > nodemon index.js
83
-
node-dev-env |
84
-
node-dev-env | [nodemon] 2.0.7
85
-
node-dev-env | [nodemon] to restart at any time, enter `rs`
node-dev-env | [nodemon] restarting due to changes...
94
+
node-dev-env | [nodemon] starting `node index.js`
95
+
node-dev-env | App listening in port 3000
93
96
```
94
97
95
98
And now a page refresh shows that our code change fixed the issue. The development environment works.
@@ -98,11 +101,12 @@ The next exercise can be extremely easy or extremely hard. Feel free to have fun
98
101
99
102
## Exercise 2.11
100
103
101
-
102
104
:::info Exercise 2.11
103
105
104
106
Select some of your own development projects and start utilizing containers in the development environment.
105
107
106
-
Explain what you have done. It can be anything, e.g., a support for docker-compose.yml to have services (such as databases) containerized or even a fully blown containerized development environment.
108
+
Explain what you have done. It can be anything, e.g., support for docker-compose.yml to have services (such as databases) containerized or even a fully blown containerized development environment.
107
109
108
110
:::
111
+
112
+
If you are interested in how to build a containerized development environment for a React/Node Single page web app, please have a look at the course [Full stack open](https://fullstackopen.com) which has one [chapter](https://fullstackopen.com/en/part12/basics_of_orchestration#development-in-containers) devoted to the topic.
0 commit comments