[inception]Docker 기본 개념과 명령어

정하나둘·2024년 1월 15일
0

inception

목록 보기
1/1

Docker





도커 기본 명령어

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 순으로 삭제

한 번에 삭제하기

  1. 컨테이너 stop: docker stop $(docker ps -a -q)
  2. 컨테이너 삭제: docker rm $(docker ps -a -q)
  3. 이미지 삭제: 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

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가 만들어져 효율이 떨어진다.

Docker-compose








profile
내가 다시 보려고 만드는 42서울 본과정 블로그

0개의 댓글