Docker 컨테이너 생성 / 시작 / 정지

컨테이너 생성 및 시작(docker container run)

docker container run [옵션] 이미지명[:태그명] [인수]

지정할 수 있는 주요 옵션
옵션설명
--attach, -a표준 입력(STDIN), 표준 출력(STDOUT), 표준 오류 출력(STDERR)에 어태치한다.
--cidfile컨테이너 ID를 파일로 출력한다.
--detach, -d컨테이너를 생성하고 백그라운드에서 실행한다.
--interactive, -i컨테이너의 표준 입력을 연다.
--tty, -t단말기 디바이스를 사용한다.


docker container run 대화식 실행

docker container run -it --name "test1" centos /bin/cal

  • docker container run : 컨테이너를 생성 및 실행
  • -it : 콘솔에 결과를 출력하는 옵션
  • --name "test1" : 컨테이너명
  • centos : 이미지명
  • /bin/cal : 컨테이너에서 실행할 명령

docker container run -it --name "test2" centos /bin/bash컨테이너를 시작하여 /bin/bash를 실행하면 컨테이너 안에서 보통의 Linux 서버와 똑같은 명령 조작을 할 수 있다.



컨테이너의 백그라운드 실행(docker container run)

docker container run [실행 옵션] 이미지명[:태그명] [인수]

지정할 수 있는 주요 옵션
옵션설명
--detach, -d백그라운드에서 실행
--user, -u사용자명을 지정
--restart=[no | on-failure | on-failure:횟수n | always | unless-stopped]명령의 실행 결과에 따라 재시작을 하는 옵션
--rm명령 실행 완료 후에 컨테이너를 자동으로 삭제
docker container run의 백그라운드 실행

docker container run -d centos /bin/ping localhost

  • docker container run : 컨테이너를 생성 및 실행
  • -d : 백그라운드에서 실행하는 옵션
  • centos : 이미지명
  • /bin/ping localhost : 컨테이너에서 실행하는 옵션
    대화식의 경우 명령의 결과가 터미널에 표시되었지만, 백그라운드에서는 터미널에 표시하지 않는 대신 시작된 컨테이너의 컨테이너 ID가 표시된다.

대화식과 백그라운드로 웹서버 실행
docker pull nginx # nginx 이미지 pull

docker run --name webserver2 nginx:latest

대화식으로 웹서버를 실행시키면 이렇게 터미널 상에서 다른 작업을 할 수 없다. control+c로 종료시키고 이번엔 -d 옵션을 사용해서 백그라운드로 작업해보자
이렇게 백그라운드로 실행하면 터미널을 계속 사용할 수 있고 docker container ls 명령으로 컨테이너를 실행중인 컨테이너를 확인해 보면 webserver3가 실행중인 것을 확인할 수 있다.

--restart

명령의 실행 결과에 따라 컨테이너를 재시작할 때는 --restart 옵션을 지정

--restart 옵션
설정값설명
no재시작하지 않는다.
on-failure종료 스테이터스가 0이 아닐 때 재시작한다.
on-failure:횟수n종료 스테이터스가 0이 아닐 때 n번 재시작한다.
always항상 재시작한다.
unless-stopped최근 컨테이너가 정지 상태가 아니라면 항상 재시작한다.
# --restart 옵션
docker run --restart always -d centos:latest sleep 10
# 10초 동안 sleep을 백그라운드로 실행, --restart always로 sleep 10이 계속 반복

docker run --restart on-failure -d centos:latest sleep 10
# 10초 동안 sleep을 백그라운드로 실행 후 exited 됨

docker run --name hello -rm hello-world:latest
# 실행 후 container ls -a로 확인해봐도 찾을 수 없음 명령 실행 후 컨테이너가 자동으로 삭제됨


컨테이너의 네트워크 설정(docker container run)

이 부분은 다음에 포스팅 할 'Docker 컨테이너 네트워크'에서 다루겠습니다. 궁금해도 잠시만 기다려주세요...



자원을 지정하여 컨테이너 생성 및 실행(docker container run)

컨테이너를 시작할 때 CPU와 메모리의 자원 이용을 제한할 수 있다.
docker container stats : 컨테이너 자원 사용 정보를 볼 수 있다.

docker container run 명령의 자원 지정

docker container run [자원 옵션] 이미지명[:태그명] [인수]

지정할 수 있는 주요 옵션
옵션설명
--cpu-shares, -cCPU의 사용 배분(비율)
--memory, -m사용할 메모리를 제한하여 실행(단위는 b, k, m, g 중 하나)
--volume=[호스트의 디렉토리]:[컨테이너의 디렉토리], -v호스트와 컨테이너의 디렉토리를 공유
ocker run -dit --rm centos:lateste
docker run -dit --memory 1g --rm centos:latest
docker run -dit --cpu-shares 512 --rm centos:latest

docker container stats --no-stream
docker ps

docker exec elated_elbakyan dd if=/dev/zero of=/dev/null bs=1M
docker exec serene_feynman dd if=/dev/zero of=/dev/null bs=1M
docker exec cranky_pasteur dd if=/dev/zero of=/dev/null bs=1M
docker stats #하면 cpu 부하 되는거 볼 수 있음
docker container rm -f `docker container ls -a --queit`


docker run --rm -dit --name os1 centos:latest
docker run --cpus 0.3 --rm -dit --name os2 centos:latest dd if=/dev/zero of=/dev/null bs=1M #cpu는 내가 쓰고싶은 cpu의 물리적 한계량을 직접 지정 (0.3개 정도만 쓰겠다.)
docker run --cpus 0.1 --rm -dit --name os3 centos:latest dd if=/dev/zero of=/dev/null bs=1M
docker container stats #에서 보면 CPU가 os2 -> 30% , os3 -> 10%정도 사용하고 있음을 볼 수 있음

컨테이너를 생성 및 시작하는 환경을 지정(docker container run)


docker container run 명령의 환경설정

docker container run [환경설정 옵션] 이미지명[:태그명] [인수]

지정할 수 있는 주요 옵션
옵션설명
--env=[환경변수], -e환경변수를 설정한다.
--env-file=[파일명]환경변수를 파일로부터 설정한다.
--read-only=[true | false]컨테이너의 파일 시스템을 읽기 전용으로 만든다.
--workdir=[패스], -w컨테이너의 작업 디렉토리를 지정한다.
-u, --user=[사용자명]사용자명 또는 UID를 지정한다.
docker run -it -e TEST1=Hello -e TEST2=World --rm centos:latest # 내 맘대로 환경변수 설정

echo $TEST1 # Hello 출력
echo $TEST2 # World 출력

### 환경변수를 파일로 설정해서 사용해보기
cat > env_file
TEST1=Hello
TEST2=World
TEST3=Merong
^C

docker run -it --env-file env_file --rm centos:latest
echo $TEST1 $TEST2 $TEST3


가동 컨테이너 목록 표시(docker container ls)

docker container ls 명령

docker container ls [옵션]

지정할 수 있는 주요 옵션
옵션설명
--all, -a실행 중/정지 중인 것도 포함하여 모든 컨테이너를 표시
--filter, -f표시할 컨테이너의 필터링
--format표시 포맷을 지정
--last, -n마지막으로 실행된 n건의 컨테이너만 표시
--latest, -l마지막으로 실행된 컨테이너만 표시
--no-trunc정보를 생략하지 않고 표시
--quiet, -q컨테이너 ID만 표시
--size, -s파일 크기 표시

docker container ls 명령 결과

항목설명
CONTAINER ID컨테이너 ID
IMAGE컨테이너의 바탕이 된 이미지
COMMAND컨테이너 안에서 실행되고 있는 명령
CREATED컨테이너 작성 후 경과 시간
STATUS컨테이너의 상태(restarting, running, paused, exited)
PORTS할당된 포트
NAMES컨테이너 이름

컨테이너 가동 확인(docker container stats)

docker container stats 명령

docker container stats [컨테이너 식별자]

docker container stats 명령 결과
항목설명
CONTAINER ID컨테이너 식별자
NAME컨테이너명
CPU %CPU 사용률
MEM USAGE/LIMIT메모리 사용량/컨테이너에서 사용할 수 있는 메모리 제한
MEM %메모리 사용률
NET I/O네트워크 I/O
BLOCK I/O블록 I/O
PIDSPID(Windows 컨테이너 제외)

컨테이너 시작(docker container start)

docker container start 명령

docker container start [옵션] <컨테이너 식별자> [컨테이너 식별자]

지정할 수 있는 주요 옵션
옵션설명
--attach, -a표준 출력, 표준 오류 출력을 연다.
--interactive, -i컨테이너의 표준 입력을 연다.

컨테이너 정지(docker container stop)

docker container stop 명령

docker container stop [옵션] <컨테이너 식별자> [컨테이너 식별자]

지정할 수 있는 주요 옵션
옵션설명
--time, -t컨테이너의 정지 시간을 지정(기본값은 10초)

컨테이너 재시작(docker container restart)

docker container restart 명령

docker container restart [옵션] <컨테이너 식별자> [컨테이너 식별자]

지정할 수 있는 주요 옵션
옵션설명
--time, -t컨테이너의 재시작 시간을 지정(기본값은 10초)

컨테이너 삭제(docker container rm)

docker container rm 명령

docker container rm [옵션] <컨테이너 식별자> [컨테이너 식별자]

지정할 수 있는 주요 옵션
옵션설명
--force, -f실행 중인 컨테이너를 강제로 삭제
--volumes, -v할당한 볼륨을 삭제

컨테이너 중단/재개(docker container pause / unpause)

docker container pause 명령

docker container pause <컨테이너 식별자>

docker container unpause 명령

docker container unpause <컨테이너 식별자>


References

  • 완벽한 IT 인프라 구축을 위한 Docker
profile
엔지니어 유망주의 곡괭이질

1개의 댓글

comment-user-thumbnail
2023년 2월 22일

안녕하세요 운영자님
인카토스입니다.
먼저, 댓글로 인사를 드리게 된 점 양해 부탁 드립니다.
이렇게 연락 드린 이유는 이번에 저희가 제작한 도커 각티슈케이스 제품 협찬을 제안드리고 싶어서 연락 드렸습니다.
개발자들에게 많은 사랑은 받은 각티슈케이스입니다.
저희 상품 블로그 포스팅이 가능하실지 여쭙고자 연락드렸습니다.
아니면 클리앙,서버포럼, okky,2cpu,그누보드 등 가입되어 있으신 개발자 커뮤니티가 있으시다면 해당 커뮤니티에 아래와 비슷하게 게시글을 올려주실수 있을까요?

클리앙 : https://www.clien.net/service/board/park/17797443

연락드릴수 있는방법이 댓글밖에 보이지 않아 이렇게 먼저 연락드립니다.

협찬제안에 긍정적인 검토 부탁드리고 제안이 마음에 드신다면 하기 메일로 메일주시면 제품 보내드리도록 하겠습니다.

sungjh0726@naver.com

협찬제품 링크 : https://incatos.shop/surl/P/11

답글 달기