Skip to content

Commit 0333419

Browse files
authored
Merge pull request #78 from krsy0411/krsy0411-translate
[번역] Workshop Part 1 ~ 4 문서 작성
2 parents 3f3994f + 6803069 commit 0333419

5 files changed

Lines changed: 448 additions & 9 deletions

File tree

index.html

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@
602602
>
603603
<a
604604
class="py-2 w-full truncate block"
605-
href="#/get-started/workshop/02_our_app/"
605+
href="#/get-started/workshop/02_our_app"
606606
title="Part 1: Containerize an application"
607607
>Part 1: Containerize an application</a
608608
>
@@ -612,7 +612,7 @@
612612
>
613613
<a
614614
class="py-2 w-full truncate block"
615-
href="#/get-started/workshop/03_updating_app/"
615+
href="#/get-started/workshop/03_updating_app"
616616
title="Part 2: Update the application"
617617
>Part 2: Update the application</a
618618
>
@@ -622,7 +622,7 @@
622622
>
623623
<a
624624
class="py-2 w-full truncate block"
625-
href="#/get-started/workshop/04_sharing_app/"
625+
href="#/get-started/workshop/04_sharing_app"
626626
title="Part 3: Share the application"
627627
>Part 3: Share the application</a
628628
>
@@ -632,7 +632,7 @@
632632
>
633633
<a
634634
class="py-2 w-full truncate block"
635-
href="#/get-started/workshop/05_persisting_data/"
635+
href="#/get-started/workshop/05_persisting_data"
636636
title="Part 4: Persist the DB"
637637
>Part 4: Persist the DB</a
638638
>
@@ -642,7 +642,7 @@
642642
>
643643
<a
644644
class="py-2 w-full truncate block"
645-
href="#/get-started/workshop/06_bind_mounts/"
645+
href="#/get-started/workshop/06_bind_mounts"
646646
title="Part 5: Use bind mounts"
647647
>Part 5: Use bind mounts</a
648648
>
@@ -652,7 +652,7 @@
652652
>
653653
<a
654654
class="py-2 w-full truncate block"
655-
href="#/get-started/workshop/07_multi_container/"
655+
href="#/get-started/workshop/07_multi_container"
656656
title="Part 6: Multi-container apps"
657657
>Part 6: Multi-container apps</a
658658
>
@@ -662,7 +662,7 @@
662662
>
663663
<a
664664
class="py-2 w-full truncate block"
665-
href="#/get-started/workshop/08_using_compose/"
665+
href="#/get-started/workshop/08_using_compose"
666666
title="Part 7: Use Docker Compose"
667667
>Part 7: Use Docker Compose</a
668668
>
@@ -672,7 +672,7 @@
672672
>
673673
<a
674674
class="py-2 w-full truncate block"
675-
href="#/get-started/workshop/09_image_best/"
675+
href="#/get-started/workshop/09_image_best"
676676
title="Part 8: Image-building best practices"
677677
>Part 8: Image-building best practices</a
678678
>
@@ -682,7 +682,7 @@
682682
>
683683
<a
684684
class="py-2 w-full truncate block"
685-
href="#/get-started/workshop/10_what_next/"
685+
href="#/get-started/workshop/10_what_next"
686686
title="Part 9: What next"
687687
>Part 9: What next</a
688688
>
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
# Containerize an application
2+
3+
이 가이드의 나머지 부분에서는 Node.js에서 실행되는 간단한 할 일 목록 관리자를 사용하게 됩니다. Node.js에 익숙하지 않더라도 걱정하지 마세요. 이 가이드는 JavaScript에 대한 사전 경험을 요구하지 않습니다.
4+
5+
## Prerequisites
6+
7+
- [Docker Desktop](https://docs.docker.com/get-started/get-docker/)의 최신 버전을 설치합니다.
8+
- [Git Client](https://git-scm.com/downloads)를 설치합니다.
9+
- 파일을 편집하려면 IDE나 텍스트 편집기가 필요합니다. Docker는 [Visual Studio Code](https://code.visualstudio.com/) 사용을 권장합니다.
10+
11+
## Get the app
12+
13+
애플리케이션을 실행하려면 먼저 애플리케이션 소스 코드를 컴퓨터에 설치해야 합니다.
14+
15+
1. 다음 명령을 사용하여 [getting-started-app 저장소](https://github.com/docker/getting-started-app/tree/main)를 복제합니다 .
16+
2. 복제된 저장소의 내용을 확인하세요. 다음 파일과 하위 디렉터리가 표시되어야 합니다.
17+
```text
18+
├── getting-started-app/
19+
│ ├── .dockerignore
20+
│ ├── package.json
21+
│ ├── README.md
22+
│ ├── spec/
23+
│ ├── src/
24+
│ └── yarn.lock
25+
```
26+
27+
## Build the app's image
28+
29+
이미지를 빌드하려면 Dockerfile을 사용해야 합니다. Dockerfile은 파일 확장자가 없는 텍스트 기반 파일로, 스크립트로 작성된 명령이 포함되어 있습니다. Docker는 이 스크립트를 사용하여 컨테이너 이미지를 빌드합니다.
30+
31+
1. `getting-started-app` 디렉토리에서, `package.json` 파일과 같은 위치에, 다음 내용을 담은 `.Dockerfile` 파일을 만듭니다
32+
33+
```dockerfile
34+
# syntax=docker/dockerfile:1
35+
36+
FROM node:lts-alpine
37+
WORKDIR /app
38+
COPY . .
39+
RUN yarn install --production
40+
CMD ["node", "src/index.js"]
41+
EXPOSE 3000
42+
```
43+
44+
이 Dockerfile은 Node.js와 Yarn 패키지 관리자가 사전 설치된 경량 Linux 이미지인 `node:lts-alpine` 기본 이미지로 시작합니다. 모든 소스 코드를 이미지에 복사하고, 필요한 종속성을 설치한 후, 애플리케이션을 시작합니다.
45+
46+
2. 다음 명령어를 사용하여 이미지를 빌드합니다 :
47+
터미널에서 `getting-started-app` 디렉토리에 있는지 확인하세요. 디렉토리를 `/path/to/getting-started-app` 경로에서 `getting-started-app`로 변경하세요.
48+
49+
```bash
50+
$ cd /path/to/getting-started-app
51+
```
52+
53+
이미지를 빌드합니다.
54+
55+
```bash
56+
$ docker build -t getting-started .
57+
```
58+
59+
`docker build` 명령어는 Dockerfile을 사용하여 새 이미지를 빌드합니다. 도커가 많은 "레이어"들을 다운로드하는 것을 보셨을 겁니다. 이는 빌더에 `node:lts-alpine` 이미지에서 시작하도록 설정했기 때문입니다. 하지만, 컴퓨터에 해당 이미지가 없었기 때문에, Docker가 이미지를 다운로드해야 했습니다.
60+
61+
Docker가 이미지를 다운로드한 후, Dockerfile에서의 지침들이 애플리케이션에 복사되고 `yarn`을 사용하여 애플리케이션의 종속성을 설치합니다. `CMD` 명령어는 이 이미지에서 컨테이너를 시작할 때 실행할 기본 명령을 지정합니다.
62+
63+
마지막으로 `-t` 플래그는 이미지에 태그를 지정합니다. 태그를 최종 이미지에 대해 사람이 읽을 수 있는 이름이라고 생각하면 됩니다. 이미지 이름을 `getting-started`로 지정했으므로 컨테이너를 실행할 때 해당 이미지를 참조할 수 있습니다.
64+
65+
`docker build` 명령 끝의 `.` 는 Docker에게 현재 디렉터리에서 Dockerfile을 찾아야 한다는 것을 알려줍니다.
66+
67+
## Start an app container
68+
69+
이제 이미지가 있으므로 `docker run` 명령을 사용하여 컨테이너에서 애플리케이션을 실행할 수 있습니다.
70+
71+
1. `docker run` 명령을 사용하여 컨테이너를 실행하고 방금 만든 이미지의 이름을 명시합니다.
72+
73+
```bash
74+
$ docker run -d -p 127.0.0.1:3000:3000 getting-started
75+
```
76+
77+
`-d` 플래그(`--detach`의 약자)는 컨테이너를 백그라운드에서 실행합니다. Docker가 컨테이너를 시작하고 터미널 프롬프트로 돌아간다는 것을 의미합니다. 또한, 터미널에 로그를 표시하지 않습니다.
78+
79+
`-p` 플래그(`--publish`의 약자)는 호스트와 컨테이너 간의 포트 매핑을 생성합니다. `-p` 플래그는 `HOST:CONTAINER` 형식의 문자열 값을 사용하며, 여기서 `HOST`는 호스트의 주소이고 `CONTAINER`는 컨테이너의 포트입니다. 이 명령은 컨테이너의 포트 3000을 호스트의 `127.0.0.1:3000`(`localhost:3000`)에 게시합니다. 포트 매핑이 없으면 호스트에서 애플리케이션에 액세스할 수 없습니다.
80+
81+
2. 몇 초 후 웹 브라우저를 열어 [http://localhost:3000](http://localhost:3000/)으로 접속하세요. 앱이 보일 것입니다.
82+
![container-app](https://docs.docker.com/get-started/workshop/images/todo-list-empty.webp)
83+
3. 항목을 한두 개 추가하고 예상대로 작동하는지 확인하세요. 아이템을 완료로 표시하고 삭제할 수 있습니다. 프런트엔드가 백엔드에 아이템을 성공적으로 저장하고 있습니다.
84+
85+
이 시점에, 실행 중인 몇 가지 아이템이 포함된 투두 리스트 관리자가 있습니다.
86+
87+
컨테이너를 잠깐 살펴보면 `getting-started` 이미지를 사용하고 `3000`번 포트에서 실행 중인 컨테이너가 최소 하나 이상 있는 것을 확인할 수 있습니다. 컨테이너를 보려면 CLI 또는 Docker Desktop의 그래픽 인터페이스를 사용할 수 있습니다.
88+
89+
터미널에서 docker ps 명령을 실행하여 컨테이너 목록을 확인하세요.
90+
91+
```bash
92+
$ docker ps
93+
```
94+
95+
다음과 비슷한 출력이 나타날 것입니다.
96+
97+
```bash
98+
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99+
df784548666d getting-started "docker-entrypoint.s..." 2 minutes ago Up 2 minutes 127.0.0.1:3000->3000/tcp priceless_mcclintock
100+
```
101+
102+
## Summary
103+
104+
이 섹션에서는 이미지를 빌드하기 위한 Dockerfile 생성의 기본 사항을 알아보았습니다. 이미지를 빌드한 후 컨테이너를 시작하고 실행 중인 앱을 확인했습니다.
105+
106+
관련 정보:
107+
108+
- [Dockerfile reference](https://docs.docker.com/reference/dockerfile/)
109+
- [docker CLI reference](https://docs.docker.com/reference/cli/docker/)
110+
111+
## Next steps
112+
113+
다음으로, 앱을 수정하고 실행 중인 애플리케이션을 새 이미지로 업데이트하는 방법을 알아보겠습니다. 이 과정에서, 몇 가지 유용한 명령도 배우게 됩니다.
114+
115+
[Update the application](/#/get-started/workshop/03_updating_app)
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Update the application
2+
3+
[Part 1](/#/get-started/workshop/02_our_app)에서는 todo 애플리케이션을 컨테이너화했습니다. 이번 파트에서는 ​​애플리케이션과 이미지를 업데이트합니다. 컨테이너를 중지하고 제거하는 방법도 배웁니다.
4+
5+
## Update the source code
6+
7+
다음 단계에서는 할 일 목록 항목이 없을 때 표시되는 "빈 텍스트(empty text)"를 "할 일 항목이 아직 없습니다! 위에 추가하세요!(You have no todo items yet! Add one above!)"로 변경합니다.
8+
9+
1. `src/static/js/app.js` 파일에서, 56번째 줄을 업데이트하여 새로운 텍스트를 사용합니다.
10+
11+
```text
12+
- <p className="text-center">No items yet! Add one above!</p>
13+
14+
+ <p className="text-center">You have no todo items yet! Add one above!</p>
15+
```
16+
17+
2. `docker build` 명령을 사용하여, 업데이트된 버전의 이미지를 빌드합니다.
18+
```bash
19+
$ docker build -t getting-started .
20+
```
21+
3. 업데이트된 코드를 사용하여 새로운 컨테이너를 시작합니다.
22+
```bash
23+
$ docker run -dp 127.0.0.1:3000:3000 getting-started
24+
```
25+
26+
아마도 다음과 같은 오류가 표시되었을 것입니다 :
27+
28+
```text
29+
docker: Error response from daemon: driver failed programming external connectivity on endpoint laughing_burnell
30+
(bb242b2ca4d67eba76e79474fb36bb5125708ebdabd7f45c8eaf16caaabde9dd): Bind for 127.0.0.1:3000 failed: port is already allocated.
31+
```
32+
33+
이 오류는 이전 컨테이너가 실행 중인 상태에서 새 컨테이너를 시작할 수 없어서 발생했습니다. 이전 컨테이너가 이미 호스트의 포트 3000을 사용하고 있고, 머신에서 하나의 프로세스(컨테이너 포함)만 특정 포트를 수신 대기할 수 있기 때문입니다. 이 문제를 해결하려면, 이전 컨테이너를 제거해야 합니다.
34+
35+
## Remove the old container
36+
37+
컨테이너를 제거하려면 먼저 중지해야 합니다. 중지된 후에 제거할 수 있습니다. CLI 또는 Docker Desktop의 그래픽 인터페이스를 사용하여 이전 컨테이너를 제거할 수 있습니다. 가장 편리한 옵션을 선택하세요.
38+
39+
#### Remove a container using the CLI
40+
41+
1. `docker ps` 명령을 사용하여 컨테이너 ID를 확인하세요.
42+
```bash
43+
$ docker ps
44+
```
45+
2. `docker stop` 명령을 사용하여 컨테이너를 중지하세요. `<the-container-id>``docker ps`에서 확인한 ID로 바꾸세요.
46+
```bash
47+
$ docker stop <the-container-id>
48+
```
49+
3. 컨테이너가 중지되면 `docker rm` 명령을 사용하여 제거할 수 있습니다.
50+
```bash
51+
$ docker rm <the-container-id>
52+
```
53+
54+
> #### Note
55+
>
56+
> `docker rm` 명령에 `force` 플래그를 추가하면 단일 명령으로 컨테이너를 중지하고 제거할 수 있습니다. 예: `docker rm -f <컨테이너 ID>`
57+
58+
### Start the updated app container
59+
60+
1. 이제 `docker run` 명령을 사용하여 업데이트된 앱을 시작합니다.
61+
```bash
62+
$ docker run -dp 127.0.0.1:3000:3000 getting-started
63+
```
64+
2. [http://localhost:3000](http://localhost:3000)에서 브라우저를 새로 고치면 업데이트된 텍스트가 표시됩니다.
65+
66+
## Summary
67+
68+
이 섹션에서는, 컨테이너를 중지하고 제거하는 방법 뿐만 아니라, 컨테이너를 업데이트하고 다시 빌드하는 방법을 학습했습니다.
69+
70+
관련 정보:
71+
72+
- [docker CLI reference](https://docs.docker.com/reference/cli/docker/)
73+
74+
## Next steps
75+
76+
다음으로, 다른 사람과 이미지를 공유하는 방법을 학습하게 될 겁니다.
77+
78+
[Share the application](/#/get-started/workshop/04_sharing_app)

0 commit comments

Comments
 (0)