docker 사용법
1. 실행 중인 컨테이너를 보려면 docker ps
2. docker 이미지를 보려면 docker 이미지
3. docker rm id(컨테이너 ID) 컨테이너 삭제(컨테이너 ID는 docker ps를 통해 볼 수 있음, 컨테이너 중지해야 함 3.1 모든 컨테이너 삭제 docker rm `docker ps -a -q`
4. docker stop id(컨테이너 ID) 컨테이너 실행 중지
5. docker rmi id(미러 ID) 이미지 삭제
6 . docker pull ubuntu:16.04 (이미지 이름: 버전 번호) 이미지 다운로드
7. docker run -it ubuntu:16.04 컨테이너 컨테이너 생성 및 실행
-t는 새 컨테이너에 의사 터미널 또는 터미널을 지정하는 것을 의미합니다
- 즉, 컨테이너의 (stdin)과 상호 작용할 수 있다는 의미입니다.
-p는 매핑된 포트를 지정합니다.
-d는 백그라운드에서 컨테이너를 실행하고 컨테이너 ID를 인쇄합니다.
7.1 docker run -dit ubuntu:16.04 Create 및 백그라운드에서 컨테이너 실행
7.2 docker run -ditp 8080:8080 (호스트 포트: 컨테이너 포트) ubuntu:16.04 백그라운드에서 컨테이너 생성 및 실행 및 컨테이너 포트 매핑
8. docker attachment id ( 컨테이너 ID) 실행 중인 컨테이너 환경에 진입
9. Exit Container
9.1exit는 컨테이너를 직접 종료하고 컨테이너의 실행을 종료합니다
9.2 [ctrl+p]+[ctrl+q](단축키)는 컨테이너를 종료하지만 컨테이너 실행을 종료하지 않습니다
10.docker commit -m' version ID ' id(컨테이너 ID) ubuntu:16.04(이미지 및 버전 번호) 이미지 제출 및 이미지 생성(이 명령을 사용하여 빌드된 컨테이너를 패키징할 수 있음) 새 이미지로 넣거나 원본 이미지를 덮어씁니다(즉, 원본 이미지 내용을 수정하여 생성합니다. 이미지 이름이 버전 번호와 동일하면 직접 덮어쓸 수 있습니다))
nginx 공식에서는 실제로 로그 회전 방법에 대한 지침을 제공합니다.
로그 파일 회전
이 설명의 일반적인 아이디어는 다음과 같습니다.
•먼저 이전 로그 파일의 이름을 바꿉니다
•usr1 신호를 nginx 마스터 프로세스에 보냅니다
• 작업자 프로세스는 새 로그 파일을 열고 이전 로그 파일을 닫습니다
사실 우리가 실제로 해야 할 유일한 작업은 처음 두 가지 사항입니다!
$ docker run -d \ -p 80:80 \ -v $(pwd)/logs/nginx:/var/log/nginx \ --restart=always \ --name=mynginx \ nginx:1.11.3nginx의 로그를 현재 디렉터리의 로그 디렉터리에 바인딩하고 마운트했습니다.
test.sh 파일에 다음 콘텐츠를 저장합니다.
#!/bin/bash for ((i=1;i<=100000;i++)) do curl http://localhost > /dev/null sleep 1 done그런 다음 이 스크립트를 실행하여 연속 로그 레코드 생성을 시뮬레이션합니다. 롤링 로그를 생성하는 스크립트다음 내용으로rotatelog.sh 파일을 생성합니다.
#!/bin/bash getdatestring() { tz='asia/chongqing' date "+%y%m%d%h%m" } datestring=$(getdatestring) mv /var/log/nginx/access.log /var/log/nginx/access.${datestring}.log mv /var/log/nginx/error.log /var/log/nginx/error.${datestring}.log kill -usr1 `cat /var/run/nginx.pid`getdatestring 함수는 현재 시간을 가져와서 "201807241310"과 같은 문자열 형식으로 지정합니다. 파일 이름을 지정할 시간입니다. 시간대는 여기서 tz='asia/chongqing'을 통해 지정됩니다. 기본 형식은 UTC 시간이므로 사용하기 이상합니다(실시간으로 +8시간을 알아내야 함). 다음 두 개의 mv 명령은 로그 파일의 이름을 바꾸는 데 사용됩니다. 마지막으로 kill 명령을 통해 usr1 신호를 nginx 마스터 프로세스로 보냅니다. 다음 명령을 통해 Rotatelog.sh 파일에 실행 권한을 추가하고 이를 $(pwd)/logs/nginx 디렉터리에 복사합니다.
$ chmod +x rotatelog.sh $ sudo cp rotatelog.sh $(pwd)/logs/nginx
롤링 작업을 정기적으로 수행합니다.
우리 nginx는 컨테이너에서 실행되므로 컨테이너의 nginx 마스터 프로세스에 usr1 신호를 보냅니다. 따라서 docker exec 명령을 통해 mynginx 컨테이너에서 Rotatelog.sh 스크립트를 실행해야 합니다.
$ docker exec mynginx bash /var/log/nginx/rotatelog.sh
위를 실행합니다. 명령을 한 번만 실행하면 예약된 대로 새 로그 파일 배치가 생성됩니다. $ docker exec mynginx bash /var/log/nginx/rotatelog.sh
执行一次上面的命令,会如期产生一批新的日志文件:
下面我们把这个命令配置在定时任务中,让它每天早上 1 点钟执行一次。执行 crontab -e 命令,并在文件的末尾添加下面的行:
* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh
다음으로 예약된 작업에서 이 명령을 구성하고 매일 아침 1시에 한 번 실행되도록 합니다. crontab -e 명령을 실행하고 파일 끝에 다음 줄을 추가합니다:
🎜* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh
🎜🎜🎜🎜저장하고 종료하세요. 아래 그림은 작성자의 테스트 중 5분마다 스크롤한 효과입니다.
호스트에서 직접 로그 파일을 mv하면 어떨까요?
바인딩을 통해 마운트된 데이터 볼륨의 내용이 호스트에서 볼 때와 컨테이너에서 볼 때 동일하기 때문에 이론적으로 가능합니다. 그러나 실제로 이 작업을 수행하면 권한 문제가 발생할 가능성이 높습니다. 호스트 머신에서는 일반적으로 일반 사용자를 사용하지만 컨테이너에 생성된 로그 파일의 소유자는 특수 사용자가 되며 일반적으로 다른 사용자에게는 쓰기 및 실행 권한이 부여되지 않습니다.
물론입니다. , 호스트 시스템에서 루트 사용자를 사용하는 경우 문제가 없습니다.
호스트 컴퓨터에서 신호를 보낼 수 있나요?
사실 이 질문의 전체 이름은 다음과 같아야 합니다. 호스트에서 도커 컨테이너의 nginx 마스터 프로세스로 신호를 보낼 수 있습니까?
답은 그렇습니다.
다음 명령을 통해 컨테이너의 프로세스 1번(nginx 마스터)에 usr1 신호를 보낼 수 있습니다.
$ docker container kill mynginx -s usr
(이 방법은 프로세스 1번에만 신호를 보낼 수 있습니다):
위의 두 가지를 결합하여 질문으로 docker에서 nginx 로그를 스크롤하는 다른 방법을 작성할 수 있습니다. 이 방법은 docker exec 명령을 통해 컨테이너에서 명령을 실행할 필요가 없지만 호스트 시스템에서 모든 작업을 완료합니다.
•먼저 컨테이너 데이터 볼륨에 있는 로그 파일의 이름을 바꿉니다
• 컨테이너 usr1 신호
위 내용은 Docker에서 nginx 로그 파일을 스크롤하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!