728x90
도커를 이용하는 장점
- 융통성 : 가장 복잡한 어플리케이션이라도 컨테이너화 할 수 있습니다.
- 경량화 : 컨테이너는 호스트 커널을 활용하고 공유하므로 가상 시스템보다 시스템 리소스 측면에서 훨씬 효율적입니다.
- 이식성 : 로컬로 구축하고 클라우드에 배포하며 어디에서나 실행할 수 있습니다.
- 느슨한 결합 : 컨테이너는 자체적으로 충분하고 캡슐화되어 다른 컨테이너를 방해하지 않고 컨테이너를 교체하거나 업그레이드 할 수 있습니다.
- 복제기반 확장성 : 데이터 센터에 컨테이너 복제본을 늘리고 자동으로 배포 할 수 있습니다.
- 프로세스 격리와 보안 : 컨테이너는 사용자가 구성 할 필요없이 공격적인 제약과 격리를 프로세스에 적용합니다.
도거 이미지 샘플을 이용하여 이미지 제작
1. Docker Samples 페이지 에서 예제 프로젝트를 다운로드
도커 샘플 소스를 다운받아 옵니다.
git clone https://github.com/dockersamples/node-bulletin-board
cd node-bulletin-board/bulletin-board-app
이 node-bulletin-board프로젝트는 Node.js로 작성된 간단한 게시판 응용 프로그램입니다. 이것을 이용하여 이미지를 생성 할 것입니다.
bulletin-board-app]# ls -al
total 26
-rwxrwx---. 1 root vboxsf 1238 Feb 29 22:38 app.js
drwxrwx---. 1 root vboxsf 0 Feb 29 22:38 backend
-rwxrwx---. 1 root vboxsf 126 Feb 29 22:38 Dockerfile
drwxrwx---. 1 root vboxsf 0 Feb 29 22:38 fonts
-rwxrwx---. 1 root vboxsf 1825 Feb 29 22:38 index.html
-rwxrwx---. 1 root vboxsf 1131 Feb 29 22:38 LICENSE
-rwxrwx---. 1 root vboxsf 522 Feb 29 22:38 package.json
-rwxrwx---. 1 root vboxsf 888 Feb 29 22:38 readme.md
-rwxrwx---. 1 root vboxsf 1070 Feb 29 22:38 server.js
-rwxrwx---. 1 root vboxsf 1227 Feb 29 22:38 site.css
[node server.js] 구동으로 서비스를 실행 하면
ipv4 가 아닌 ipv6로 포트가 매핑되는 경우가 있다.
이런 경우를 대비해서 다음과 같이 소스를 수정해야 한다.
# ipv6로 리스닝해서 웹브라우저로 접근이 안된다.
app.listen(8080);
# ipv4로 리스닝 하도록 명시한다.
app.listen(8080, "0.0.0.0", function() { }); 또는 app.listen(8080, "0.0.0.0"); 로 수정한다.
https://stackoverflow.com/questions/47797322/node-js-server-only-listening-on-ipv6
>> [server.js]
>> app.listen(8080, "0.0.0.0", function() { });
>> app.listen(8081);
$ netstat -antp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 20243/node
tcp6 0 0 :::8081 :::* LISTEN 20243/node
>> [server.js]
>> app.listen(8080, "0.0.0.0", function() { });
$ netstat -antp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 20243/node
2. Dockerfile을 사용하여 컨테이너 정의
node-bulletin-board/bulletin-board-app/Dockerfile 의 내용을 읽어 봅니다.
# Use the official image as a parent image
FROM node:current-slim
# Set the working directory
WORKDIR /usr/src/app
# Copy the file from your host to your current location
COPY package.json .
# Run the command inside your image filesystem
RUN npm install
# Inform Docker that the container is listening on the specified port at runtime.
EXPOSE 8080
# Run the specified command within the container.
CMD [ "npm", "start" ]
# Copy the rest of your app's source code from your host to your image filesystem.
COPY . .
FROM기존 node:current-slim이미지를 시작
WORKDIR모든 후속 조치가 /usr/src/app 이미지 파일 시스템의 디렉토리 (호스트의 파일 시스템이 아님) 에서 수행되도록 지정
COPY package.json호스트 .에서 이미지의 현재 위치 ( ) 까지의 파일 (/usr/src/app/package.json)
RUN npm install 이미지 파일 시스템 내부 의 명령 ( package.json앱의 노드 종속성을 확인하고 설치)
COPY 호스트에서 이미지 파일 시스템으로의 나머지 앱 소스 코드에서 .
EXPOSE 8080컨테이너가 런타임에 포트 8080을 사용
3. 샘플을 이용하여 도커 이미지를 생성 합니다.
docker image build -t bulletinboard:1.0 .
4. 도커컨테이너를 실행 합니다.
docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0
5. docker 이미지 관리
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 4d2803c489ce 6 minutes ago 140MB
node current-slim 26932a190e66 4 days ago 140MB
rancher/rancher latest 83fe4871cf67 4 weeks ago 670MB
hello-world latest fce289e99eb9 14 months ago 1.84kB
docker rmi 4d2803c489ce
Error response from daemon: conflict: unable to delete 4d2803c489ce (must be forced) - image is being used by stopped container eed0b98be330
docker rmi -f 4d2803c489ce
Deleted: sha256:4d2803c489ced1398fa0bd79527c3774024956d9f3b309df7fbac82033780d67
Deleted: sha256:c30ab9db4eb659ed92635bdfcd657731e32358935bc3fccb6a24267720016557
Deleted: sha256:29ee942c76aa1c7041591f375d27fdfeb969d952a391ed7e0c642292d8a6ef86
Deleted: sha256:8c3e014d8b6d5cf12306e98d39c391a974edfe5e41d51967a73ab750a61fe97b
Deleted: sha256:af9aef8618e215c2cbd944ddb76c7c96c52a681e71e17f8f3236d0a61f58e942
6. docker container 관리
# 동작중인 컨테이너 확인
docker ps
# 정지된 컨테이너 확인
docker container list -a
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab86502e9def 4d2803c489ce "docker-entrypoint.s…" 9 minutes ago Exited (1) 9 minutes ago sweet_moser
eed0b98be330 4d2803c489ce "docker-entrypoint.s…" 10 minutes ago Exited (1) 10 minutes ago stoic_babbage
6b8a63d0b2ed 5074e0b244a9 "/bin/sh -c 'npm ins…" 26 minutes ago Exited (1) 24 minutes ago elegant_dubinsky
bf791d0f7141 rancher/rancher "entrypoint.sh" 38 minutes ago Exited (1) 13 minutes ago crazy_mclaren
9c44a26492b4 rancher/rancher "entrypoint.sh" About an hour ago Exited (1) 39 minutes ago serene_austin
29b465b2cf05 rancher/rancher "entrypoint.sh" About an hour ago Exited (137) 38 minutes ago relaxed_volhard
3fd24cbf1808 5074e0b244a9 "/bin/sh -c 'npm ins…" 2 hours ago Exited (1) 2 hours ago hardcore_moser
bd97f8e7e3d6 5074e0b244a9 "/bin/sh -c 'npm ins…" 2 hours ago Exited (1) 2 hours ago admiring_albattani
a1f742ee22d9 hello-world "/hello" 3 hours ago Exited (0) 3 hours ago lucid_bohr
b339ca93c51f hello-world "/hello" 3 hours ago Exited (0) 3 hours ago determined_williamson
# 컨테이너 삭제
docker rm [CONTAINER ID]
docker rm 6b8a63d0b2ed bf791d0f7141
docker container list -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1f742ee22d9 hello-world "/hello" 3 hours ago Exited (0) 3 hours ago lucid_bohr
b339ca93c51f hello-world "/hello" 3 hours ago Exited (0) 3 hours ago
728x90
반응형
'InfraPlatform' 카테고리의 다른 글
CentOS 8에서 mariaDB 의 Selinux 설정 (0) | 2020.03.10 |
---|---|
Linux - Rsyncd install - Centos8 (0) | 2020.03.08 |
Linux - Rsyncd 설치와 selinux 문제 해결법 (Centos8) (0) | 2020.03.08 |
Docker부터 Kubernetis 까지- (1) 도커설치 (0) | 2020.03.01 |
리눅스설치-hostname 변경하기 : CentOS 6 & 7 (0) | 2018.10.21 |
linux sudo 권한 부여 하기 (0) | 2018.09.25 |
Kernel-ml for Enterprise Linux 7 install (0) | 2017.12.10 |