=================
== The Archive ==
=================

[그림과 실습으로 배우는 쿠버네티스 입문] 1장. 도커 컨테이너 만들어 보기

|

cover.jpg

1.1 쿠버네티스는 왜 도커가 필요한가?

1.2 도커 알아보기

1.2.1 도커란?

1.2.2 컨테이너란?

1.2.3 왜 컨테이너인가?

크게 두 가지 이유

  1. 가상 머신보다 더 빠르게 애플리케이션을 실행할 수 있다.
    1. 가상 머신은 컨테이너와 달리 운영체제를 포함하여 가상화함
    2. 컨테이너 기술의 등장으로 가상 머신보다 더 빠르게 애플리케이션을 실행할 수 있게 됨
  2. 마이크로서비스 아키텍처를 사용하는 곳이 많아졌다.
    1. 마이크로서비스 아키텍처를 사용함으로써 보다 빠르고 유연하게 고객에게 가치를 제공할 수 있는 인프라가 필요하게 됨

1.2.4 그래서 도커란?

1.2.5 준비: 도커 환경 만들기

1.2.6 컨테이너 실행하기

1.2.7 컨테이너의 틀이 되는 도커 이미지

1.2.8 컨테이너 이미지의 설계서인 Dockerfile

1.2.9 도커 이미지 빌드하기

1
<h1>Hello World!</h1>
1
2
FROM nginx:latest
COPY index.html /usr/share/nginx/html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
~/gitFolders/build-breaking-fixing-kubernetes master* ⇡               18:31:14
❯ docker build ./chapter-01/custom-nginx --tag nginx-custom:1.0.0
[+] Building 7.8s (7/7) FINISHED                                docker:default
 => [internal] load build definition from Dockerfile                      0.0s
 => => transferring dockerfile: 93B                                       0.0s
 => [internal] load metadata for docker.io/library/nginx:latest           2.4s
 => [internal] load .dockerignore                                         0.0s
 => => transferring context: 2B                                           0.0s
 => [internal] load build context                                         0.0s
 => => transferring context: 59B                                          0.0s
 => [1/2] FROM docker.io/library/nginx:latest@sha256:1beed3ca46acebe9d3f  5.2s
 => => resolve docker.io/library/nginx:latest@sha256:1beed3ca46acebe9d3f  0.0s
 => => sha256:3db9f1af9e100b2c641e0164d20cf287cc543dc01c 1.21kB / 1.21kB  2.0s
 => => sha256:184706839d41a7d155b6253ac733e6eef75f4e8a61 1.40kB / 1.40kB  0.2s
 => => sha256:0469ebd60c79c6238255a6840462db9ae9d70215686d1a 404B / 404B  1.5s
 => => sha256:59679015de7391a6955f9bf5ee9531bfaf9664e1d21159 956B / 956B  1.7s
 => => sha256:d9b6d209211fb260cdff87a10b238a1579fce76ddcfbba 628B / 628B  1.7s
 => => sha256:7d3a535ffc2fc56da973314114adbd69373bdac6 28.10MB / 28.10MB  3.2s
 => => extracting sha256:7d3a535ffc2fc56da973314114adbd69373bdac6e65518c  0.4s
 => => extracting sha256:d9b6d209211fb260cdff87a10b238a1579fce76ddcfbbab  0.0s
 => => extracting sha256:59679015de7391a6955f9bf5ee9531bfaf9664e1d211592  0.0s
 => => extracting sha256:0469ebd60c79c6238255a6840462db9ae9d70215686d1a8  0.0s
 => => extracting sha256:3db9f1af9e100b2c641e0164d20cf287cc543dc01c10e39  0.0s
 => => extracting sha256:184706839d41a7d155b6253ac733e6eef75f4e8a61b5ebb  0.0s
 => [2/2] COPY index.html /usr/share/nginx/html                           0.1s
 => exporting to image                                                    0.1s
 => => exporting layers                                                   0.0s
 => => exporting manifest sha256:e4af76f985902cdb9a1b62df6094eb46302fc22  0.0s
 => => exporting config sha256:f681125ecf173910c70a30c0e0d55923f01acd122  0.0s
 => => exporting attestation manifest sha256:66305a2564a6323112c6960db7a  0.0s
 => => exporting manifest list sha256:dbd7ba2df40959579047c3de05c08a6fd5  0.0s
 => => naming to docker.io/library/nginx-custom:1.0.0                     0.0s
 => => unpacking to docker.io/library/nginx-custom:1.0.0                  0.0s

~/gitFolders/build-breaking-fixing-kubernetes master* ⇡            9s 18:31:40
❯ docker images                                                  
                                                           i Info →   U  In Use
IMAGE                          ID             DISK USAGE   CONTENT SIZE   EXTRA
gcr.io/k8s-minikube/kicbase…   18b0fda1fa3d       1.73GB          472MB        
gcr.io/k8s-minikube/kicbase…   7171c97a5162       1.73GB          472MB    U   
nginx-custom:1.0.0             dbd7ba2df409        244MB         58.3MB        
postgres:15-alpine             64583b3cb4f2        378MB          105MB    U   
postgres:latest                28bda6d50590        665MB          161MB    U   

