Cloud(Docker)

Rina's·2023년 7월 18일

코드스테이츠

목록 보기
72/96
post-thumbnail

🌐Docker

배포, 실행을 돕는 오픈소스 플랫폼
도커 컨테이너는 이전의 가상화 기술과 달리, 호스트 OS 위에 오버헤드가 적은 가벼운 컨테이너를 만들어 실행하는 방식으로 동작

🐳docker 기본 명령어

  • docker run [옵션] [실행 이미지] [실행 명령어]

ex)docker run -p 8080:8080 -v d/docker/build/libs/docker.jar:/app/docker.jar
openjdk:11 java -jar /app/docker.jar

  • 옵션
    -p 8080:8080 컨테이너 포트 연결 옵션
    -v [호스트 경로]:[컨테이너 경로] 매핑 옵션
    --name [컨테이너 이름 설정]
  • 실행 이미지
    openjdk:11 자바 11
  • 실행 명령어
    java -jar /app/docker.jar docker 실행

🐳도커 이미지 생성

  1. gradle - buildjar - .jar 생성
  2. root 디렉터리에 "docker"를 이름으로 도커 파일 생성
  3. cmd로 dockerfile 경로에서 명령어 실행
    docker build -t [이미지명]:[태그명] . - (온점 입력 주의)
    -t는 이미지에 태그를 지정하는 옵션
    화면에 쭉 생성 로그가 뜨고 DONE 0.0s이 표시되면 성공

🐳도커 파일 작성

FROM openjdk:11 [기반 이미지]
ARG AR_FILE=build/libs/*.jar [경로 변수 설정]
COPY ${JAR_FILE} app.jar
[COPY (호스트 경로 파일)을 (컨테이너 경로 파일)로 복사]
ENTRYPOINT ["java","-jar","/app.jar"][jar 파일 실행]

🐳이미지를 컨테이너로 실행

  • docker run -p 8080:8080 -it [이미지명:태그명] java -jar

포트 옵션을 넣지 않으면 외부 네트워크 연결이 안된다
java -jar 기본 자바 실행 cmd
--name 해당 옵션이 없으면 랜덤 이름의 컨테이너가 생성된다

컨테이너 기본 명령어

docker start 컨테이너명
docker stop 컨테이너명

컨테이너 삭제 옵션

rm 컨테이너 삭제
-f 강제 삭제
-l 해당 컨테이너 참조 링크 삭제
-v 컨테이너와 관련 볼륨 제거

컨테이너 검색 옵션

ps 실행 중인 컨테이너 출력
ps -a 모든 컨테이너 출력
ps -f 필터링 컨테이너 출력("조건=값" 형태)
-n, --last 최근 생성한 n개의 컨테이너 출력
-q 컨테이너 ID만 출력

CONTAINER ID: 컨테이너의 고유 ID 정보
IMAGE: 컨테이너가 생성된 이미지 정보
COMMAND: 컨테이너에서 실행된 명령어 정보
CREATED: 컨테이너가 생성된 시간
STATUS: 컨테이너의 상태 정보
PORTS: 컨테이너에서 실행 중인 포트 정보
NAMES: 컨테이너의 이름 정보

컨테이너 옵션

-a 컨테이너 출력 표시
-d 백그라운드 실행
-i 상호작용을 위한 표준입력(-it로 TTY활성화와 함께 사용)
-P 랜덤 포트 연결
-e 내부 환경변수 설정
--rm 컨테이너 자동삭제
-v 호스트 디렉터리 연결
--link 다른 컨테이너로 연결

-t docker stop시 대기시간
--network 네트워크 설정
--expose 포트 노출(수신대기)
--entrypoint 컨테이너 시작시 실행될 명령어
--user 컨테이너 내부에서 실행될 사용자 설정
--restart 컨테이너 재시작 정책 설정

로그출력

docker logs [옵션] [컨테이너명]
-f 실시간 출력
-timestamps 타임스템프 포함
-details 세부정보 포함

변경 컨테이너로 이미지 커밋

컨테이너 변경 후 컨테이너 사용을 중지할 것
docker stop my_container_name
컨테이너의 변경 사항을 새로운 이미지로 커밋
docker commit my_container_name my_new_image_name:tag

🐳도커 pull/push

  • pull
    docker pull [이미지명]:[특정버전(옵션)]

  • push
    레포지토리를 먼저 생성해야 한다
    docker push [유저네임]/[레포지토리명]:[태그(옵션)]
    로컬 빌드 이미지명과 상관 없이 도커 허브에 등록한 이름[허브네임/레포지토리:테그]으로 push됨(태그가 없다면 latest가 자동 붙는다.)
    즉, [도커네임/레포지토리명]이 [이미지명]으로 사용 됨

  • delete
    docker rmi [이미지명]

docker-compose CLI

하나의 docker-compose에서 관리되는 컨테이너끼리는 동일한 docker network에서 구동

docker-compose.yaml 생성
docker-compose up -d cmd 명령어 실행

docker-compose.yaml 구성코드

version: '3.8'

services:
  nginx: 				#클라이언트
    image: sebcontents/client
    restart: 'always'
    ports:
      - "8080:80"
    container_name: client

  spring:				#서버
    image: 0xnsky/server-spring
    restart: 'always'
    ports:				
      - "4999:3000"
    container_name: server-spring
오랜만에 사용해 보는 json 수동 포멧
`ObjectMapper`의 `writeValueAsString()`메서드로 Map 객체를 String 객체로 바꾼다

컴퓨터 끄고 잘 준비 다 했는데 
그렇게 찾아도 git bash로 도커 디랙토리 마운트 못한게 
억울하기도 하고 해서 다시 컴퓨터 켜고 공부시작..
컨테이너 경로 생성에서 계속 오류가 난다
(자꾸 기본경로를 C:\Program Files\Git 으로 시작하는 문제)
결국 git bash를 포기하고 파워셀 사용법을 익혔다
profile
갭린이 리나

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

덕분에 좋은 정보 얻어갑니다, 감사합니다.

답글 달기