본문 바로가기
프로그래밍 놀이터/Settings

[Docker] Docker 명령 #2

by 돼지왕왕돼지 2020. 3. 23.

[Docker] Docker 명령 #2


4.3. Docker 컨테이너 네트워크


-

Docker 컨테이너끼리 통신을 할 때는 docker 네트워크를 통해 수행한다.




* 네트워크 목록 표시 (docker network ls)


-

syntax)

$ docker network ls [옵션]


주요 옵션

-f, --filter=[] : 출력을 필터링

--no-trunc : 상세 정보를 출력

-q, --quiet : 네트워크 ID 만 출력


docker 기본으로 bridge, host, none 이렇게 세 개의 네트워크를 만든다.



-

필터링 할 때는 key=value 형으로 지정한다.

주요 키는 driver, id, label, name, scope(swarm/global/local), type(custom/builtin)



-

네트워크를 명시적으로 지정하지 않고 컨테이너를 시작하면 기본값인 bridge 네트워크로 시작한다.



-

오버레이 네트워크(overlay network)

    물리 네트워크 상에서 소프트웨어적으로 에뮬레이트한 네트워크.

    물리 네트워크를 덮듯이 가상 네트워크가 구성된다는 점에서 가상 네트워크라고도 불린다.

    물리 네트워크의 구조가 은폐되어 그 아래에 있는 물리 계층의 형태나 제어 방식 등을 의식하지 않고 이용할 수 있다는 것이 특징이다.

    여러 개의 호스트에 걸친 네트워크를 구성할 때 사용한다.




* 네트워크 작성(docker network create)


-

syntax)

$ docker network create [옵션] 네트워크


주요 옵션

--driver, d : 네트워크 브리지 또는 오버레이 또는 커스텀(기본값은 bridge)

--ip-range : 컨테이너에 할당하는 IP 주소 범위 지정

--subnet : 서브넷을 CIDR 형식으로 지정

--ipv6 : IPv6 네트워크를 유효화할지 (true/false)

-label : 네트워크에 설정하는 라벨




* 네트워크 연결(docker network connect/docker network disconnect)


-

syntax)

$ docker network connect [옵션] 네트워크 컨테이너


주요 옵션

--ip : IPv4 주소

--ip6 : IPv6 주소

--alias : alias

--link : 다른 컨테이너에 대한 링크



-

ex)

$ docker network connect web-network webfront

'webfont' 라는 이름의 docker container 를 'web-network' 라는 이름의 docker 네트워크에 연결한다.

연결 후 동일한 네트워크상에 있는 다른 컨테이너와 통신할 수 있다.



-

네트워크 연결은 컨테이너 시작 시에 할 수도 있다.

docker container run 에 --net 옵션을 채워주면 된다.



-

네트워크 연결을 해제할 떄는 docker network disconnect 명령을 사용한다.

ex)

$ docker network disconnect web-network webfront




* 네트워크 상세 정보 확인 (docker network inspect)


-

syntax)

$ docker network inspect [옵션] 네트워크




* 네트워크 삭제 (docker network rm)


-

syntax)

$ docker network rm [옵션] 네트워크

삭제시 docker network disconnect 를 통해 연결 중인 모든 컨테이너와의 연결을 해제해야 한다.








4.4. 가동 중인 Docker 컨테이너 조작


* 가동 컨테이너 연결 (docker container attach)


-

가동중인 컨테이너에 연결할 때는 docker container attach 명령을 사용한다.

연결한 컨테이너를 종료하려면 Ctrl + C, 컨테이너에서 분리하려면 Ctrl + P 또는 Ctrl + Q 를 입력한다.


syntax)

$ docker container attach <containerName>




* 가동 컨테이너에서 프로세스 실행 (docker container exec)


-

가동 중인 컨테이너에서 새로운 프로세스를 실행할 때는 docker container exec 명령을 사용한다.

예를 들어 웹 서버와 같이 bg에서 실행되고 있는 컨테이너에 엑세스하고 싶을 때 docker container attach 명령으로 연결해도 쉘이 작동하지 않는 경우는 명령을 접수할 수 없다.


syntax)

$ docker container exec [옵션] <컨테이너 식별자> <실행할 명령> [인수]


주요 옵션

--detach, -d :  명령을 bg 에서 실행한다.

--interactive, -i : 컨테이너의 표준 입력을 연다.

--tty, -t : 단말 디바이스를 사용한다.

--user, -u : 사용자명 지정



