-
도커허브에서 이미지 검색
docker search 이미지명
-
이미지 다운로드
docker pull 이미지명:태그
-
이미지 리스트 확인
docker image ls or docker images
-
이미지 ID 리스트 확인
docker image ls -q or docker images -q
-
이미지 삭제
docekr image rm [-f] 이미지명
→ -f 옵션은 컨테이너가 실행되었던 이미지 삭제시 -
컨테이너가 실행되지 않았던 이미지 삭제
docker image prune
-
컨테이너가 실행되었던 이미지 삭제
docker image rm -f $(docker images -q)
-
이미지 백업
docker save -o 백업파일명 이미지명 이미지명 ....
-
이미지 백업 파일 해제
docker load -i 백업파일명
-
컨테이너 생성 및 실행
docker run [option] --name 컨테이너명 이미지:태그
→옵션
-it : 입력값과 출력값이 필요로 하는 컨테이너 경우에 붙임
-d : 입력값이나 출력값이 필요없고 실행만 시킬 경우에 붙임
-
컨테이너 list 확인
docker ps [-a]
→ -a : 종료된 컨테이너까지 확인 -
컨테이너 삭제
docker container rm [-f] 컨테이너명
→ -f : 실행되고 있는 컨테이너 삭제시 붙임 -
컨테이너 시작 및 정지
docker container start / stop 컨테이너명
-
컨테이너 및 이미지 스펙 확인
docker inspect 컨테이너명/이미지명
-
컨테이너 리소스 확인
docker stats [옵션]
→ --no-stream : 1회성으로 띄울 때 -
컨테이너 리소스 제한
docker run --cpus (0.0~1.0) --memory (메모리크기) [옵션] --name 컨테이너명 이미지명:태그
-
컨테이너 리소스 변경
docker update --cpus or --memory (limit 제한) 컨테이너명
-
컨테이너 PID 확인
docker top 컨테이너명
-
컨테이너 빠져나오기
ctrl p q 차례대로 입력
-
컨테이너 재진입
docker attach 컨테이너명
-
컨테이너 분리모드로 실행
docker exec -it 컨테이너명 실행명령어
-도커 파일 복사
컨테이너 -> 호스트
docker container cp 컨테이너명:PATH 호스트 PATH
호스트 -> 컨테이너
docker container cp 호스트_PATH 컨테이너명:PATH
-컨테이너 파일 변경 현황
docker diff 컨테이너명
-도커 볼륨
bind-mount
docker run [옵션] -v 호스트_PATH:컨테이너_PATH 컨테이너명
volume 생성
docker volume create 볼륨명
ls /var/lib/docker/volume/볼륨명/_data
volume 마운트
docker run [옵션] 볼륨명:컨테이너_PATH 컨테이너명
volume 리스트 확인
docker volume ls
# yum 관리 도구 설치
yum install -y yum-utils
# docker 레포지터리 추가
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 도커 설치
yum install docker-ce docker-ce-cli containerd.io
설치한 도커를 활성화 하려면
systemctl enable docker --now
또는
systemctl enable docker
systemctl start docker
를 입력하면 된다.
도커의 상태를 확인하려면
systemctl status docker # 활성화 여부 확인
docker --version # 설치 확인
를 입력하면 된다.
# docker search image_name
docker pull ubuntu
docker pull mysql:5.7
docker pull dokken/centos-7
docker pull httpd
docker run -itd --name os1 ubuntu:latest
docker run -d --name mydb mysql:5.7
docker run -itd --name centos7 dokken/centos-7
docker run -d --name web1 httpd
docker run -d --name web2 httpd
docker inspect mydb | grep WorkingDir
docker inspect web1 | grep IPA
docker inspect web2 | grep IPA
docker container stop web2
docker ps | grep web2
docker container start web2
docker ps | grep web2
docker image rm -f mysql:5.7
docker ps
docker ps -a
docker save -o backup.tar ubuntu:latest dokken/centos-7
ls
docker image rm -f ubuntu:latest
docker image rm -f dokken/centos-7
docker images
docker load -i backup.tar
docker images
docker run -itd --name os1 ubuntu:latest
docker run -itd --name centos7 dokken/centos-7
docker ps
docker stats --no-stream
docker exec -it os1 ls /var/log
docker save -o backup.tar httpd ubuntu
docker image rm httpd
docker image rm ubuntu
docker load -i backup.tar
docker run -itd --name os1 centos
docker run -d --name web1 httpd
docker run -d --name web2 httpd
docker run -itd --name os2 ubuntu
docker run -d --name mydb mysql:5.7
docker inspect mydb | grep WorkingDir
docker container rm mydb
docker run --cpus 0.4 --memory 512m -itd --name os3 ubuntu
docker stats --no-stream
docker update --memory 1024m os3
docker stats --no-stream
docker exec web1 pwd
docker attach os1
docker run --name web3 -d httpd
docker inspect web3 | grep IPA
curl ip 주소
docker diff web3
echo "cp test" > index.html
echo "diff test" > index1.html
docker container cp index.html web3:/usr/local/apache2/htdocs/
docker container cp index1.html web3:/usr/local/apache2/htdocs/
curl ip주소
rm -f index.html
ls
docker container cp web3:/usr/local/apache2/htdocs/index.html ./
ls
docker diff web3
docker exec web3 rm /usr/local/apache2/index1.html
docker diff web3
# => index1.html 항목이 없어짐
docker diff web3
docker exec web3 rm /usr/local/apache2/index.html
docker diff web3
# => index.html 항목이 C => D로 변경됨
(1) fileA 파일 생성
touch fileA
(2) dirA 디렉토리 생성
mkdir dirA
(3) host 디렉토리에
index.html => "/root/ dir"
echo "/root/ dir" > index.html
(4) dirA 디렉토리 안에
index.html => "/root/dirA dir"
echo "/root/dirA dir" > dirA/index.html
(5) 모든 컨테이너 삭제(실행되고 있는 컨테이너도 삭제)
docker container rm -f $(docker ps -qa)
(6) httpd 이미지로 컨테이너 생성
web1 : 호스트의 홈 디렉토리와 /usr/local/apache2/htdocs/ 매칭
docker run -d --name web1 -v ~/:/usr/local/apache2/htdocs/ httpd
docker inspect web1 | grep -A 10 Mounts
web2 : 호스트의 /root/dirA 와 /usr/local/apache2/htdocs/ 매칭
docker run -d --name web2 -v ~/dirA/:/usr/local/apache2/htdocs/ httpd
docker inspect web2 | grep -A 10 Mounts
web3 : 도커볼륨 dirB 와 /usr/local/apache2/htdocs/ 매칭
docker run -d --name web3 -v dirB:/usr/local/apache2/htdocs/ httpd
docker inspect web3 | grep -A 10 Mounts
web1 의 /usr/local/apache2/htdocs/ 내용 확인
docker exec web1 ls /usr/local/apache2/htdocs/
# => ls /root/ 결과와 동일
web2 의 /usr/local/apache2/htdocs/ 와 /root/dirA 내용 확인
docker exec web2 ls /usr/local/apache2/htdocs/
# ls /root/dirA/ 와 동일
web3 의 /usr/local/apache2/htdocs/ 와 /var/lib/docker/dirB/_data/ 내용 확인
docker exec web3 ls /usr/local/apache2/htdocs/
# ls /var/lib/docker/volume/dirB/_data 와 동일
web1, web2, web3 아이피 주소 확인
# curl IP 주소로 내용 확인
docker inspect web1 | grep IPA
docker inspect web2 | grep IPA
docker inspect web3 | grep IPA
curl web1 ip address
# => 결과 X
curl web2 ip address
# => /root/dirA dir
curl web3 ip address
# => It's work
/root/dirA/index.html => "chagne dirA" 으로 내용 수정
echo "change dirA" > /root/dirA/index.html
/var/lib/docker/dirB/_data/index.html => "change dirB" 으로 내용 수정
echo "change dirB" > /var/lib/docker/volume/dirB/_data/index.html
web2, web3 curl 실행
curl web2 ip address
# => change dirA
curl web3 ip address
# => change dirB
web4 컨테이너 생성 : 도커볼륨 dirB 와 /usr/local/apache2/htdocs/ 매칭
docker run -d --name web4 -v dirB:/usr/local/apache2/htdocs/ httpd
web4 curl 실행
curl web4 ip address
# => change dirB
도커 볼륨 리스트 확인
docker volume ls
httpd 이미지로 web1, web2, web3 컨테이너 생성
(1) web1 : curl ip주소 실행시 => "docker cp test" 메세지 출력 - cp 명령어 이용
docker run -d --name web1 httpd
echo "docker cp test" > index.html
docker container cp index.html web1:/usr/local/apache2/htdocs/
curl web1 ip address
(2) web2 : curl ip주소 실행시 => "docker bind mount test" 메세지 출력 - bind mount 이용
docker run -d --name web2 -v /root/webdir:/usr/local/apache2/htdocs/ httpd
echo "docker bind mount test" > /root/webdir/index.html
curl web2 ip address
(3) web3 : curl ip주소 실행시 => "docker volume test" 메세지 출력 되도록 - docker volume 이용
docker run -d --name web3 -v webvol:/usr/local/apache2/htdocs/ httpd
echo "docker volume test" > /var/lib/docker/volumes/webvol/_data/index.html
curl web3 ip address
(4) web4 : curl ip주소 실행시 => "docker volume test" 메세지 출력 되도록 - docker volume 이용
docker run -d --name web4 -v webvol:/usr/local/apache2/htdocs/ httpd
curl web4 ip address
모든 컨테이너 삭제
docker rm -f $(docker ps -aq)
도커 네트워크 리스트 확인
docker network ls
도커 bridge docker1 생성 (default)
docker network create [-d brigde] docker1
docer1의 네트워크 확인
docker inspect docker1
도커 bridge docker2 생성 (network : 192.168.100.0/24, gateway : 192.168.100.254)
docker network create [-d brigde] --subnet "192.168.100.0/24" --gateway "192.168.100.254" docker2
docker2의 네트워크 확인
docker inspect docker2
컨테이너 생성
web1:네트워크 docker0
docker run -d --name web1 httpd
web2:네트워크 docker2
docker run -d --name web2 --network docker2 httpd
web3:네트워크 host dirB 볼륨에 매칭
docker run -d --name web3 --network host -v dirB:/usr/local/apache2/htdocs httpd
IP주소 확인
docker inspect web1 | grep IPA
docker inspect web2 | grep IPA
docker inspect web3 | grep IPA
외부 터미널에서 curl 192.168.56.101 쳐서 내용확인
[root@docker~]#curl 192.168.56.101
[root@docker~]#curl localhost
os1, os2 컨테이너 생성 ubuntu 이미지를 이용해서
os1:네트워크 docker0 web1을 hosts 파일에 등록(명령어를 사용해서)
docker run -itd --name os1 --link web1 ubuntu
docker exec os1 cat /etc/hosts
os2:네트워크 docker2 web2를 hosts 파일에 등록(exec를 이용해서)
docker run -itd --name os2 --network docker2 ubuntu
docker exec os2 cat /etc/hosts
# => web에 대한 주소가 안보임
docker exec -it os2 bash
vi /etc/hosts
192.168.100.2 web2
:wq
os1에서 web1의 index.html 확인
docker exec os1 curl web1
# 혹시 curl 명령어가 없다면
docker exec os1 ping web1
os2에서 web2의 index.html 확인
docker exec os2 curl web2
# 혹시 curl 명령어가 없다면
docker exec os2 ping web2
web4 컨테이너 생성 web4 : host의 50000 port와 web4의 80 port 매칭
docker run -d --name web4 -p 50000:80 httpd
본 시스템에서 curl 192.168.56.101 결과 확인
# 메인 터미널에서
curl 192.168.56.101:50000
# or
ping 192.168.56.101:50000
os1 컨테이너 생성 - centos:7 이미지 사용
docker run -itd --name os1 centos:7
os1 에 httpd 서비스구성
docker exec os1 yum -y install httpd
# or
docker exec -it os1 bash
yum -y install httpd
docker commit 명령어로 httpd 서비스가 동작하는 이미지 생성 port 80도 설정 (hint "CMD ['/usr/sbin/httpd','-D','FOREGROUND']" )
echo "commit test" > index.html
docker container cp index.html os1:/var/www/html
docker commit --change "CMD ['/usr/sbin/httpd','-DFOREGROUND']" --change 'EXPOSE 80' os1 myweb:v1
생성된 이미지로 myweb:v1 컨테이너 생성
docker run -d --name testweb myweb:v1
docker inspect testweb | grep IPA
curl testweb ip address
docker inspect testweb | grep -A 2 Port