0504 docker 2

Ada·2022년 5월 5일
0

Playdata-Cloud

목록 보기
16/21

기본 태그 : latest

docker create => 컨테이너 생성
docker start => 컨테이너 시작
docker attach => 컨테이너 접속

docker run => 위의 3개 한번에 실행
run 명령어 수행시에는 d 옵션 사용하는게 좋다.

-도커 파일 복사
컨테이너 -> 호스트
docker container cp 컨테이너명:PATH 호스트 PATH

호스트 -> 컨테이너
docker container cp 호스트_PATH 컨테이너명:PATH

-컨테이너 파일 변경 현황
docker diff 컨테이너명

docker run -d --name web2 httpd:latest
생성 명령

도커 볼륨

이미 생성된 디렉토리에 볼륨 생성하는거 권장 X

bind-mount
docker run [옵션] -v 호스트_PATH:컨테이너_PATH 컨테이너명

volume 생성
docker volume create 볼륨명
ls /var/lib/docker/volumes/볼륨명/_data

docker run -d --name web1 -v vol3:/usr/local/apache2/htdocs/ httpd:latest

volume 마운트
docker run [옵션] 볼륨명:컨테이너_PATH 컨테이너명

volume 리스트 확인
docker volume ls

docker volume : 컨테이너의 데이터를 보관하기 위한 방법

bind-mount : 본 시스템에 디렉토리와 컨테이너 간에 연결 만듦으로써 컨테이너의 자료를 해당 디렉토리에 보관하기 위한 방법

volume : 본 시스템에 볼륨을 생성해서 컨테이너와 연결을 하고 컨테이너의 자료를 본 시스템에 보관하기 위한 방법

docker run [기본옵션] --name 컨테이너명 -v path or 볼륨명 컨테이너path

docker volume create vol3

echo "volume test" > /var/lib/docker/volumes/vol3/_data/index.html

container 의 기존 디렉토리를 volume 과 마운트할 때의 주의점

  1. bind-mount 로 volume 연결을 하게 되면 무조건 bind-mount 로 연결되어있는 본 시스템의 디렉토리 내용이 덮어씀.

  2. volume을 통한 볼륨 연결일 경우에 해당 volume 이 비어있으면 컨테이너의 연결된 디렉토리 내용이 volume 으로 들어오게 됨.
    volume 안에 내용을 지운다고 해도 동기화로 인해서 volume 내용은 삭제 되지 않음.

  3. volume 을 통한 볼륨 연결일 경우에 해당 volume이 내용이 있으면 volume 의 내용이 컨테이너의 디렉토리를 덮어씀.

볼륨 실습

모든 컨테이너 삭제

docker rm -f $(docker ps -qa)

호스트 디렉토리에

httpd 이미지로 web1, web2, web3, web4 컨테이너 생성
web1 : curl ip주소 실행시 => "docker cp test" 메세지 출력 - cp 명령어 이용

web2 : curl ip주소 실행시 => "docker bind mount test" 메세지 출력 - bind mount 이용

web3 : curl ip주소 실행시 => "docker volume test" 메세지 출력 되도록 - docker volume 이용

web4 : curl ip주소 실행시 => "docker volume test" 메세지 출력 되도록 - docker volume 이용(docker volume create

253 echo docker cp test> test
256 mkdir web_dir
257 echo docker bind mount test> web_dir/index.html
258 docker volume rm vol1 vol2 vol3 vol4
259 docker volume create vol1
260 echo docker volume test1 /var/lib/docker/volumes/vol1/_data/index.html
261 echo docker volume test2 > /var/lib/docker/volumes/vol1/_data/index.html
263 docker run -d --name web1 httpd:latest
264 docker cp /root/test web1:/usr/local/apache2/htdocs/index.html
265 docker run -d --name web2 -v /root/web_dir/:/usr/local/apache2/htdocs/ httpd:latest
266 docker run -d --name web3 -v vol2:/usr/local/apache2/htdocs/ httpd:latest
267 docker run -d --name web4 -v vol1:/usr/local/apache2/htdocs/ httpd:latest
268 echo docker volume test1 > /var/lib/docker/volumes/vol2/_data/index.html
270 docker inspect web1 | grep IPA
271 docker inspect web2 | grep IPA
272 docker inspect web3 | grep IPA
273 docker inspect web4 | grep IPA
275 curl 172.17.0.2
276 curl 172.17.0.3
277 curl 172.17.0.4
278 curl 172.17.0.5

docker run -d --name mydb1 -e MYSQL_ROOT_PASSWORD=dkagh1. -v db_vol1:/var/liv/mysql mysql:5.7

ls /var/lib/docker/volumes/



**도커 네트워크

-도커 네트워크 확인
docker network ls

-도커 네트워크 생성
docker network create [-d : default 값 bridge] --subnet "IP 네트워크/prefix" --gateway "게이트웨이 주소" 네트워크 이름

-bridge
컨테이너들이 통신하기 위한 내부 네트워크를 만들기 위한 네트워크
원하는 네트워크 대 생성 가능

-host
호스트 컴퓨터의 IP주소를 사용하기 위한 네트워크
같은 포트를 사용하는 컨테이너는 한개만 설정 가능
추가로 host를 생성하는 것은 불가

-null
네트워크가 필요없는 컨테이너를 운용할 경우 적용

-overray
다수의 호스트에 있는 컨테이너들이 통신을 하기 위한 네트워크

-macvlan
호스트의 물리 인터페이스에 가상으로 IP 주소를 적용하기 위한 네트워크

-link
컨테이너 생성시 같은 네트워크에 있는 특정 컨테이너의 별칭을 부여하기 위한 옵션
주의사항 : default bridge에서만 적용
docker run [옵션] --link 특정 컨테이너명 생성 컨테이너명
docker exec 컨테이너명 cat /etc/hosts

-portforwarding
호스트의 특정 포트에 컨테이너의 포트를 매칭 시키기 위한 옵션
docker run [옵션] -p 호스트_port:컨테이너_port

profile
백엔드 프로그래머

0개의 댓글