1.2.10 직접 만든 도커 이미지로 컨테이너 실행하기

1
2
3
4
5
6
7
8
~/gitFolders/build-breaking-fixing-kubernetes master* ⇡                18:35:17
❯ docker run --rm --detach --publish 8080:80 --name web nginx-custom:1.0.0
783a28d62d72e16bf939bdc0e77fcc78d20e03e5ac8f0cf9d79d70d9c4c887c7

~/gitFolders/build-breaking-fixing-kubernetes master* ⇡                18:35:45
❯ docker ps -a                                                            
CONTAINER ID   IMAGE                                 COMMAND                  CREATED         STATUS                     PORTS                                                                                                                                  NAMES
783a28d62d72   nginx-custom:1.0.0                    "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds               0.0.0.0:8080->80/tcp, [::]:8080->80/tcp                                                                                                web

0.png

1
2
3
4
5
6
❯ docker stop web                 
web

~/gitFolders/build-breaking-fixing-kubernetes master* ⇡                18:37:30
❯ docker ps -a   
CONTAINER ID   IMAGE                                 COMMAND                  CREATED        STATUS                     PORTS                                                                                                                                  NAMES

1.2.11 도커 이미지 공개하기

1.2.12 Dockerfile 작성 팁

1.3 [만들기] 나만의 http server 컨테이너 실행하기

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Mix.install([{:plug_cowboy, "~> 2.7"}])

defmodule Mini do
  use Plug.Router
  plug :match
  plug :dispatch
  get "/", do: send_resp(conn, 200, "Hello, world!")
  get "/favicon.ico", do: send_resp(conn, 204, "")
end

Plug.Cowboy.http(Mini, [], port: 8080)
Process.sleep(:infinity)
1
2
3
4
5
6
7
8
FROM elixir:1.19-alpine
ENV MIX_ENV=prod
RUN mix local.hex --force && mix local.rebar --force
WORKDIR /app
COPY main.exs .
RUN elixir -e "Mix.install([{:plug_cowboy, \"~> 2.7\"}])"
EXPOSE 8080
CMD ["elixir", "main.exs"]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
~/gitFolders/build-breaking-fixing-kubernetes master* ⇡               19:41:17
❯ docker build ./chapter-01/hello-server --tag hello-server:1.0.0
[+] Building 0.8s (10/10) FINISHED                              docker:default
 => [internal] load build definition from Dockerfile                      0.0s
 => => transferring dockerfile: 259B                                      0.0s
 => [internal] load metadata for docker.io/library/elixir:1.19-alpine     0.7s
 => [internal] load .dockerignore                                         0.0s
 => => transferring context: 2B                                           0.0s
 => [1/5] FROM docker.io/library/elixir:1.19-alpine@sha256:b7720b425b17a  0.0s
 => => resolve docker.io/library/elixir:1.19-alpine@sha256:b7720b425b17a  0.0s
 => [internal] load build context                                         0.0s
 => => transferring context: 30B                                          0.0s
 => CACHED [2/5] RUN mix local.hex --force && mix local.rebar --force     0.0s
 => CACHED [3/5] WORKDIR /app                                             0.0s
 => CACHED [4/5] COPY main.exs .                                          0.0s
 => CACHED [5/5] RUN elixir -e "Mix.install([{:plug_cowboy, "~> 2.7"}])"  0.0s
 => exporting to image                                                    0.0s
 => => exporting layers                                                   0.0s
 => => exporting manifest sha256:4b7ba93a6ff1ec3e80282606c0013208c17d4f2  0.0s
 => => exporting config sha256:09826592b0f07d8fef9da91e8d692a5215f870db4  0.0s
 => => exporting attestation manifest sha256:97f79eb49812f1e8cff6d65c3e5  0.0s
 => => exporting manifest list sha256:cab71a3badb9937732db538f866610832d  0.0s
 => => naming to docker.io/library/hello-server:1.0.0                     0.0s
 => => unpacking to docker.io/library/hello-server:1.0.0                  0.0s

~/gitFolders/build-breaking-fixing-kubernetes master* ⇡               19:41:40
❯ docker images hello-server                                     
                                                           i Info →   U  In Use
IMAGE                ID             DISK USAGE   CONTENT SIZE   EXTRA
hello-server:1.0.0   cab71a3badb9        189MB         68.6MB        

~/gitFolders/build-breaking-fixing-kubernetes master* ⇡               19:41:49
❯ docker run --rm --detach --publish 8080:8080 --name hello-server hello-server:1.0.0
0dabc026178d18aafb71f038862a5fe3502216f92345e76e4e8584399d8a5125

~/gitFolders/build-breaking-fixing-kubernetes master* ⇡               19:43:07
❯ curl localhost:8080
Hello, world!%                                                                 
~/gitFolders/build-breaking-fixing-kubernetes master* ⇡               19:43:11
❯ docker stop hello-server
hello-server

Categories:

Tags: