본문 바로가기
[Cloud & Infrastructure]/[Docker]

[Docker] Docker 실습으로 알아보기 (4/4)

by 코드몽규 2022. 4. 8.
반응형


백그라운드 실행 : Detached모드

1. 옵션 -d <--detach=false>

2. 데몬 모드라고 부르며 컨테이너가 백그라운드로 실행

3. 백그라운드로 실행한 컨테이너 내에 명령어를 실행하면 실행 결과인 표준 출력이 표시되지 않는다.

실행결과를 확인하려면 #docker logs 컨테이너명을 사용한다.

4. 백그라운드 모드는 주로 web server처럼 데몬 형태로 실행을 지속할 애플리케이션에서 사용한다.

 

  • 실습
실습 - web server를 백그라운드 모드로 실행하고 웹 데몬으로 실행을 유지하도록 컨테이너를 실행한다

[root@cent1 ~]# cd
[root@cent1 ~]# cd lab
[root@cent1 lab]# cat Dockerfile #vi Dockerfile로 만들어준 후 확인

FROM  ubuntu:14.04
MAINTAINER suye <a@b.com>
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]
WORKDIR /etc/nginx
CMD ["nginx"]

EXPOSE 80

EXPOSE 443

 

[root@cent1 lab]# docker build -t testimage:1.1 .
Sending build context to Docker daemon 2.048 kB

......................

웹서버를 백그라운드로 실행하여 데몬으로 실행 유지

[root@cent1 lab]# docker run --name test-nginx -d -p 9000:80 -v /root/data:/data testimage:1.1

18722f428456673673dfb66f631808227502a8423775f801936d07407ccc5e66

웹브라우저에서 접속 테스트 => localhost:9000으로 접속 

 


컨테이너의 환경변수 설정

1.  docker run --env=[변수], -e : 환경변수 설정

2.  docker run --env-file=[파일명] : 환경변수를 파일로 설정 (파일의 위치: 호스트서버)

3.  DockerfileENV

ENV는 환경 변수를 설정한다. ENV로 설정한 환경 변수는 RUN, CMD, ENTRYPOINT에 적용된다.

 

  • 실습
[root@cent1 ~]# docker run -it -e "VAR1=100" -e "VAR2=200" --name testcon1  ubuntu:14.04 /bin/bash

root@2b4e3b85a57e:# echo $VAR1
100

root@2b4e3b85a57e:# echo $VAR2
200

root@2b4e3b85a57e:# exit
exit

 
[root@cent1 ~]# docker rm testcon1
testcon1

 

[root@cent1 ~]# vi env.txt
[root@cent1 ~]# cat env.txt

a=100

b=200

c=300

 

[root@cent1 ~]# docker run -it --env-file env.txt --name testcon1  ubuntu:14.04 

 
root@e3647eeb7263:/# echo $a
100

 
root@e3647eeb7263:/# echo $b
200

 
root@e3647eeb7263:/# echo $c
300

 

root@e3647eeb7263:/# exit
exit

[root@cent1 ~]# docker rm -f testcon1
testcon1

 


컨테이너의 작업디렉토리 지정

1.  docker run --workdir=디렉토리명

2.  docker run -w

 

컨테이너의 사용자 이름 지정

1.  docker run --user=사용자명

2.  docker run -u

 

#Dockerfile에 사용자 codmeonkyu계정을 등록하는 RUN 구성

[root@cent1 ~]# cd

[root@cent1 ~]# mkdir lab23

[root@cent1 ~]# cd lab23

[root@cent1 lab23]# cat Dockerfile

FROM ubuntu:14.04

RUN useradd -u 10000 -d /home/codemonkyu -m -s /bin/bash codemonkyu

 

새 이미지 만들기

[root@cent1 lab23]# docker build -t testimage:1.1 .

Sending build context to Docker daemon 2.048 kB

..............

Successfully built b91bfa7b93af

 

#작업 디렉토리 지정 (-w), 사용자 지정(-u)로 컨테이너 실행 시 사용자 hewon이 없어서 에러 난다.

[root@cent1 lab23]# docker run -it -w /labdir -u hewon --name testcon1 testimage:1.1

/usr/bin/docker-current: Error response from daemon: linux spec user: unable to find user hewon: no matching entries in passwd file.

 

작업디렉토리 지정 (-w), 사용자 지정(-u) 로 컨테이너 실행 사용자 codemonkyu로 실행한다.

[root@cent1 lab23]# docker run -it -w /labdir -u codemonkyu --name testcon1 testimage:1.1

 

#labdir 디렉터리에 위치해 있다.

suye@f9dc4cf6c309:/labdir$ pwd

/labdir

 

suye@f9dc4cf6c309:/labdir$ id

uid=10000(suye) gid=10000(suye) groups=10000(suye)

 

suye@f9dc4cf6c309:/labdir$ grep codemonkyu /etc/passwd

suye:x:10000:10000::/home/suye:/bin/bash

 

suye@f9dc4cf6c309:/labdir$ exit

exit

 

[root@cent1 lab23]# docker rm -f testcon1

testcon1

 


docker system 명령어

1.   docker system df            도커 디스크 사용량 표시

2.   docker system events      서버에서 실시간 이벤트 가져오기

3.   docker system info         시스템 전체 정보 표시

4.   docker system prune       사용하지 않는 데이터 제거

 

  • docker system events
[root@cent1 ~]# docker system df

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          4         2         632.1MB   490.6MB (77%)
Containers      4         3         0B        0B
Local Volumes   2         1         0B        0B
Build Cache     0         0         0B        0B
  • docker system info
[root@cent1 ~]# docker system info 또는 docker info

Containers: 4
 Running: 3
 Paused: 0
 Stopped: 1
Images: 4

...................

CPUs: 2
Total Memory: 1.795 GiB
Name: cent1.foosys.com
................
  • docker system prune

1. 사용하지 않는 모든 컨테이너, 네트워크, 이미지(dangling 및 unreferenced) 및 선택적으로 볼륨을 제거한다.
2. --all , -a: 모든 이미지 제거 (cache이미지까지 모두 제거)
3. --filter:  필터링 기능 사용 ('label=<key>=<value>')
4. --force , -f: 확인 메시지지 없이 강제 제거

 

1. docker volume prune: 컨테이너에서 사용하지 않는 볼륨 모두 삭제
2. docker network prune: 컨테이너에서 사용하지 않는 네트워크 모두 삭제
3. docker container prune: 사용하지 않는 컨테이너 모두 삭제
4. docker image prune: 사용하지 않는 이미지 모두 삭제

[root@cent1 ~]# docker system prune

WARNING! This will remove:
        - all stopped containers
        - all volumes not used by at least one container
        - all networks not used by at least one container
        - all dangling images

Are you sure you want to continue? [y/N] y

컨테이너의 자원 사용량 모니터링

#docker stats

#docker top

#docker system df

 

1.  docker container stats <컨테이너 이름,ID> 또는 docker stats : 실시간 모니터링 stats 명령어는 실행 중인 모든 컨테이너의 CPU 사용량, 메모리 제한 및 사용량, 네트워크 I/O, 블록 I/O(하드웨어 입출력) 정보를 출력한다.

2.  docker stats –no-stream : 실시간 모니터링이 아닌 한번만 출력

3.  docker top <컨테이너 이름, ID> <옵션>: ps명령과 비슷하고 옵션도 비슷하다.

4.  docker system df : 사용중인 이미지, 컨테이너, 로컬 볼륨의 총 개수 및 사용 중인 개수, 크기, 삭제함으로써 확보 가능한 공간 사이즈

 

-명령어 특수문자-

 

[Linux] 표준입력 & 출력 & 에러 , 파이프 문자, 쿼팅문자, 와일드카드

Linux에서 Linux에서 모든 환경 구성은 파일로 구성되어 있다. 때문에 리눅스에서 명령어를 사용할때는 파일을 가리키는 디스크립터에 대한 방향을 잘 이해하면 수준높은 작업을 할 수 있다. 아래

codemonkyu.tistory.com

 

 

반응형

댓글