DockerFile 을 이용하여 나만의 Docker Image 만들기
DockerFile Build 사용법(커뮤니티 블로그 만들기)
2022년 NHN Cloud 무료 교육일정 : https://doc.skill.or.kr/2022-NHN-Cloud-Education
2022년 NHN Cloud 행사/프로모션 정보 공유 : https://doc.skill.or.kr/2022-NHN-Cloud-Event-Promotion
1. 먼저 알아 두기
1.1 DockerFile 이란?
DockerFile 은 코드의 형태로 인프라를 구성하는 방법을 텍스트 형식으로 저장해 놓은 파일이며 docker build 를 사용하여 자신만의 이미지를 만들 수 있다.
1.2 Docker Build 란?
DockerFile 및 컨텍스트로부터 이미지를 빌드하는 Docker 명령
1.3 Docker-Compose 란?
Compose는 멀티 컨테이너 도커 애플리케이션을 정의하고 실행하는 도구이다. YAML 파일을 사용하여 애플리케이션의 서비스를 구성하며 하나의 명령을 가지고 모든 컨테이너의 생성 및 시작 프로세스를 수행한다.
2. DockerFile을 이용하여 만들어 보자!!!
2.1 서비스 설계 구성
DataBase Server | WEB/WAS Service | |
Docker Hub Base Image | mariadb:10.4.18 | ubuntu:20.04 |
OS | Ubuntu 20.04.2 LTS | Ubuntu 20.04.2 LTS |
Service | Mariadb 10.4.18 | Nginx 1.18.0 Tomcat 9.0.45 |
Developer | OpenJDK 1.8.x Maven 3.8.1 NodeJS 14.16.1 | |
Dev Source | USE Github | |
Service Port | 3306 | 80, 8080 |
2.2 아키텍처 물리 설계 구성도
대규모 3-Tier 구성 : 로드 발란스를 이용하여 3-Tier 구성을 확장하는 구성 방식. 웹 시스템의 사용자가 많은 엔터프라이즈 어플리케이션일 경우 대부분 대규모 3-Tier 구성을 이용하고 있다.
2.3 Database(Mariadb:10.4.18) Docker Image 만들기
소스 파일은 Github 에서 참고 하시기 바랍니다.
2.4 Nginx & Tomcat(ubuntu:20.04) Docker Image 만들기
소스 파일은 Github 에서 참고 하시기 바랍니다.
2.5 DockerFile Buil 하기 후 Docker Hub 에 업로드 하기
Step1. docker loign
Step2. 작성 한 DockerFile 에서 빌드 하기
• docker build -t tomcat_mariadb:mariadb .
• docker images ## 로컬에 저장된 Docker Images 확인
Step3. 로컬에 만든 이미지 실행 및 확인
• docker run –d tomcat_mariadb:mariadb
Step4. Docker Hub 이미지 업로드
• docker tag tomcat_mariadb:mariadb bchwang/tomcat_mariadb:mariadb
• docker push bchwang/tomcat_mariadb:mariadb
Step5. Docker Hub 에 등록된 이미지 확인
• Docker Hub 에 개인 개정으로 로그인 후 Docker Image 및 Tag 확인
2.6 Docker-Compose 를 이용하여 실행 하기
2.6.1 Local 에서 Build Image 를 이용하여 docker-compose.yml 만들기
소스 파일은 Github 에서 참고 하시기 바랍니다.
2.6.2 Docker Hub Image 를 이용하여 docker-compose.yml 만들기
3. NHN Cloud 를 이용한 Kubernetes 서비스를 구축 방법
3.1 커뮤니티 블로그 서비스 Yaml 설정 하기
NHN Cloud 를 이용하여 커뮤니티 블로그 서비스를 Kubernetes 로 구축 하는 방법을 소개해 드립니다.
아래의 내용을 따라 하시거나 GitHub 의 소스 파일을 참고 시기 바랍니다.
3.2 NameSpace Yaml
3.3 Mariadb Yaml
3.4. Mariadb Service Yaml
3.5 Nginx & Tomcat Service Yaml
3.6 Nginx & Tomcat Yaml
아래의 내용 중 hostAliases 의 ip 정보가 mariadb 의 IP 정보를 입력 하여야 함.
Mariadb 를 실행 한 후에
kuberctl get pod -n project
로 나온 IP 값을 입력 하면 됨.
소스 파일은 Github 에서 참고 하시기 바랍니다.
3.7 커뮤니티 블로그 서비스 Yaml 실행 하기
3.8 공인 IP로 접속 한 화면
4. GitHub 정보 및 커뮤니티 블로그 소개
4.1 개발 환경
Ubuntu/20.x (OS)
mariadb/10.4.18 (DB Service)
tomcat/9.0.45 (WAS Service)
nginx/1.18.0 (WEB Service)
OpenJDK/1.8.x
Maven/3.8.1
NodeJS/14.6.1
4.2 NHN Cloud Kubernetes & Docker 사용해 보기
A. DockerFile 을 이용하여 Docker Images 만들기(Tomcat, Mariadb)
Dockerfile 을 이용하여 Mariadb 이미지 만들기
Dockerfile Build 방법(mariadb Image)
Dockerfile 을 이용하여 nginx_tomcat 이미지 만들기
Dockerfile Build 하는 방법(nginx_tomcat Image)
Docker Hub push 하는 방법
B. Build 된 Tomcat, Mariadb Images 실행 하기
docker images 확인 하기
Local Image 로 실행 하기
docker Hub Image 로 실행 하기
C. Docker-Compose 사용하기
Local Images 로 실행 하기
Docker Hub 에 Push 한 Images 로 실행 하기
D. NHN Cloud Kubernetes 로 사용하기
NHN Cloud 회원 가입 및 Console 로그인 : http://toast.com
NHN Cloud Console 에 Kubernetes Manager Instance 생성
NHN Cloud Console 에서 Kubernetes 생성
NHN Cloud Console 에서 SSH 접속 설정
NHN Cloud 에서 생성된 Instance(Kube-manager) 접속 방법 및 Kubernetes 연결 방법
NHN Cloud 에서 Kubernetes 를 이용하여 서비스 사용하기
TIPs.1 DockerFile 기본 형식 자세히 알아 보기
TIPs 1.1 DockerFile 기본 형식
Command | Description |
FROM | 베이스 이미지 지정 |
RUN | 명령어 실행 |
CMD | 데몬 실행 |
LABEL | 라벨 설정 |
EXPOSE | 포트 설정 |
ENV | 환경 변수 설정 |
ADD | 파일 추가 |
COPY | 파일 복사 |
USER | 사용자 설정 |
WORKDIR | 작업 디렉토리 지정 |
VOLUME | 볼륨 마운트 |
ENTRYPOINT | 데몬 실행 |
ONBUILD | 빌드 후 실행 명 |
TIPs 1.2 Docker Build 기본 형식
Name, Shorthand | Default | Description |
--add-host | Add a custom host-to-IP mapping (host:ip) | |
--build-arg | Set build-time variables | |
--cache-from | Images to consider as cache sources | |
--cgroup-parent | Optional parent cgroup for the container | |
--compress | Compress the build context using gzip | |
--cpu-period | Limit the CPU CFS (Completely Fair Scheduler) period | |
--cpu-quota | Limit the CPU CFS (Completely Fair Scheduler) quota | |
--cpu-shares , -c | CPU shares (relative weight) | |
--cpuset-cpus | CPUs in which to allow execution (0-3, 0,1) | |
--cpuset-mems | MEMs in which to allow execution (0-3, 0,1) | |
--disable-content-trust | true | Skip image verification |
--file , -f | Name of the Dockerfile (Default is ‘PATH/Dockerfile’) | |
--force-rm | Always remove intermediate containers | |
--iidfile | Write the image ID to the file | |
--isolation | Container isolation technology | |
--label | Set metadata for an image | |
--memory , -m | Memory limit | |
--memory-swap | Swap limit equal to memory plus swap: ‘-1’ to enable unlimited swap | |
--network | API 1.25+ Set the networking mode for the RUN instructions during build | |
--no-cache | Do not use cache when building the image | |
--platform | experimental (daemon)API 1.32+ Set platform if server is multi-platform capable | |
--pull | Always attempt to pull a newer version of the image | |
--quiet , -q | Suppress the build output and print image ID on success | |
--rm | true | Remove intermediate containers after a successful build |
--security-opt | Security options | |
--shm-size | Size of /dev/shm | |
--squash | experimental (daemon)API 1.25+ Squash newly built layers into a single new layer | |
--stream | experimental (daemon)API 1.31+ Stream attaches to server to negotiate build context | |
--tag , -t | Name and optionally a tag in the ‘name:tag’ format | |
--target | Set the target build stage to build. | |
--ulimit | Ulimit options |
TIPs 1.3 Docker-Compose 기본 형식
Command | Description |
build | Build or rebuild services |
config | Validate and view the Compose file |
create | Create services |
down | Stop and remove resources |
events | Receive real time events from containers |
exec | Execute a command in a running container |
help | Get help on a command |
images | List images |
kill | Kill containers |
logs | View output from containers |
pause | Pause services |
port | Print the public port for a port binding |
ps | List containers |
pull | Pull service images |
push | Push service images |
restart | Restart services |
rm | Remove stopped containers |
run | Run a one-off command |
scale | Set number of containers for a service |
start | Start services |
stop | Stop services |
top | Display the running processes |
unpause | Unpause services |
up | Create and start containers |
version | Show version information and quit |
Name, Shorthand | Description |
-f, --file FILE | Specify an alternate compose file (default: docker-compose.yml) |
-p, --project-name NAME | Specify an alternate project name (default: directory name) |
--profile NAME | Specify a profile to enable |
-c, --context NAME | Specify a context name |
--verbose | Show more output |
--log-level LEVEL | Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) |
--ansi (never|always|auto) | Control when to print ANSI control characters |
--no-ansi | Do not print ANSI control characters (DEPRECATED) |
-v, --version | Print version and exit |
-H, --host HOST | Daemon socket to connect to |
--tls | Use TLS; implied by --tlsverify |
--tlscacert CA_PATH | Trust certs signed only by this CA |
--tlscert CLIENT_CERT_PATH | Path to TLS certificate file |
--tlskey TLS_KEY_PATH | Path to TLS key file |
--tlsverify | Use TLS and verify the remote |
--skip-hostname-check | Don't check the daemon's hostname against the name specified in the client certificate |
--project-directory PATH | Specify an alternate working directory (default: the path of the Compose file) |
--compatibility | If set, Compose will attempt to convert keys in v3 files to their non-Swarm equivalent (DEPRECATED) |
--env-file PATH | Specify an alternate environment file |
2022년 NHN Cloud 무료 교육일정 : https://doc.skill.or.kr/2022-NHN-Cloud-Education
2022년 NHN Cloud 행사/프로모션 정보 공유 : https://doc.skill.or.kr/2022-NHN-Cloud-Event-Promotion
Last updated