컨테이너 단위로 애플리케이션을 패키징, 배포 실행하기 위한 플랫폼이다.
이렇게 격리 가능한 이유?
Registry
에서 도커 Image
를 가지고와 Container
화 시킨다.: 도커 이미지를 만들때 빌드 과정에서는 필요하지만, 최종적으로는 필요 없는 레이어는 삭제
docker search tomcat
docker pull {이미지 이름}:{테그}
docker rmi {이미지 이름/ 이미지 번호}
docker images
이미지 중 <none> 이라고 뜨는 것은 댕글링(dangling) 이미지라고 한다.
docker images -f dangling=true
docker images | head -n 3
docker history nginx:stable
docker run -d --name {별명} {이미지명}
예시
docker run -d -p 8080:80 --name mynginx --restart always nginx
docker ps
docker ps -f name=mynginx
docker ps -a
docker ps -q
docker build -t {이미지 이름} .
docker stop {컨테이너 명, 혹은 컨테이너아이디}
docker stop $(docker ps -q -f name=mynginx )
docker ps -a -f ancestor=nginx
docker rm {컨테이너 명 혹은 컨테이너 아이디}
docker tag {프로그램 명} {이미지명}/{테크}
docker inspect {컨테이너 명}
docker exec -it {컨테이너 명 } bash
docker exec {컨테이너} {리눅스 명령어}
docker push {이미지명}/{테그}
docker cp {호스트 os의 파일 경로} {컨테이너이름}:{컨테이너 내부 경로}
볼륨이란? 도커 컨테이너가 접근할 수 있는 호스트 os의 공간
docker volume create {볼륨 이름}
docker volume inspect sample-volume
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/sample-volume/_data",
"Name": "sample-volume",
"Options": {},
"Scope": "local"
}
]
docker run -v {볼륨명}:{컨테이너 내부 경로} {볼륨명} {컨테이너이미지}
FORM {이미지명}
: 해당 이미지를 베이스로 서버를 생성
COPY {호스트 OS에 파일경로} {게스트 OS에 옮겨 놓을 파일 경로}
: 옮겨놓을 파일
LABEL {키}={벨류}
: 키벨류 형식으로 이미지에 부가적인 설명 추가
EXPOSE {포트번호}
: 이 포트번호로 컨테이너 구동
WORKDIR {게스트 OS 경로}
: 작업 경로
ENTRYPOINT [ "실행할 명령어" ]
: 컨테이너 안에서 실행할 명령어 리스트
: 두번 빌드함. 하나는 호스트 OS에서 하나는 컨테이너 내 게스트 OS에서
예시) 도커 파일
FROM openjdk:8 AS sample
RUN chmod 700 mvnw
RUN ./mvnw clean package
FROM openjdk:8
EXPOSE 8089
COPY --from=sample target/sample.jar /app/sample.jar
WORKDIR /app
ENTRYPOINT [ "java", "-jar", "app.jar" ]