일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 라우터
- 전역설치
- 리액트
- 시퀄라이즈
- 리눅스
- 깃허브
- 이더리움
- 머클루트
- 쉘스크립트
- 변수
- 자바스크립트
- 솔리디티
- 환경변수
- centos
- 블록체인
- node.js 교과서 따라하기
- 우분투
- Docker
- wget
- 설치
- 리액트를 다루는 기술
- 노드
- wsl
- MariaDB
- Sequelize
- 머클트리
- immer
- 벨로포터
- 일반유저
- npm
- Today
- Total
코드코코
[Docker] [도커 기본 개념] [실습] 도커 컨테이너 본문
도커 컨테이너
- 무엇을 컨테이너로 만드는 건가요?
- 컨테이너 어떻게 만들어요? Dockerfile이 뭐죠?
- 내가 만든 컨테이너를 배포하려면?
1. 무엇을 컨테이너로 만드는 건가요?
- 컨테이너 : 개발한 어플리케이션(실행파일)과 운영환경이 모두 들어 있는 독립된 공간
- 개발한 프로그램과 실행환경을 모두 컨테이너로 만듦.
- MSA(Micro Service Architecture) 환경의 Polyglot 애플리케이션 운영
*Polyglot Programming : 다양한 언어를 사용하여 프로그래밍 하는 것.
2. 컨테이너 어떻게 만들어요? Dockerfile이 뭐죠?
- Dockerfile을 이용해 컨테이너를 빌드
- Dockerfile은
- 쉽고, 간단, 명확란 구문을 가진 text file 로 Top-down 해석
- 컨테이너 이미지를 생성할 수 있는 고유의 지시어(instruction)를 가짐
- 대소문자 구분하지 않으나 가독성을 위해 사용함.
ex)
$ mkdir build
$ cd build
$ vi dockerfile
FROM node:12
COPY hello.js
CMD ["node", "/hello.js"]
$ docker build -t imagename:tag .
cmd - 명령어 치환 가능(binary)
entrypoint - 명령어 치환 불가능(arument, option)
3. 내가 만든 컨테이너를 배포하려면?
ex)
$ docker build -t imagename:tag .
$ docker login
$ docker push hellojs:latest
[실습1] nodejs 애플리케이션 컨테이너 만들기 : hellojs
$ vim hello.js
- vim 에디터를 사용하여 파일 작성
- hello.js
cosnt http = require('http');
const os = require('os');
console.log("Test server starting...");
var handler = function(req,res){
console.log("Recieved request from " + req.connection.remoteAddress);
res.writeHead(200);
res.end("Container Hostname:" + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);
$ vim dockerfile
- dockerfile
# 베이스 이미지
FROM node:18
# 해당 파일을 컨테이너의 최상위 디렉토리로 이동
COPY hello.js /
# 컨테이너 러닝시 command 실행
CMD ["node","/hello.js"]
$ docker build -t hellojs:latest .
- docker 빌드
guru@docker-ubuntu:~/hellojs$ docker build -t hellojs:latest .
Sending build context to Docker daemon 3.072kB
Step 1/3 : FROM node:18
18: Pulling from library/node
e756f3fdd6a3: Pull complete
bf168a674899: Pull complete
e604223835cc: Pull complete
6d5c91c4cd86: Pull complete
2cc8d8854262: Pull complete
b8798d556362: Pull complete
34a8686a1a70: Pull complete
cff44b507872: Pull complete
92ed088b5633: Pull complete
Digest: sha256:52bda4c171f379c1dcba5411d18ed83ae6e99c3751cad67a450684efb9491f6b
Status: Downloaded newer image for node:18
---> 4c60c47ec5e4
Step 2/3 : COPY hello.js /
---> d9d798fb7f0f
Step 3/3 : CMD ["node","/hello.js"]
---> Running in 2fe1bd3f93bb
Removing intermediate container 2fe1bd3f93bb
---> c6b4c24b2bb8
Successfully built c6b4c24b2bb8
Successfully tagged hellojs:latest
$ docker images
- 빌드된 이미지 확인
guru@docker-ubuntu:~/hellojs$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hellojs latest c6b4c24b2bb8 12 seconds ago 996MB
node 18 4c60c47ec5e4 6 days ago 996MB
$ docker run -d -p 8080:8080 --name web hello.js
- 컨테이너 실행
$ docker ps
- 실행중인 컨테이너 확인
$ curl localhost:8080
- 실행중인 컨테이너 접속
guru@docker-ubuntu:~/hellojs$ docker run -d -p 8080:8080 --name web hellojs
1853460df6ee58ba91da790081cb748bdc36414a91d1a4775734afa20167d1bb
guru@docker-ubuntu:~/hellojs$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1853460df6ee hellojs "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp web
guru@docker-ubuntu:~/hellojs$ curl localhost:8080
Container Hostname:1853460df6ee
[실습2] 우분투 기반의 웹서버 컨테이너 만들기
Dockerfile 작성
FROM ubuntu:18.04
LABEL maintainer="codecoco <isawmy@nate.com>"
# install apache
RUN apt-get update \
&& apt-get install -y apache2
# apache2가 서비스 해주는 위치
RUN echo "TEST WEB" > /var/www/html/index.html
# 이 컨테이너가 서비스 해주는 포트
EXPOSE 80
# application demon의 위치, argument
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
빌드
guru@docker-ubuntu:~/webserver$ docker build -t webserver:v1 .
실행
guru@docker-ubuntu:~/webserver$ docker run -d -p 80:80 --name web webserver:v1
9db1f1b24b6b59131ac9780db370baec6540727885b10669e62f9beb19249a02
curl 를 통해 접속확인
$ docker rm -f web.v3
- 실행 중 컨테이너 삭제
[실습3] 만들어 놓은 컨테이너 배포하기
$ docker login
-도커 로그인
guru@docker-ubuntu:~$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: isawmy
Password:
WARNING! Your password will be stored unencrypted in /home/guru/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
$ docker tag webserver:v1 isawmy/webserver:v1
- 이름 변경하기
- 계정을 앞에 붙여야 함
guru@docker-ubuntu:~/webserver$ docker tag webserver:v1 isawmy/webserver:v1
- 이미지 아이디는 동일 이름만 각각 두개씩 있는 것.
$ docker push isawmy/webserver
- 계정에 푸시 하고 배포
guru@docker-ubuntu:~/webserver$ docker push isawmy/webserver
Using default tag: latest
The push refers to repository [docker.io/isawmy/webserver]
tag does not exist: isawmy/webserver:latest
guru@docker-ubuntu:~/webserver$ docker push isawmy/webserver:v1
The push refers to repository [docker.io/isawmy/webserver]
7b315dec771a: Pushed
cfab7b63ccac: Pushing [===================> ] 53.49MB/137.3MB
cfab7b63ccac: Pushed
v1: digest: sha256:dccc89e5394b27b5680de72113ad5c2efd1e6833d130a6503638ca426fe8e066 size: 948
- hub.docker.com에서 확인됨.
- 레퍼지토리에서 풀 받아서 사용가능
학습영상 : https://www.youtube.com/watch?v=WLjfzwdASbw&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=12
'기록 > Docker' 카테고리의 다른 글
[Docker] [도커 기본 개념] [실습] docker registry - 컨테이너 보관창고 (0) | 2022.06.04 |
---|---|
[Docker] [실습] 도커 이미지 가져오기 및 실행 (0) | 2022.06.04 |
[Docker] [환경구성하기] window10 / Docker decktop 설치 및 간단한 명령어 확인 (0) | 2022.06.03 |
[Docker] [환경구성하기]우분투/센토스 에 도커 설치 방법 (0) | 2022.06.03 |
[Docker] [환경구성하기] 가상머신에 CentOS 설치 후 네트워크 설정 확인 및 기타 설정 (0) | 2022.06.03 |