Goolge Cloud Skills Boost

Introduction to Docker | GSP055 | Google Cloud Platform | 도커 소개

컨텐츠 정보

본문

https://www.youtube.com/watch?v=udSkZsxD1_g > 이 퀵랩은 Docker를 소개 합니다. > 천천히 따라해 보세요 로그인 이후에 , 클라우드 쉘(Cloud Shell) 에서 실습을 할 수 있습니다. ## Hello World docker를 실행 합니다. ``` docker run hello-world ``` docker image를 확인합니다. ``` docker images ``` > 이미지를 Docker Hub 공개 레지스트리에서 가져왔습니다. 이미지 ID는 SHA256 해시 형식입니다. 이 필드에서는 프로비저닝된 Docker 이미지를 지정합니다. Docker 데몬이 로컬에서 이미지를 찾을 수 없으면 기본적으로 공개 레지스트리에서 이미지를 검색합니다. 컨테이너를 다시 실행해 보겠습니다. ``` docker run hello-world ``` (output) ```bash Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: ... ``` 다음 명령어를 실행하여 실행 중인 컨테이너를 확인합니다. ``` docker ps ``` (output) ```bash CONTAINER ID IMAGE COMMAND ... NAMES 6027ecba1c39 hello-world "/hello" ... elated_knuth 358d709b8341 hello-world "/hello" ... epic_lewin ``` ## 빌드 ``` mkdir test && cd test ``` 아래의 명령어로 `Dockerfile`을 만듭니다. ``` cat > Dockerfile < 참고: Dockerfile 명령어 참조 > https://docs.docker.com/engine/reference/builder/#known-issues-run ### 노드 애플리케이션 생성 아래의 명령어를 실행 합니다. ``` cat > app.js < { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); }); server.listen(port, hostname, () => { console.log('Server running at http://%s:%s/', hostname, port); }); process.on('SIGINT', function() { console.log('Caught interrupt signal and will exit'); process.exit(); }); EOF ``` ## 실행 빌드한 이미지를 기반으로 하는 컨테이너를 실행합니다. ``` docker run -p 4000:80 --name my-app node-app:0.1 ``` (output) ```bash Server running at http://0.0.0.0:80/ ``` 새로운 터미널을 엽니다. ``` curl http://localhost:4000 // output Hello World ``` 초기 터미널이 실행되는 동안 컨테이너가 실행됩니다. 컨테이너를 터미널 세션에 종속시키지 않고 백그라운드에서 실행하려면 -d 플래그를 지정해야 합니다. 초기 터미널을 닫은 후 다음 명령어를 실행하여 컨테이너를 중단하고 삭제합니다. ``` docker stop my-app && docker rm my-app ``` ### 백그라운드 실행 방법(컨테이너) ``` docker run -p 4000:80 --name my-app -d node-app:0.1 docker ps // output CONTAINER ID IMAGE COMMAND CREATED ... NAMES xxxxxxxxxxxx node-app:0.1 "node app.js" 16 seconds ago ... my-app ``` ### 컨테이너 로그 보기 ``` docker logs [container_id] ``` 텍스트 편집기로 app.js 를 편집합니다. ``` vi app.js ``` 여기에서 `Hello World`를 다른 문자열로 바꿉니다. vi 저장 후 나가기 `esc`키를 누른 뒤 `:wq` ### 명령어 결과 ``` Step 1/5 : FROM node:6 ---> 67ed1f028e71 Step 2/5 : WORKDIR /app ---> Using cache ---> a39c2d73c807 Step 3/5 : ADD . /app ---> a7087887091f Removing intermediate container 99bc0526ebb0 Step 4/5 : EXPOSE 80 ---> Running in 7882a1e84596 ---> 80f5220880d9 Removing intermediate container 7882a1e84596 Step 5/5 : CMD node app.js ---> Running in f2646b475210 ---> 5c3edbac6421 Removing intermediate container f2646b475210 Successfully built 5c3edbac6421 Successfully tagged node-app:0.2 ``` 새 이미지 버전으로 다른 컨테이너를 실행합니다. 이때 호스트 포트를 80 대신 8080으로 매핑합니다. 호스트 포트 4000은 이미 사용 중이므로 사용할 수 없습니다. ``` docker run -p 8080:80 --name my-app-2 -d node-app:0.2 docker ps // output CONTAINER ID IMAGE COMMAND CREATED xxxxxxxxxxxx node-app:0.2 "node app.js" 53 seconds ago ... xxxxxxxxxxxx node-app:0.1 "node app.js" About an hour ago ... ``` ### 컨테이너 TEST ``` curl http://localhost:8080 // output Hello Thunder Cloud! ``` ## 디버깅 ### logs ``` docker logs -f [container_id] ``` ### 실행중인 컨테이너로 들어가기 ``` docker exec -it [container_id] bash ``` > `-it`: pseudo-tty를 할당하고 stdin을 열린 상태로 유지하여 컨테이너와 상호작용 ### 메타데이터를 보기 ``` docker inspect [container_id] ``` ### Json 특정 필드 검사 (--format) ``` docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [container_id] ``` ## 배포 (Publish) ### 0.2버전으로 Tag ``` docker tag node-app:0.2 gcr.io/[project-id]/node-app:0.2 ``` ### 이미지를 GCR로 푸시 ``` docker push gcr.io/[project-id]/node-app:0.2 ``` **output** ```bash The push refers to a repository [gcr.io/[project-id]/node-app] 057029400a4a: Pushed 342f14cb7e2b: Pushed 903087566d45: Pushed 99dac0782a63: Pushed e6695624484e: Pushed da59b99bbd3b: Pushed 5616a6292c16: Pushed f3ed6cb59ab0: Pushed 654f45ecb7e3: Pushed 2c40c66f7667: Pushed 0.2: digest: sha256:25b8ebd7820515609517ec38dbca9086e1abef3750c0d2aff7f341407c743c46 size: 2419 ``` ### 모든 컨테이너를 중지하고 제거 ``` docker stop $(docker ps -q) docker rm $(docker ps -aq) ``` ## 모든 이미지 삭제 ``` docker rmi node-app:0.2 gcr.io/[project-id]/node-app node-app:0.1 docker rmi node:lts docker rmi $(docker images -aq) # remove remaining images docker images ``` ## Push한 이미지지 다운후 실행 ``` docker pull gcr.io/[project-id]/node-app:0.2 docker run -p 4000:80 -d gcr.io/[project-id]/node-app:0.2 curl http://localhost:4000 ``` # 축하합니다.

관련자료

댓글 0
등록된 댓글이 없습니다.
전체 20 / 1 페이지
RSS