배포, 실행을 돕는 오픈소스 플랫폼
도커 컨테이너는 이전의 가상화 기술과 달리, 호스트 OS 위에 오버헤드가 적은 가벼운 컨테이너를 만들어 실행하는 방식으로 동작
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 자바 11java -jar /app/docker.jar docker 실행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다른 컨테이너로 연결
-tdocker 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
docker pull [이미지명]:[특정버전(옵션)]
push
레포지토리를 먼저 생성해야 한다
docker push [유저네임]/[레포지토리명]:[태그(옵션)]
로컬 빌드 이미지명과 상관 없이 도커 허브에 등록한 이름[허브네임/레포지토리:테그]으로 push됨(태그가 없다면 latest가 자동 붙는다.)
즉, [도커네임/레포지토리명]이 [이미지명]으로 사용 됨
delete
docker rmi [이미지명]
하나의 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를 포기하고 파워셀 사용법을 익혔다
덕분에 좋은 정보 얻어갑니다, 감사합니다.