-

ex)

$ docker container exec -it webserver /bin/bash

webserver 컨테이너에서 /bin/bash 를 실행한다.




* 가동 컨테이너의 프로세스 확인 (docker container top)


-

syntax)

$ docker container top <containerName>




* 가동 컨테이너의 포트 전송 확인(docker container port)


-

syntax)

$ docker container port <containerName>




* 컨테이너 이름 변경(docker container rename)


-

syntax)

$ docker container rename <containerName> <newContainerName>




* 컨테이너 안의 파일을 복사(docker container cp)


-

컨테이너 안의 파일을 호스트에 복사할 때는 docker container cp 명령을 사용한다.

syntax)

$ docker container cp <컨테이너 식별자>:<컨테이너 안의 파일 경로> <호스트의 디렉토리 경로>

$ docker container cp <호스트 파일> <컨테이너 식별자>:<컨테이너 안의 파일 경로>


아래 명령은 webserver container 의 nginx.conf 를 host 로 복사해온다.

ex)

$ docker container cp webserver:/etc/nginx/nginx.conf /tmp/nginx.conf




* 컨테이너 조작의 차분 확인 (docker container diff)


-

컨테이너 안에서 어떤 조작을 하여 컨테이너가 이미지로부터 생성 되었을 때와 달라진 점(차분)을 확인하려면 docker container diff 명령을 사용한다.

syntax)

$ docker container diff <컨테이너 식별자>


결과로 나오는 A 는 파일 추가 / D 는 파일 삭제 / C 는 파일 수정을 의미한다.








4.5. Docker 이미지 생성


-

Docker 컨테이너는 Docker 이미지를 바탕으로 작성하지만 반대로 컨테이너를 바탕으로 이미지를 작성할 수도 있다.

예를 들어 탑레벨 리포지토리에서 취득한 공식 이미지를 바탕으로 컨테이너를 만들고 환경에 맞도록 설정을 변경한 컨테이너로부터 다시 이미지를 만들 수가 있다.




* 컨테이너로부터 이미지 작성(docker container commit)


-

syntax)

$ docker container commit [옵션] <컨테이너 식별자> [이미지명[:태그명]]


주요 옵션

--author, -a : 작성자 지정

--message, -m : 메시지 지정

--change, -c : commit 시 Dockerfile 명령을 지정한다.

--pause, -p : 컨테이너를 일시 정지하고 commit 한다.




* 컨테이너를 tar 파일로 출력(docker container export)


-

가동중인 컨테이너의 디렉토리/파일들을 모아서 tar 파일을 만들 수 있다.

이 tar 파일을 바탕으로 하여 다른 서버에서 컨테이너를 가동시킬 수 있다.

syntax)

$ docker container export <컨테이너 식별자>




* tar 파일로부터 이미지 작성 (docker image import)


-

syntax)

$ docker image import <파일 또는 URL> | - [이미지명[:태그명]]

압축된 디렉토리나 파일도 취급할 수 있다.

하지만 docker image import 명령에서 지정할 수 있는 파일은 하나이므로 tar 명령 등으로 디렉토리나 파일을 모아놓는 것이 좋다.

이 때 root 권한으로 실행하지 않으면 액세스 권한이 없는 파일이 포함되지 않는 경우가 발생하므로 주의한다.


지정할 수 있는 아카이브 파일은 tar, tar.gz, tgz, bzip, tar.xz, txz 이다.



-

$ cat latest.tar | docker image import - userName/webfront:1.1 # latest.tar 를 이미지로 작성

$ tar -c . | docker import - userName/webfront:1.1 # 현재 폴더를 이미지로 작성




* 이미지 저장(docker image save)


-

docker image save 를 통해 docker image 를 tar로 저장할 수 있다.

syntax)

$ docker image save [옵션] <-o 저장 파일명> [이미지명]




* 이미지 읽어 들이기(docker image load)


-

docker image load 를 통해 tar 이미지로부터 이미지를 읽어 들일 수 있다.

syntax)

$ docker image load [옵션] <-i 읽어들일 파일명>




* 불필요한 이미지/컨테이너를 일괄 삭제(docker system prune)


-

docker systsem prune 명령은 사용하지 않는 이미지, 컨테이너, 볼륨, 네트워크를 일괄적으로 삭제한다.

$ docker system prune [옵션]


주요 옵션은..

--all, -a : 사용하지 않는 리소스 모두 삭제

--force, -f : 강제 삭제



댓글0