목차
기본적으로 기억해야 하는 것
pull - run - exec
docker pull : 이미지 다운
docker run : 컨테이너를 생성하고 실행 => 실행중인 컨테이너 생성
docker exec : 실행중인 컨테이너에 명령어 실행하기
도커의 기본 명령어
1. 컨테이너 생성 및 실행
1) 컨테이너 생성(중지된 상태) docker container create
docker container create <옵션> 이미지명 <명령어> <인자>
docker container create --name webserver -p 8080:80 httpd
=> webserver라는 이름의 contianer를 생성하는데 httpd 이미지를 이용하고 호스트의 포트는 8080이고 컨테이너의 포트는 80
container가 중지된 상태로 생성되기 때문에 container를 실행시켜야 함
2) 컨테이너 실행 docker container start
docker container start <컨테이너 이름/id>
2. 컨테이너 생성 후 바로 자동으로 시작 docker container run
docker run [옵션] [이미지] [명령어] [인자]
docker container run --name nginx -d -p 8180:80 nginx
옵션
--name 컨테이너 이름
-e => 환경변수 옵션
-d => 백그라운드 실행
-p 포트
-it => i옵션과 -t 옵션을 같이 쓰는 경우입니다. docker 컨테이너에 표준 입력(stdin)을 열어두고(-i), 가상 터미널을 열어(-t) 키보드의 입력을 표준 입력으로 전달할 수 있도록 하는 옵션
-p 8180:80
첫번째 포트 -> 호스트의 포트
두번째 포트 -> 컨테이너의 포트
사용자는 호스트 포트로 접속 -> 호스트 포트로 접속된 것은 컨테이너의 포트로 넘겨줌
따라서 사용자는 컨테이너의 포트 정보를 받게됨.
※ 호스트의 포트는 겹치면 안됨. 컨테이너의 포트는 겹쳐도 됨 -> 독립적이기 때문
=> 포트 포워딩 : A라는 포트로 들어온 접속을 B로 보내라
nginx
이미지 이름
뒤에 태그가 없을 경우에는 가장 최신 버전을 다운한다
▷nginx pull 안했는데 실행되는 이유 => run 할때 이미지가 없을 경우에는 image 다운먼저 해주기 때문(create도 마찬가지)
cf) docker pull => 이미지 다운로드 => 도커사에서 이미지 다운로드 횟수 제한 => cj에서 나가는 ip의 다운로드 횟수를 제한 -> 이를 회피하기 위해 dockerhub에서 회원가입 한 후 login해서 id와 password를 통해 이미지 다운로드 -> 이미지 제한 완화
3. 컨테이너 리스트를 반환해주는 명령어
실행하고 있는 컨테이너 리스트
# docker ps
# docker container ls
모든 컨테이너 리스트(중단된것 까지)
# docker ps -a
# docker container ls -a
4. 컨테이너 실행, 중지 및 재실행(start, stop, restart)
컨테이너 실행
# docker container start <컨테이너 이름/아이디>
컨테이너 중지
# docker container stop <컨테이너 이름/아이디>
컨테이너 재실행
# docker container restart <컨테이너 이름/아이디>
5. 컨테이너 일시 중지(pause, unpause)
컨테이너 일시 중지
# docker container pause <이미지 이름/id>
컨테이너 일시 중지 다시 실행
# docker container unpause <이미지 이름/id>
6. 컨테이너 내부 정보 확인하기(inspect)
# docker container inspect <이미지 이름/id>
7. 컨테이너 접속 및 그 내부 정보 변경하기(exec)
# docker exec <CONTAINER_ID/NAME> <COMMAND>
ex)
[root@servera ~]# docker container exec -it nginx /bin/bash
root@69bb004c17d3:/# echo 'Docker index file test' > /usr/share/nginx/html/index.html
root@69bb004c17d3:/# exit
exit
[root@servera ~]# curl http://127.0.0.1:8180/index.html
Docker index file test
nginx라는 컨테이너로 접속
/bin/bash 를 이용하여 nginx로 접근하겠다라는 뜻
/bin/bash => /bin폴더에 있는 bash란 이름의 쉘로 쉽게 생각하자면 linux의 prompt라고 생각하면된다
/bin/bash는 컨테이너의 os 명령어로 사용안되는 컨테이너도 있으니 주의하자
curl을 이용하여 확인하면 index.html 파일이 변경되어 있는것을 확인 할 수 있다
=> 내부의 정보를 변경할 수 있다! > 이는 container가 writable하다는 뜻!
cf)
8180 -> 호스트 상에 존재하는 포트 => 같은 포트가 존재하면 안됨
0.0.0.0 => 서버a에 존재하는 모든 ip에 접근 가능하다는 뜻
컨테이너의 내부 데이터 변경 가능한것을 확인할 수 있다
서버a의 ip가 213.0.113.3이므로 윈도우 브라우저에서 접속해도 변경되어 있는 것을 확인할 수 있다
컨테이너 생성 / 컨테이너 내부 정보 변경 / 컨테이너 내부정보 확인 3가지가 모두 일치 -> 생성하고 변경했는데 확인했을때 모두 같아야 한다
8. 컨테이너 삭제하기
docker rm [CONTAINER_NAME/ID]
docker rm -f [CONTAINER_NAME/ID] 실행되고 있는 컨테이너도 삭제 가능
docker rm -f $(docker ps -aq) 실행 중인 모든 컨테이너들 다 삭제
docker container prune 정지된 컨테이너만 삭제
9. 기타
컨테이너 로그 정보 확인(logs) : 컨테이너가 발생시킨 로그 정보를 확인하는 방법
docker container logs -f nginx
컨테이너 상태 정보 확인(stats) : 컨테이너의 상태(CPU, MEM 등)를 실시간으로 확인
# docker container stats nginx
컨테이너 프로세스 및 포트 확인하기(top, port)
# docker container top nginx
# docker container port nginx
컨테이너 이름 변경하기(rename)
# docker container rename webserver apache_server
컨테이너의 파일 복사하기(cp)
# docker container cp index2.html apache_server:/usr/local/apache2/htdocs/
cp -> 호스트 상의 파일을 컨테이너로 복사 / 컨테이너의 파일을 호스트상으로 복사
cp를 이용해서도 컨테이너 내 파일 변경 가능
컨테이너 변경 정보 확인(diff)
# docker container diff apache_server
A : 추가된 파일 D : 삭제된 파일 C : 수정된 파일
Container Quota 사용하기
컨테이너 메모리 할당
# docker run --name nginx -d -p 8080:80 --memory="100m" nginx
100메가를 컨테이너에 할당
# docker container update --memory="200m" nginx
업데이트 => 실시간 변경이 가능함
메모리 업데이트해서 증가도 가능
# docker container update --memory-swap="500m" nginx
리눅스는 기본적으로 파티션이 두개 있음 => root와 swap
swap -> 하드디스크 공간을 메모리처럼 사용하는 개념
swap은 기본적으로 200메가 정도 됨. 이를 500메가로 업데이트
컨테이너 cpu 할당
docker run --name nginx -d -p 8080:80 --cpuset-cpus=2 nginx
몇번째 CPU를 사용할건지
docker run --name nginx2 -d -p 8180:80 --cpus=3 nginx
cpu 개수 선택