Fullstack-Study-241204-250625

커리큘럼(12-30/변경)

01. Java
02. git
03. Database 
04. Jsp [Server]

05. HTML,CSS 
07. JS
06. 미니프로젝트-2W

08. SpringFramework , SrpingBoot 
19. 중간프로젝트 (1M)
10. Linux 명령어
11. AWS
12. Docker(v)
13. React JS [Front-end]
14. App - Android
15. 최종프로젝트 (1M)

Docker

Docker File

  1. 파일명은 반드시 dockerfile이어야함
  2. 도커파일에 사용하는 명령문 사용 (from, copy, cmd 등)
  3. build명령으로 dockerfile에 나열된 명령문을 이미지로 생성

docker build -t <파일명:버전명> <dockerfile의 위치>

명령어 설명
FROM 이미지:태그 운영환경의 베이스 이미지명을 기술
COPY 호스트파일경로:이미지의파일경로 사용자의 OS에 있는 파일을 도커 이미지파일 안으로 복사
RUN [커맨드, 매개변수] command를 실행(run)하여 이미지에 포함시키는 역할을 합니다. 도커이미지를 만들 때 1번 실행 (추가할 라이브러리 설치에 사용)
RUN 쉘명령형식 위와 같음
WORKDIR 경로 shell의 cd명령문처럼 컨테이너 상에서 작업 디렉토리로 전환을 위해서 사용됩니다. 이후에 도커는 해당 디렉토리에서 작업
ARG 변수이름=값 변수 선언입니다. 선언한 변수는 dockerfile에서 달러로 접근 가능능
ENV 변수이름=값 컨테이너가 가져야 할 환경변수 선언
VOLUME 각 컨테이너가 파일 또는 데이터를 공유할 수 있도록 host에 생성
EXPOSE 포트/프로토콜 컨테이너 동작시 사용할 포트/프로토콜 지정
CMD [커맨드, 매개변수..] 컨테이너가 처음 실행될 때 실행시킬 서비스 or 스크립트 or 명령문 지정 (컨테이너 실행시 매개변수로 변경 가능)
CMD 쉘명령형식 위와 같음
ENTRYPOINT [커맨드, 매개변수] 컨테이너가 처음 실행될 때 실행시킬 서비스 or 스크립트 or 명령문 지정 (변경불가능 고정명령문)
ENTRYPOINT 쉘명령형식 위와 같음
LABEL 키=값 이미지에 컨테이너의 정보를 저장
USER 유저명 컨테이너 실행시 적용할 유저 설정

docker logs -f <CONTAINER_ID or NAMES>

도커파일 실습1

notepad(vi) Hello.java

public class Hello {
	public static void main(String[] args) {
		System.out.println("hello world docker file");
	}
}

docker search openjdk

notepad(vi) dockerfile

# 이 도커파일의 베이스이미지를 기술
FROM openjdk:11

# 헬로자바 파일을, 이미지 안에 / 경로로 복사 하겠음
COPY Hello.java /

# 1번 실행하고 싶은 명령문이 들어갑니다.
RUN javac Hello.java

# 컨테이너가 실행되기 전 최종적으로 동작할 명령문을 작성
# java프로그램에서 Hello클래스 실행
ENTRYPOINT ["java", "Hello"]
docker build -t <이미지명>:<태그> <빌드할도커파일위치>
docker build -t hellojava:latest .
docker run <옵션> <이미지:태그> 
docker run --name first hellojava:latest 

ENTRYPOINT ["tail","-f","/dev/null"]

도커파일 실습2

FROM openjdk:11

# 도커 컨테이너 안에 폴더 생성
RUN mkdir /home/app

# 도커 컨테이너 안에 작업공간을 이동
WORKDIR /home/app

#
RUN touch project.txt

#우리 프로젝트를 도커 컨테이너 디렉토리 안으로 복사
COPY build/libs/BootMyWeb-0.0.1-SNAPSHOT.jar ./app.jar

#실행
#ENTRYPOINT고정으로 실행시킬 명령문
#CMD는 RUN시에 변경될 수도 있는 명령문
ENTRYPOINT ["java", "-jar"]
CMD ["app.jar"]

docker build -t second .

docker run --name demo-webserver -d -p 8282:8282 second:latest

docker logs -f demo-webserver

Docker Network

도커네트워크

해당 명령문에서 eth0(도커호스트)로 8181요청이 들어오면 컨테이너의 8484로 연결해주는 역할 수행

도커 네트워크의 2가지 형식

  1. default brdige network : 컨테이너 간 아이피를 통해 통신 가능
  2. user defined bridge network : 컨테이너 간 아이피, 컨테이너 명을 통해 통신 가능

도커 네트워크 명령어

docker network
docker network ls

docker inspect <이미지명 or network명>

docker network create 네트워크명
docker network create web-network
driver - 도커 네트워크 인터페이스지정, subnet - 서브넷마스크 범위지정, gateway - 네트워크 입구아이피 지정
docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.1 test-network
docker network connect 네트워크명 컨테이너명
docker network connect web-network webserver
docker network connect web-network webserver-mysql
docker network disconnect 네트워크명 컨테이너명
docker network disconnect web-network webserver

docker network rm <네트워크명>

docker run --net <네트워크명> <이미지>
docker run --name webserver -d -p 8181:8484 --net web-network myweb:v1

Docker Volume

도커 볼륨 명령어

docker volume
docker volume ls
docker volume create <볼륨명>
docker volume create webserver-upload
docker inspect <볼륨명>
docker inspect webserver-upload

docker volume prune

도커 볼륨 연결하기

  1. docker파일 사용
  1. 컨테이너 생성시 볼륨 연결