docker pull os명(서버, 프로그램명) :
해당 OS나 프로그램이 설치된 OS 이미지를 도커 서버에 다운로드 한다.
docker images :
현재 도커서버가 가진 이미지 목록을 보여준다
docker rmi 이미지이름(image ID) :
이미지 목록에서 해당 이미지 삭제
docker ps :
실행중인 컨테이너 목록을 보여준다. (-a 옵션: 실행중이거나 꺼져있는 컨테이너 등 모든 컨테이너 목록)
docker stop container ID :
실행중인 컨테이너 ID 종료
docker rm container ID :
컨테이너 ID 삭제(실행 중엔 삭제 안됨)
컨테이너가 실행중이라면
docker stop, docker rm, docker rmi 순으로 삭제
한 번에 삭제하기
- 컨테이너 stop: docker stop $(docker ps -a -q)
- 컨테이너 삭제: docker rm $(docker ps -a -q)
- 이미지 삭제: docker rmi $(docker images -q)
-----여기서 -q옵션은 컨테이너 ID만 출력하는 옵션-----docker run 이미지 이름 :
이미지를 기반으로 컨테이너 실행 (이미지가 없으면 hub에서 다운받아 실행)
-d 옵션: detached 모드로 컨테이너 실행(백그라운드, 데몬)
-p 옵션: Host 운영체제 port:컨테이너 포트로 host os와 컨테이너 포트포워딩 (ex: docker run -p 8080:80 debian:bullseye)
-it 옵션: 보통 둘이 같이 씀, 터미널 실행하고 입력(키보드) 전달docker attach 컨테이너 ID(이름) :
실행중인 컨테이너 접근
docker commit 컨테이너ID docker_hubID/이미지명:태그명 :
현재 작동중인 컨테이너 보존(이미지로 만듦)
docker push 이미지명 :
docker-hub에 업로드
docker logs 컨테이너ID :
해당 컨테이너 ID 로그 출력
docker build :
dockerfile을 이미지로 빌드한다
-t 이미지명 : 만들어낼 이미지 이름 설정 옵션
-f 도커파일명 : 도커파일 이름 지정 옵션
Dockerfile: DockerImage를 생성하기 위한 스크립트(설정파일)이다.
Dockerfile의 장점
- 이미지가 어떻게 만들어졌는지를 기록한다.
- 배포에 용이하다
- 컨테이너(이미지)가 특정 행동을 수행하도록 한다.(entrypoint, cmd...)
Dockerfile 명령어
FROM : 기본이미지 + tag명
WORKDIR : 작업수행 디렉토리 설정
(WORKDIR /bin)
ADD : 호스트 운영체제 파일을 컨테이너 내부에 넣어줌
(ADD ./압축파일.zip ./ -> 호스트 OS의 압축파일.zip을 ./(workdir 주소로 이동))
ADD는 압축파일이 풀린 상태로 올려짐COPY : ADD와 비슷하지만 압축이 안 풀림
RUN : 리눅스에서 실행되는 명령어, 실행 타이밍이 도커파일을 이미지로 빌드할 때 실행되기 때문에 주로 라이브러리를 설치하는 용도로 쓰인다.
(RUN apt-get update)
ENTRYPOINT : 컨테이너가 실행될 때 실행할 명령어 또는 프로세스를 지정하는 명령어(CMD와 비슷하지만 ENTRYPOINT는 컨테이너가 실행될 때 무조건 동작하는 명령어이다.CMD는 대체될 수 있는 변수같은 존재.)
(ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "application.jar"]
CMD : ENTRYPOINT와 동작 자체는 같지만 실행순서가 늦다.
예를들어 도커파일을 다음과 같이 작성하면,
WORKDIR /app COPY build/aws-v3-0.0.3.jar ./application.jar ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "application.jar"] CMD ["--server.port=8080"]
해당 순으로 명령어가 동작한다.
java -jar -Dspring.profiles.active=dev application.jar --server.port=8080
즉 ENTRYPOINT는 무조건 실행할 명령어를 넣어야하고(목적) CMD는 옵션 같은 것을 넣는게 좋다(옵션).
또한 CMD 명령어는 dockerfile에 명시되어 있어도 RUN 명령문 이미지명 뒤의 마지막 명령에 의해 대체될 수 있다.
dockerfile을 위와같이 작성해도 해당 dockefile 빌드 후에 RUN 할 때,
docker run -dit -p 8080:5000 java-server --server.port=5000 이렇게 실행하면 --server.port=5000이 CMD가 되어 dockerfile 안의 CMD는 무시된다.ENV : 도커파일 내부의 환경변수 설정
두 가지 방법이 있다.
1. ENV [key][value] : 단일 환경변수에 하나의 값 지정
2. ENV [key]=[value] : 한 번에 여러개의 값 지정
2번 예시ENV NAME="wonlee"\ NICK=won\ AGE=22
1번 방법으로 여러개의 환경변수 설정 시 여러개의 이미지가 덮어씌워진 layer가 만들어져 효율이 떨어진다.