레지스트리에서 이미지 가져오기
(docker image pull)
registry = hub
repository = nginx 등등
tag = 버젼
# docker image pull [옵션] 이미지명 [:태그명]
옵션 | 설명 |
--all-tags, -a | 저장소에서 태그가 지정된 이미지를 모두 다운로드 |
--disable-content-trust | 이미지 확인 건너뛰기 |
docker image pull nginx
도커의 tag란 무엇일까?
nginx:1.19.10
repo+tag = image라고 부름
이미지 목록 보기 (docker image ls) | |
옵션 | 설명 |
--no-trunc | 결과를 모두 표시 |
--quiet, -q | 이미지 ID만 표시 |
-> [-q]만 했더니 긴 내용 중 ID만 추출해서 보여준당
docker image inspect
(inspect = 검사하다)
하나 이상의 이미지에 대한 자세한 정보 표시 | |
옵션 | 설명 |
--format, -f | 원하는 정보만 출력 |
-f가 format이 아니라 filter의 의미일 수도 있당
# docker image inspect nignx 라고만 검색하면 너무 많은 정보가 나온다.
docker image inspect -f "{{.Os}}" nginx
여기서 .은 root라고 생각하면 된당
이렇게 "{{.대문자,소문자}}" 순으로 기입하면 해당 내용만 추출해서 볼 수 있다.
inspect 함수를 이용해서 변수를 출력하는 방법
test=$(docker image inspect -f "{{.Metadata.LastTagTime}}" nginx)
echo $test
변수를 출력하는 방법
컨테이너 생성
(docker container create)
-p = publish
80:80 = port forward
create했지만 리스트에 없는 이유는 '실행 중'인 컨테이너만 보여지기 때문이다.
docker container ls --all
[-a] 옵션을 주면 실행과 상관없이 모든 컨테이너 리스트를 볼 수 있다!!
컨테이너 시작
(docker container start)
컨테이너 중지
(docker container stop)
80포트가 바로 사라짐
당연히 사이트도 열리지 않음!
만약, 컨테이너가 중지되었는데 어떤 이유로 종료가 되었는지 알고 싶을 때는 [-a] 명령어를 통해서 코드번호를 확인해!!
컨테이너 삭제하기
(docker container rm -f [컨테이너 명])
여기서 순서가 있는데 무조건 stop을 시키고 삭제를 시켜야 한다.
하지만 정지와 삭제를 함께 삭제를 시키기 위해 꼭 [-f] 명령어를 사용하면 된다.
-f = force
만약 컨테이너를 만들었는데 같은 이름으로 컨테이너를 만든다면?
당연히? 만들어지지 않는다.
리스트를 보아도 1개만 존재!
컨테이너 이름이 다른데 컨테이너 실행이 되지 않는 이유
컨테이너 이름은 동일하지만 위의 문제는 포트번호가 충돌이 남..
포트번호를 변경하고자 하더라도 쉽지 않다..
그래서 컨테이너를 지우고 새로 만드는 것이 더 쉽다.
이것이 바로 도커의 단점!!
그래서 생겨난 것이 바로 쿠버네티스!!
삭제하고..
컨테이너명과 포트번호를 다르게 했더니 실행이 되었다!!!
만약, 컨테이너 이름없이는 만들 수 있을까?
만들어짐!!!
그는 유명한 학자이름 이었다고 함..
그렇다면, 이름과 포트번호 모두 없이 컨테이너를 만들 수 있을까?
docker container create -P nginx
대문자 [-P] 옵션을 주면 된다!
포트번호도 자동으로 지정해주기도 한다.
당연히 사이트도 열림!
(사용예시)
docker container run --name test_cal centos /bin/cal
centos 컨테이너 안에서 /bin/cal 명령어를 실행해서 보여주는 것이다.
컨테이너를 땡겨오는 와중에 pull 명령어를 쓰지 않아도 docker hub에서 이미지를 가져온다.
웹 컨테이너처럼 계속 띄워지는 것이 아니라
이미지는 잠깐 쓰고 내려가는 패턴이다.
(사용예시)
docker container run -it --name test_bash centos /bin/bash
-it
i : interacitve
t : terminal
/bin/bash
이 친구들을깅 "인자"라고 부르는데
컨테이너 안쪽으로 진입하는 경로이기 때문에 매우매우 중요하다.
test_bash 컨테이너 안에서 /bin/bash가 실행되는데
[-it] 명령어를 사용하니 컨테이너 안으로 접속이 되었다.
-> 컨테이너 안에서 조작을 하고 싶을 때 사용됨!!!
예를 들면 Welcome to nginx! 라는 문구를 변경하고 싶을 때!
ping도 되고 vi, yum 등 명령어들도 있지만 OS가 탑재되어 있지 않은 것이 포인트!!!!
결국, 도커는 OS수준의 가상화라고 볼 수 있다.
컨테이너 백그라운드 실행
(docker container -d run)
d : detach : 분리하다
옵션 | 설명 |
--detach, -d | 백그라운드에서 실행한다. |
--interacive, -i | 표준 입력을 연다. |
--tty, -t | 터미널을 사용한다. |
docker container run -d --name test_pping centos /bin/ping localhost
docker container logs -t test_pping
실행 멈추기
docker container stop test_pping
컨테이너 포그라운드 실행
(docker container -d run)
포 그라운드 실행은 눈으로 보인다.
컨테이너 접속 포트 설정
docker container run -d -p 8282:80 --name test_port nginx
★ 요 부분은 아주 중요!! ★
docker container stats test_port
여기서 중요한 부분은 CPU 이다.
현재 우리의 셋팅이 1core인데 도커가 자원을 자동으로 여러 컨테이너에게 분배를 하기 때문에 살펴볼 필요 있다.
접속을 마구 했더니 CPU 자원이 변화되는 것을 볼 수있당
도커 지금 열일중~ㅋㅎ
docker container logs test_port
-> 도커가 어떤 이유로 바빴는지 로그를 통해 볼 수 있음
(저는 chrome과 firefox를 통해서 접근을 했걸랑유)
컨테이너 리소스 지정
docker container run [자원옵션] 이미지 [:태그] [인수]
docker container run -d -p 8181:80 --cpus 1 --memory 256m --name test_resource nginx
--cpus 1
--cpu-shares=1024
-> 이 두개의 명령어는 같은 말임
docker container run -d -p 8989:80 --cpu-shares 512 --memory 128m --name test_resource1 nginx
docker container inspect test_resource1
inspect 명령어를 사용해서 자세한 내용을 볼 수 있다.
Port, IP, 버젼 등등등...
아래와 같이 명령어를 입력하면 CpuShares 내용만 추출할 수도 있다.
docker container inspect -f "{{.HostConfig.CpuShares}}" test_resource1
docker container inspect test_resource1 | grep CpuShares
컨테이너 디렉토리 공유
docker container run -d -P --cpu-shares 256 --memory=56m -v /tmp:/usr/share/nginx/html --name volume-container nginx
포트번호 확인 : 32769
페이지가 이렇게 뜬당
ehco 명령어로 index.html로 페이지에 이름도 띄웠음
후후
tar -xvf aws.tar -C /tmp
컨테이너 리스트 표시
docker container ls -a -f name=test
docker container ls -a -f exited=0
exited = 멈춰있다
컨테이너 포멧
docker container ls -a --format "table{{.Names}}\t{{.Status}}"
동작중인 컨테이너 연결
(docker container attach)
docker container ls -a -f name=test_bash
docker container start test_bash
docker container attach test_bash
★ 동작중인 컨테이너에서 프로세스 실행 ★
(docker container exec)
run은 없는 상태에서 무언가를 만들고 실행하는거고.
exec는 이미 만들어져 있는 것을 컨테이너 안에서 실행하는 거다.
docker container exec -it test_bash /bin/echo "Hello Jyoonchu"
docker container exec -it test_bash /bin/cal
docker container exec -it test_bash /bin/ping google.com
docker container ls -a -f name=volume-container
docker container exec -it volume-container /bin/bash
cd /usr/share/nginx/html/
mv index.html index.html.bak
echo "hello jyoonchu World :)" > index.html
요기서 /usr/share/nginx/html/ 에 index.html이 나오는 경로를 꼭! 알아두기
동작중인 컨테이너 프로세스 확인
docker container top test_port
동작중인 컨테이너 포트 전송 확인
docker container port test_port
컨테이너 이름 변경
docker container rename volume-container webserver
★ 컨테이너 안의 파일 복사 ★
(docker container cp)
docker container cp webserver2:/usr/share/nginx/html/index.html /root/index.html
docker container cp ./index.html webserver2:/usr/share/nginx/html/index.html
홈페이지 안의 내용이 변경되었다!!
우왕~~
폴더명을 통째로 컨테이너에 넣어보자규~
mkdir html
mkdir html/images
ls html/
ls html/images/
내용물(index.html과 이미지 파일)은 일단 수기로 폴더 안에 넣어줌!!
docker container cp ./html webserver2:/usr/share/nginx
에러페이지
http://172.25.0.136:8080/error.html
나의 에러페이지...
귀여워 주금 ㅠㅠ!
tar -xvf food.tar -C ./html/
docker container cp ./html webserver2:/usr/share/nginx
food.tar파일로도 업로드하니까 그럴듯한 홈페이지 완성~~~
등록한 index.html 삭제하기!!
docker container exec -it webserver2 /bin/rm -rf /usr/share/nginx/html/index.html
★ 컨테이너 이미지로 만들기★
(docker container commit)
옵션 | 설명 |
--autor, -a | 작성자명 기입 |
--message, -m | 간단한 메시지 기입 |
docker container commit -a "jyoonchu<test@example.com>" -m "Love,Loco" webserver test_commit:v1.0
docker image ls
docker image inspect test_commit:v1.0
docker container commit -a "jyoonchu<test@example.com>" -m "Are you OK?" webserver2 test_commit:food
[inspect]를 통해서 직전 작업자가 어떤 내용을 바꾸었는지 comment를 볼 수 있당
이제 이미지를 생성했으니, 컨테이너를 지워보자.
docker container rm -f 5dbbd5a4574b 15fdc51db1b1
docker container run -d -p 80:80 --name webserver test_commit:v1.0
아까.. 컨테이너를 지우고 다시 실행하면서.. tmp폴더가 볼륨과 마운트가 되어서 실습이 불가능..
tar -xvf aws.tar -C ./html/
docker container cp ./html webserver:/usr/share/nginx
웹서버 컨테이너를 만약 실수로 컨테이너를 지웠다고 하더라도.
이미지로 다시 살려보쟈규~
docker container rm -f webserver
docker container run -d -p 80:80 --name webserver test_commit:v2.0
docker container ls -f name=web
우분투에 도커 설치하기
(IP는 NAT설정 확인하기)
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
sudo apt update
sudo apt-cache policy docker-ce
sudo apt install docker-ce -y
sudo usermod -a -G docker jay
exit
docker version
'Docker' 카테고리의 다른 글
멀티 컨테이너 구현1 (1) | 2024.01.31 |
---|---|
Docker 3 (1) | 2024.01.30 |
Docker 2 (3) | 2024.01.29 |
Docker 1 (1) | 2024.01.25 |
Docker란 무엇인지.. 필기 (0) | 2024.01.25 |