Docker

Docker - 명령어

sysman 2021. 3. 15. 11:59

 

 

 

 

public registry( dockerhub) 에서 파일 가져오기

docker pull ubuntu:latest

 

가져온 이미지 확인

docker images

 

docker start <name> //도커 실행

 

도커 컨테이너 실행

 docker run -it ubuntu:14.04 echo "hello"  //hello 찍기

docker run -it ubuntu:14.04 /bin/bash // ubuntu 14.04로 컨테이너에 접속( 컨테이너 down 안시키고 나올때 ctrl +p +q)

docker run -it ubuntu:14.04 ifconfig //인터페이스 확인

 

docker ps  //컨테이너 up된 것 확인

docker ps -a //컨테이너 up/down 된것 까지 확인

 

docker inspect <name> // 도커 속성 정보

 

docker exec -it <name> bash //도커 컨테이너에 접속(-i :표준입출력, -t: 터미널)

 

도커 mysql 실행

docker run -it -e MYSQL_ROOT_PASSWORD=password mysql:latest bash

$/etc/init.d/mysql start

$mysql -uroot

password : password

show databases;

 

도커 cadvisor 설치 및 실행( 컨테이너 모니터링(cpu,mem,disk) 툴)

docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker:/var/lib/docker:ro --publish=8008:8080 --detach=true --restart:always --name=cadvisor google/cadvisor:latest

 

nginx 설치(-d 옵션은 계속 up 되어 있게)

docker run --name nginx1 -d -p 8001:80 nginx:1.19

 

도커 리소스 사용량 체크

docker stats nginx1

 

도커 파일 복사

docker cp index.html nginx1:/usr/share/nginx/html/index.html

 

 

Dockerfile을 이용한 build

vi Dockerfile

FROM nginx:1.19

COPY index.html /user/share/nginx/html/index.html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"] //데몬을 백그라운드로 시작

:wq!

 

docker build -t mynginx:1.0 . //현재 폴더에서 도커 빌드

 

------------------------

docker history nginx:1.19 // 도커 다운로드 히스토리

 

 

docker image rm -f <name> // 도커 이미지 삭제

dockr rm <id> // 도커 컨테이너 삭제

 

 

docker 컨테이너 전체 삭제

docker ps -a -q

 

docker  컨테이너 중지 및 삭제

docker stop <id> 

docker rm <id>

 

docker  컨테이너 전체 삭제 및 중지

docker stop $(docker ps -q)

docker rm $(docker ps -a -q)

 

image 전체 삭제

docker rmi $(docker images -q)

 

사용하지 않는 도커 이미지 삭제

docker image prune 

 

dockerhub에 접속

docker login

docker logout

 

dockerhub에 이미지 올리기

 

docker login

docker tag nginx:1.0 <자신 id>/nginx_test:1.0

docker push <자신id>/nginx_test:1.0

 

 

모니터링

docker start nginx_test

docker attach nginx_test  //모니터링 명령어(내가 컨피그 한게 따라 보임) 

 

 

-----------------

브릿지 확인

brctl show

docker network ls

옵션 내용
--add-host(host명:ip_address) 컨테이너 /etc/hosts에 host명과 ipaddress 설정
--dns=ip_address dns서버 ip 설정
--expose=port num 컨테이노 노출 포트 설정
--net=(bridge|nonee|container:<name|id>|host) 컨테이너 네트웍 설정
-h host명 컨테이너 호스트 이름 설정
-P(임의의 포트), -publish-all=(true|false) 임의의 포트를 컨테이너에 할당 (32768 이후부터 임의 포트)
-p (host포트넘버:컨테이너 포트넘버) 호스트 포트와 컨테이너 포트를 매핑
--link=(container:container_id) 동일 호스트간 다른 컨테이너에서 액세스 시 이름 설정
--mac-address=madaddress 컨테이너 mac address 설정

docker network 설정

옵션 내용
bridge bridge 접속 (디폴트 : docker0) 172.17.0.2~, 172.17.0.1 g/w
none 네트워크 생성 없음
container:(container_name | id ) 다른 컨테이너의 네트워크 같이 사용( container:nx_test)
host 컨테이너가 host OS에 있는 네트워크 공유해서 사용
NETWORK 사용자 정의 네트워크명

 

docker network create -d bridge web-net

docker run --net=web-net -itd --name=web httpd:latest

 

확인

brctl show //veth 생성 확인

docker network inspect web-net 

docker exec web route

 

네트워크 수동 지정 생성

docker network create --driver bridge --subnet 172.18.1.0/24 --ip-range 172.17.1.0/24 --gateway 172.18.1.1 vswitch

 

 

 

리소스 관리

옵션 내용
-c, --cpu-shares=0  cpu 리소스 분배( 디폴트: 1024, cpu 1의 비율의미)
-m, --memory=(메모리 사용량), --memory-swap 메모리 사용량 제한( 디폴트 1024, 단위: b, k, m, g)
--device-write-bps --device-read-bps, --device-write-iops, --device-read-iops, --blkio-weight, --glkio-weight-device  MBPS, iops 설정
-v, --volume=(host 디렉토리:컨테이너 디렉토리) host와 container의 디렉토리 공유

IOPS : Input / Output Per Second(초당 입력/출력 횟수)

MBps : 초당 전송 되는 Data

 

cpu 2번 하나만 할당 및 memory 400M , swap memory 800M 할당,mbps 쓰기 제한:10m, resource_test이름으로 ubuntu 생성 하기

docker run -d --name resource_test --cpuset-cpus=2 --device-write-bps /dev/sda:10m --memory=400m --memory-swap=800m ubuntu:14.04 --cpu 1

 

아래 경고 발생시

WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

docker info //아래에 보면 swap limited 가 서포트 되지 않는 다고 나옴

대책:

sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT= "cgroup_enable=memory swapaccount=1"

sudo update-grub

sudo reboot

 

------------------------------------------------

bind mount 생성

docker run -it --name ubunt_vol -v /home/admin/vol1:/vol1 ubuntu:latest bash

 

 

 

docker volume 생성

docker volume create wp-vol

docker run -d --name wp-db -e MYSQL_ROOT_PASSWRD=password -v wp-vol:/var/lib/mysql mysql:5.7

 

docker inspect --type volume wp-vol

볼륨 삭제

docker volume rm wp-vol

 

 

 

데이터 전용 컨테이너

docker create -v /data-volume --name=datavol ubuntu:latest

docker run -it --volumes-from datavol ubuntu:latest

 

 

-------------------

컨테이너를 이미지로 변환

docker commit -a "test" web webtest:1.0

 

 

----------------------

컨테이너 백업

컨테이너에서 export

docker export web > web.tar

 

백업파일을 컨테이너로..

cat web.tar | docker import - web:1.0

-------------------

이미지로 save/컨테이너로 load

docker save ubuntu:14.04 > ubuntu1404.tar

docker load  < ubuntu1404.tar

 

-------------------

도커 완전 초기화(일괄 삭제)

docker system prune -a

 

-------------------------

docker kill ubuntu (컨테이너를 stop 및 세션도 종료)

kill -9 1111 (세션만 종료)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Docker' 카테고리의 다른 글

도커 스웜 모드, docker swarm  (0) 2021.03.15
docker-compose  (0) 2021.03.15
Docker 설치 및 삭제  (0) 2021.03.10
Docker - 이론  (0) 2021.03.09