$ docker create -it --name [컨테이너_이름] [이미지_이름]:[태그]
생성
하고 실행하지는 않는다.$ docker run -it --name [컨테이너_이름] [이미지_이름]:[태그]
생성
하고 실행
한다.-p
: 호스트와 컨테이너의 포트를 연결(포워딩)-v
: 호스트와 컨테이너의 디렉토리를 연결(마운트)-e
: 컨테이너 내에서 사용할 환경변수 설정-name
: 컨테이너 이름 설정-rm
: 프로세스 종료 시 컨테이너 자동 삭제-ti
: -i 와 -t 를 동시에 사용한 것으로 터미널 입력을 위한 옵션$ docker inspect [컨테이너_이름]
Docker 종료 코드(Exit Code)는 Docker 컨테이너가 종료될 때의 상태를 나타내며, 각 코드에 따른 의미는 다음과 같다.
0: Docker 프로세스가 모든 명령을 정상적으로 수행하고 종료됨을 의미한다.
255: Docker 이미지에 정의된 ENTRYPOINT 또는 CMD가 완료될 경우 발생한다.
125: docker run 명령이 실패하여 컨테이너가 시작되지 않았음을 나타낸다.
126: 컨테이너 내부에서 명령을 실행하지 못할 경우 발생한다.
127: 컨테이너 내부에서 명령을 찾지 못할 때 발생한다.
137: kill -9 명령으로 인해 컨테이너가 강제로 종료됨을 나타낸다.
141: 잘못된 메모리 참조로 인해 종료됨을 의미한다.
143: Linux Signal(SIGTERM)로 정상 종료될 경우 발생한다.
147: 터미널에서 정지 시그널을 수신하여 종료될 경우 발생한다.
149: 자식 프로세스가 종료되어 컨테이너가 종료됨을 나타낸다.
$ docker container prune
모든
컨테이너 삭제한다.$ docker image prune
$ docker system prune
Docker image 를 만들기 위해서 사용하는 스크립트 파일이다.
Docker file 을 통해 image를 만들게되면 앱환경(라이브러리 및 종속성) 및 앱을 만드는 과정(빌드 및 배포)을 자동화가 가능하며 어느 환경에서든 동일한 결과물을 얻을 수 있다.
docker file 예제
# Dockerfile
FROM ubuntu:latest
MAINTAINER Your Name <your-email@example.com>
RUN apt-get update && apt-get install -y nginx
COPY index.html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
$ docker buildx build -t my-nginx:latest .
$ docker build -t my-nginx:latest . # 위 명령이 실행되지 않는 경우 실행
YAML Ain't Markup Language
의 줄임말로 컴퓨터가 읽을수 있는 설정파일이며 사람이 읽기에도 쉬운 텍스트 형식 파일이다.
설정이나 데이터를 쉽게 알아볼 수 있는 형식으로 나열하며, 목록이나 키-값 쌍 같은 것들을 관리한다.
설정을 정리
하고 관리
하기에 적합한 형태로 여러 컨테이너의 설정을 한 곳에서 쉽게 정리가 가능하다.
문법 정리
들여쓰기
가 잘못된경우 의도와 다르게 구성될수있으니 주의해야한다.
services:
web:
build:
context: . # Dockerfile 의 위치
dockerfile: Dockerfile # Dockerfile 파일명
container_name: testapp_web_1 # 생략하는 경우
# 자동으로 부여 docker run 의 --name 옵션과 동일
ports: "8080:8080" # docker run 의 -p 옵션과 동일
expose: "8080" # 호스트머신과 연결이 아니라
# 링크로 연결된 서비스 간 통신이 필요할 때 사용
networks: testnetwork # networks 를 최상위에 정의한다면 해당 이름을 사용
# docker run의 --net 옵션과 동일
volumes: .:/var/lib/nginx/html # docker run 의 -v 옵션과 동일
environment:
- APPENV=TEST # docker run 의 -e옵션과 동일
command: npm start # docker run 의 가장 마지막
restart: always # docker run 의 --restart 옵션과 동일
depends_on: db # 이 옵션에 지정된 서비스가 시작된 이후에 `web`서비스가 실행
links: db # Docker가 네트워크를 통해 컨테이너를 연결하도록 정의합니다.
# 컨테이너를 연결할 때 Docker는 환경 변수를 만들고
# 컨테이너를 알려진 호스트 목록에 추가하여 서로를 검색할 수 있도록 합니다.
deploy: # 서비스의 복제본 개수 등 지정
replicas: 3
mode: replicated
docker-compose run
$ docker-compose exec web echo "hello world" # 이미 실행된 web 컨테이너에서 echo "hello world"를 실행
$ docker-compose run web echo "hello world" # web 컨테이너에서 echo "hello world"를 실행하고 컨테이너 종료
docker stats
가 있고 외부모니터링 도구를 통해 더 자세한정보 혹은 데이터를 한눈에 파악이 가능하다.주요기능
df
du
/var/lib/docker/containers/[컨테이너ID]/[컨테이너ID]-json.log
에 로그가 기록된다$ docker run --name logs-test --rm -d ubuntu:22.04 /bin/bash -c 'while true; do date; sleep 1; done'
# logs-test 컨테이너의 로그를 전체 출력하기
docker logs logs-test
# logs-test 컨테이너의 로그를 tailing하기
docker logs -f logs-test
# 마지막 10줄부터 로그를 계속 보기
docker logs -f --tail 10 logs-test
$ docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=10 \
--name nginxtest \
--restart always \
-p 80:80 \
-p 443:443 \
nginx:latest
로그사이즈를 최대 1MB, 5개의 파일까지 작성가능하도록 설정하였다.
docker compose 파일에서 설정
services:
app:
...
logging:
driver: 'json-file'
options:
max-size: '10m'
max-file: '10'