diff --git "a/4_\354\273\250\355\205\214\354\235\264\353\204\210\353\245\274_\354\213\244\355\226\211\355\225\264_\353\263\264\354\236\220.md" "b/4_\354\273\250\355\205\214\354\235\264\353\204\210\353\245\274_\354\213\244\355\226\211\355\225\264_\353\263\264\354\236\220.md" index f9ad536..bd9ea69 100644 --- "a/4_\354\273\250\355\205\214\354\235\264\353\204\210\353\245\274_\354\213\244\355\226\211\355\225\264_\353\263\264\354\236\220.md" +++ "b/4_\354\273\250\355\205\214\354\235\264\353\204\210\353\245\274_\354\213\244\355\226\211\355\225\264_\353\263\264\354\236\220.md" @@ -1 +1,285 @@ -정리 : 지영님 \ No newline at end of file +# 01. 도커 엔진 시작하기 / 종료하기 + +- 도커 엔진은 컨테이너 실행 중이 아니면 컴퓨터 리소스를 거의 쓰지 않음 +- 자동 실행으로 디폴트값이 설정되어 있어 컴퓨터 부팅 시 도커 엔진도 자동 실행됨 +- 하지만 컨테이너는 도커 엔진이 한 번 종료 되면 정지 상태가 됨 + +## macOS 기준 +1. 도커 엔진 시작 : 파인더 -> 애플리케이션 폴더 -> Docker Desktop +2. 도커 엔진 종료 : 화면 우측 상단 막대에서 도커 클릭(고래 모양) -> 메뉴 Quit Docker Desktop +3. 자동 실행 설정 : 우측 상단 도커 클릭 -> 메뉴 Preferences -> Start Docker Desktop when you log in 체크(체크 해제 시 비활성화) + +## 리눅스 + +도커 엔진 시작 : sudo systemctl start docker +도커 엔진 종료 : sudo systemctl stop docker +자동 실행 설정 : sudo systemctl enable docker + +# 02. 컨테이너의 기본적인 사용 방법 + +### 명령어와 대상 + +컨테이너를 다루는 모든 명령은 **docker 명령어**로 시작 + +``` +docker 커맨드 대상 +//이름이 penguin인 이미지를 실행할 때 +docker container run penguin +``` + +상위 커맨드는 container 또는 image와 같은 대상의 종류로 딱 12종류만 있음. 대상에 해당하는 부분은 구체적인 이름 지정. + +### 옵션과 인자 +``` + 상위 커맨드 하위 옵션 대상 인자 +docker container run -d penguin --mode=1 +``` + +-d : 백그라운드 실행 +-- mode=1 : 모드 1로 실행 + +### 커맨드 + +container를 붙이지 않아도 실행 가능한 명령어가 있어 관례상 container run 커맨드를 사용함. + +``` +docker container run +``` +``` +docker run +``` +### 옵션 + +옵션은 커맨드에 세세한 설정 지정 시 사용하며, 주로 - 나 --를 붙여 시작하지만 안 붙이는 경우도 존재함. + +- 커맨드에 어떤 값을 저장하고 싶다면 --name 옵션 뒤에 옵션 값 지정 + +``` +--name penguin +``` + +- 옵션을 한꺼번에 사용하는 경우 +``` +-dit +``` +### 대상 + +구체적인 이름 지정. + +### 인자 + +대상에 전달할 값 지정. 문자 코드 또는 포터 번호 등 전달 가능. - 또는 --로 시작함. + +``` +--mode=1 +--style nankyoku +``` +#### 도커 버전 명령어 +![](https://velog.velcdn.com/images/jiyeong/post/1cacebff-e4c8-4063-8d2c-c5dc892cf3cf/image.png) + +### 대표적인 명령어 +![](https://velog.velcdn.com/images/jiyeong/post/7ac5e404-ad5b-4a5c-a80d-dee3fb57d148/image.png) +[출처](https://dockerlabs.collabnix.com/docker/cheatsheet/) + +#### 컨테이너 조작 관련 커맨드(상위 커맨드 : container) +컨테이너를 실행하거나 종료하고, 컨테이너 목록을 확이하는 등 컨테이너를 다루기 위해 사용하는 커맨드 + +start / stop / create / run / rm / exec / ls / cp / commit + +#### 이미지 조작 관련 커맨드(상위 커맨드 : image) + +이미지를 내려받거나 검색하는 등 이미지와 관련된 기능을 실행하는 커맨드 + +pull / rm / ls / build + +#### 볼륨 조작 관련 커맨드(상위 커맨드 : volume) + +볼륨 생성, 목록 확인, 삭제 등 볼륨(컨테이너에 마운트 가능한 스토리지)과 관련된 기능을 실행하는 커맨드 + +create / inspect(볼륨 상세 정보 출력) / ls / prune(현재 마운트되지 않은 볼륨 모두 삭제) / rm + +#### 네트워크 조작 관련 커맨드(상위 커맨드 : network) + +도커 네트워크의 생성, 삭제, 컨테이너의 네트워크 접속 및 접속 해제 등 도커 네트워크와 관련된 기능을 실행하는 커맨드. + +도커 네트워크란 도커 요소 간의 통신에 사용하는 가상 네트워크를 가리킨다. + +connect / disconnect / create / inspect / ls / prune / rm + +#### 그 밖의 상위 커맨드 + +대부분 도커 스웜과 관련된 커맨드로서 초보자 수준에서 사용할 일은 없는 커맨드 + +- checkpoint : 현재 상태를 일시적으로 지정 후 나중에 해당 시점의 상태로 되돌릴 수 있음. 현재는 실험적인 기능으로 씀. +- node : 도커 스웜의 노드를 관리하는 기능. +- plugin : 플러그인을 관리하는 기능. +- secret : 도커 스웜의 비밀값 정보를 관리하는 기눙 +- service : 도커 스웜 서비스 관리 +- stack : 도커 스웜 또는 쿠버네티스에서 여러 개의 서비스를 합쳐 구성한 스택 관리 +- swarm : 도커 스웜 관리 +- system : 도커 엔진 정보 확인 + +#### 단독으로 쓰이는 커맨드 + +상위 커맨드 없이 단독으로 쓰는 커맨드로 주로 도커 허브 검색이나 로그인 시 사용 + +- login +- logout +- search +- version + +# 03. 컨테이너 생성과 삭제, 실행, 정지 + +## docker run 커맨드와 docker stop, docker rm 커맨드 + +- 컨테이너 실행 : docker run + - 컨테이너 생성 시 이미지가 필요한데 이 이미지 부재 시 내려받는 기능도 겸함 + - 컨테이너 생성 : docker create + - 컨테이너 실행 : docker start + - 이미지 내려받기 : docker pull + +#### 컨테이너 생애 주기 + +![](https://velog.velcdn.com/images/jiyeong/post/f8242fc9-6bcf-4747-96c5-5dc3394cc6a0/image.png) +[출처](https://www.devopsschool.com/blog/lifecycle-of-docker-containers/) + +- 컨테이너 폐기 시 컨테이너 정지 -> 동작 중인 컨테이너를 그대로 삭제 불가 +- 컨테이너 정지 : docker stop +- 컨테이너 삭제 : docker rm + +#### 컨테이너 생성 및 실행 : docker run + +<각종 옵션> +- 컨테이너 이름 : --name +- 포트 번호 : -p +- 볼륨 마운트 : -v +- 컨테이너 연결할 네트워크 : --net +- 데몬 형태로 동작하는 소프트웨어의 컨테이너 : -dit + - 백그라운드 실행 : -d + - 컨테이너 터미널 연결 : -i + - 특수 키 사용 가능 : -t +- 환경 변수 설정 : -e +- 사용 방법 안내 메세지 : -help + +#### 컨테이너 정지 : docker stop +컨테이너 삭제를 위해 먼저 정지 필수 +#### 컨테이너 삭제 :docker rm +정지 상태가 아닌 컨테이너를 대상으로 실행 시 오류가 발생하니 반드시 정지할 것! + +#### 한 번만 실행되는 컨테이너 +실행하자마자 종료되므로 컨테이너가 터미널의 제어를 차지하더라도 일시적인 것이므로 문제가 되지 않음 + +#### 데몬 형태로 동작하는 컨테이너 +저절로 종료되지 않으므로 한번 터미너르이 제어를 넘기면 이를 되찾아 오기가 번거롭다 + +#### docker ps 커맨드 + +실행 중인 컨테이너의 목록 출력. +-a 옵션 추가 시 현재 존재하는 컨테이너(정지 상태 컨테이너 포함) 목록 출력. + +![](https://velog.velcdn.com/images/jiyeong/post/a287bb3a-c635-4acb-bee3-dbd5ba7e5661/image.png) + +- CONTAINER ID +- IMAGE : 컨테이너 생성 시 사용한 이미지 이름 +- COMMAND : 실행 시 설정된 프로그램 이름 +- CREATED : 컨테이너 생성 후 경과 시간 +- STATUS : 컨테이너 현재 상태. 실행 중 'Up', 종료 'Exited' +- PORTS : 컨테이너에 할당된 포트 번호, '호스트 포트 번호 -> 컨테이너 포트 번호' 형식으로 출력. 포트 번호 동일 시 -> 뒷 부분 출력x +- NAMES : 컨테이너 이름 + +``` +docker run --name apa000ex1 -d httpd +``` +![](https://velog.velcdn.com/images/jiyeong/post/4f9919d0-c837-4a35-aa85-152476b04238/image.png) + +``` +docker ps +``` + +![](https://velog.velcdn.com/images/jiyeong/post/08a2a97f-3272-4d56-a00e-b6b6e45d9cfb/image.png) + +``` +docker stop apa000ex1 +``` +![](https://velog.velcdn.com/images/jiyeong/post/095dfe43-86de-4fbb-ba92-c9d5f603fc06/image.png) + +``` +docker ps -a +``` +![](https://velog.velcdn.com/images/jiyeong/post/f56889a7-ef76-4ddb-bd3e-6682b9b6ac1f/image.png) +``` +docker rm apa000ex1 +``` +![](https://velog.velcdn.com/images/jiyeong/post/54173d0b-9b79-4a07-ae39-e87a7e02069a/image.png) + +- stop이나 rm처럼 컨테이너 이름 지정하는 커맨드일 경우 컨테이너 ID 앞 글자만 좀 따서 적어도 실행됨. + +``` +docker rm apa +``` + +# 04. 컨테이너 통신 + +## 아파치 + +웹 서버 기능을 제공하는 소프트웨어로 아파치가 동작 중인 서버에 파일을 두면 이 파일을 웹 사이트 형태로 볼 수 있다. + +- 웹 브라우저를 통해 컨테이너에 접근이 가능하게 하려면 컨테이너 실행 시 설정 필요 +- 이 설정은 컨테이너 생성 후 기본적으로 변경 불가 + +## 컨테이너와 통신 + +- 포트 설정하기 +- 컨테이너 속에서 실행 중인 아파치는 외부와 직접 연결이 되지 않아서 외부에서 접근 불가 + +- 컨테이너를 실행 중인 컴퓨터(호스트)의 8080 포트와 컨테이너의 80번 포트를 연결 + +``` +-p 8080:80 +``` + +컨테이너 사용 시 여러 개의 웹 서버를 함께 실행 가능 -> 호스트 포트 번호를 모두 같은 것으로 사용한다면 어떤 컨테이너로 가야 하는 요청인 지 구분이 힘듦 + +![](https://velog.velcdn.com/images/jiyeong/post/163f6b83-ad18-43e2-9174-9801fac84629/image.png) + +# 05. 컨테이너 생성에 익숙해지기 + +## 리눅스 운영체제 +- ubuntu +- centos +- debian +- fedora +- busybox +- alpine + +## 웹 서버/데이터베이스 서버용 + +- httpd : apache +- nginx +- mysql +- postgres +- mariadb + +### 프로그램 실행을 위한 런타임과 그 외 소프트웨어 + +- openjdk +- python +- php +- ruby +- perl +- gcc : C/C++ 컴파일러 +- node +- registy +- wordpress +- nextcloud +- redmine + +호스트 컴퓨터 포트 번호 중복 x / 컨테이너 포트 중복은 ㄱㅊ + +# 06. 이미지 삭제 + +## 이미지 삭제 커맨드 : docker image rm + +## 이미지 목록 정보 : docker image ls + +![](https://velog.velcdn.com/images/jiyeong/post/526ee858-b162-46a5-99d5-e37f797d2fcc/image.png)