컨테이너 생성 후 실행하기 - docker run
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
docker run -d -p 80:80 httpd:latest
# run : 이미지를 사용해 컨테이너를 실행시킵니다.
# -d : 컨테이너를 데몬(백그라운드)으로 실행시킵니다.
# 80:80 : 80번 포트로 접속했을 때 컨테이너에 접근할 수 있도록 포트포워딩 설정을 해줍니다.
# httpd:latest : httpd의 가장 최신 이미지를 사용해 컨테이너를 생성합니다.
# run 시 이미지가 존재하지 않으면 다운받고 컨테이너를 생성하고 바로 실행 해준다.
docker run 옵션
옵션설명-i | 사용자가 입출력 할 수 있는 상태 |
-t | 가상 터미널 환경을 에큘레이션. |
--it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 (컨테이너의 표준 입력과 로컬 컴퓨터의 키보드 입력을 연결) |
-d | detached mode 흔히 말하는 백그라운드 모드. 데몬(백그라운드) 실행하여 프로세스가 끝나도 유지 |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
-h | 컨테이너의 호스트 이름을 설정 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-w | Dockerfile의 WORKDIR 설정을 덮어쓰기 |
--entrypoint | Dockerfile의 ENTRYPOINT설정을 덮어쓰기 |
--name | 컨테이너 이름 설정 |
--rm | 프로세스 종료시 컨테이너와 관련된 리소스(파일 시스템, 볼륨) 자동 제거 |
--link | 컨테이너끼리 연결 [컨테이너 명:별칭] |
--restart | docker desktop을 실행시킬때마다 container의 자동 restart 실행 여부 |
- no : container를 재시작 시키지 않는다.
- on-failure[:max-retries] : 컨테이터가 정상적으로 종료되지 않은 경우(exit code가 0이 아닌경우)에만 재시작 max-retries를 통해서 최대 시도회수를 지정할수 있다.
- always : 컨테이너를 항상 재시작 시킨다. exit code에 상관없음.
- unless-stopped : 컨테이너를 stop시키기 전까지 항상 재시작한다. |
-d 옵션
많은 경우 컨테이너를 백그라운드에서 실행해야 하는데요. 이 때는 -d옵션을 사용하면 된다. -d
옵션을 사용하면 컨테이너가 detached 모드에서 실행되며, 실행 결과로 컨테이너 ID만을 출력한다.
docker run -d python:3.8-alpine python -m http.server
-it 옵션
-i옵션과 -t옵션은 같이 쓰이는 경우가 많다. 이 두 옵션은 컨테이너를 종료하지 않은체로, 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용한다. 따라서, -it옵션은 특히 컨테이너의 쉘(shell)이나 CLI 도구를 사용할 때 매우 유용하게 사용된다.
docker run -it python:3.8-alpine
docker run -it python:3.8-alpine /bin/sh #shell로 열기
--name 옵션
Docker 컨테이너를 제어할 때, --name옵션을 사용해서 컨테이너에 이름을 부여해주면 해당 이름으로 컨테이너를 식별할 수 있다.
docker run -d --name my-server python:3.8-alpine # 해당 컨테이너의 이름을 my-server로
-e 옵션
Docker 컨테이너의 환경변수를 설정하기 위해서는 -e옵션을 사용한다. 또한, -e옵션을 사용하면 Dockerfile의 ENV설정도 덮어써지게 된다.
docker run -e FOO=bar python:3.8-alpine env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=92ebed448fb3
FOO=bar
LANG=C.UTF-8
GPG_KEY=E3FF2839C048B25C084DEBE9B26995E310250568
PYTHON_VERSION=3.8.2
PYTHON_PIP_VERSION=20.0.2
PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/d59197a3c169cef378a22428a3fa99d33e080a5d/get-pip.py
PYTHON_GET_PIP_SHA256=421ac1d44c0cf9730a088e337867d974b91bdce4ea2636099275071878cc189e
HOME=/root
-p 옵션
-p 옵션은 호스트와 컨테이너 간의 포트(port) 배포(publish)/바인드(bind)를 위해서 사용된다. 호스트(host) 컴퓨터에서 컨테이너에서 리스닝하고 있는 포트로 접속할 수 있도록 설정한다.
docker run -d -p 80:80 httpd:latest
-v 옵션
-v옵션은 호스트와 컨테이너 간의 볼륨(volumn) 설정을 위해서 사용된다. 호스트(host) 컴퓨터의 파일 시스템의 특정 경로를 컨테이너의 파일 시스템의 특정 경로로 마운트(mount)를 해준다.
docker run -v `pwd`:/etc python:3.8-alpine cat /etc/test.txt
#호스트 컴퓨터의 현재 디렉터리를 컨테이너의 /etc 경로로 마운트한 후, 그 안에 있는 test.txt 파일의 내용을 출력
-w 옵션
w 옵션은 Dockerfile의 WORKDIR 설정을 덮어쓰기 위해서 사용됩니다.
docker run -w /etc python:3.8-alpine pwd
# 컨테이너의 작업 디렉터리를 /etc로 변경
--entrypoint 옵션
--entrypoint옵션은 Dockerfile의 ENTRYPOINT 설정을 덮어쓰기 위해서 사용된다.
docker run --entrypoint python python:3.8-alpine --version
# python:3.8-alpine 이미지로 부터 python --version을 실행
-rm 옵션
--rm옵션은 컨테이너를 일회성으로 실행할 때 주로 쓰이는데 컨테이너가 종료될 때 컨테이너와 관련된 리소스(파일 시스템, 볼륨)까지 깨끗이 제거한다.
docker run --rm -it wernight/funbox nyancat
Docker 이미지 다루기
이미지 검색하기 - docker search
docker search <imageName>
이미지 다운받기 - docker pull
docker pull <imageName>:<tag>
# sudo docker pull tegongkang/morningtest:latest
다운받은 이미지 확인하기 - docker images
docker images
# REPOSITORY : 이미지 저장소 이름
# TAG : 이미지 버전
# IMAGE ID : 이미지의 고유한 id
# CREATED : 이미지 생성일(마지막 업데이트 일)
# SIZE : 이미지 용량
이미지 생성하기 - docker build
docker build <옵션> <Dockerfile path>
이미지 삭제하기 - docker rmi
docker rmi <IMAGE ID>
Docker 컨테이너 다루기
컨테이너 목록 보기 - docker ps
# 실행중인 컨테이너 목록 확인하기
sudo docker ps
# CONTAINER ID : 컨테이너가 가지고 있는 고유한 id
# IMAGE : 컨테이너가 생성될 때 사용된 이미지
# COMMAND : 컨테이너가 생성될 때 실행되는 명령어
# CREATED : 생성 후 경과 시간
# STATUS : 컨테이너 상태
# PORTS : 사용중인 포트
# NAMES : 컨테이너 이름
sudo docker ps -a # -a : 중지된 컨테이너 목록까지 포함해서 모두 확인하기
컨테이너 생성하기 - docker create
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
# docker create -it --name "morningtest" tegongkang/morningtest:latest
컨테이너 실행하기 - docker start
docker start [OPTIONS] CONTAINER [CONTAINER...]
# 실행하고 있는 컨테이너를 재시작
docker restart [OPTIONS] CONTAINER [CONTAINER...]
컨테이너 중지하기 - docker stop
docker stop <container>
실행 되고 있는 컨테이너 내부로 들어가기 - docker exec, docker attach
docker exec
exec는 실행되고 있는 컨테이너에 새로운 명령을 할 수 있는 명령어. 이 명령어는 이미 실행되고 있는 프로세스에서만 일시적으로 실행된다.
docker exec -it <container> /bin/bash
docker exec -it <container> bash
# containser_id : sudo docker ps를 쳤을 때 확인되는 container_id. 컨테이너 이름도 가능
# /bin/bash or bash : 컨테이너에 접속할 때 사용되는 쉘을 입력합니다.
# 이미지에 따라 /bin/bash라는 쉘이 존재하지 않을 수 있는데, 이 경우에는 /bin/sh를 사용해 접속합니다.
docker attach
attach는 실행되고 있는 컨테이너에 접속하는 명령어. 이 명령어로 컨테이너에 진입할 시 백그라운드로 실행한 것이 포그라운드로 로그가 나오게 된다.
- Bash Shell에서 exit 또는 Ctrl + D를 입력하면 컨테이너가 정지된다.
- Ctrl + P, Ctrl + Q를 차례대로 입력하여 컨테이너를 정지하지 않고, 컨테이너에서 빠져나온다.
docker attach <container>
💡 포그라운드와 백그라운드
foreground는 하나의 명령이 실행되고 있는 동안에는 다른 명령을 실행할 수 없다.간단하게 명령을 실행하고 결과까지 기다리는 방법으로 보통 로그들을 다 확인 가능하다고 보면 된다.
background는 프로세스를 계속 실행시키면서도 다른 프로세스를 실행시킬 수 있다. 즉, 도커 컨테이너를 실행 중인 상황에서 다른 명령을 실행할 수 있다. 결과가 나오기 전에 로그들을 확인하기 어렵다고 보면 된다.
컨테이너 로그 조회 하기 - docker log
docker container logs -t <container>
컨테이너 이름 변경 - docker rename
docker rename <container_name> <new container_name>
# -t : time
컨테이너 삭제하기 - docker rm
docker rm <container> # 컨테이너가 실행중이면 종료하고 삭제 해야한다.
docker rm -f <container> # -f : 컨테이너의 실행중 여부와 관계 없이 강제로 삭제합니다.
# 한번에 모든 컨테이너를 삭제
docker container prune
'스파르타코딩클럽 > Docker' 카테고리의 다른 글
Docker 란 무엇인가? (0) | 2022.11.20 |
---|---|
(M1) Docker 설치하기 (0) | 2022.11.20 |