## CLI 형식
```powershell
docker container [하위 명령] [옵션]
```
## 주요 하위 명령
|하위 커맨드|내용|상위 커맨드 생략|주요 옵션|
|-|-|-|-|
|`start`|컨테이너 실행|O|-i|
|`stop`|컨테이너 정지|O| |
|`create`|도커 이미지로 컨테이너 생성|O|--name -e -p -v|
|`run`|`docker image pull` > `docker container create` > `docker container start` 를 하나로 합한 것|O|--name -e -p -v -d -i -t|
|`rm`|컨테이너 삭제. 먼저 정지해야 함|O|-f -v|
|`exec`|실행 중인 컨테이너 속 프로그램 실행|O|-i -t|
|`ps`|컨테이너 목록 출력|O|-a|
|`cp`|도커 컨테이너와 도커 호스트 간의 파일 복사|O| |
|`commit`|도커 컨테이너를 이미지로 변환|O| |
![[A. Docker CLI 주요 옵션 정리|주요 옵션 형식과 의미]]
## 사용 예시
### 컨테이너 생명 주기
#### 공식 이미지 httpd 로 컨테이너 생성 후 실행
```
docker container run --name my-web-server -d -p 7777:80 httpd
```
- 포트는 7777(호스트 포트 번호), 80(컨테이너 포트 번호)가 되며, 웹 사이트 접속은 http://localhost:7777/ 로 할 수 있음
- container 하위 명령어를 쓸 때는 container를 **생략 가능**함
#### ngnix 이미지로 컨테이너 생성 후 실행
```powershell
docker run --name my-nginx -d -p 7070:80 nginx
```
#### mysql 이미지로 컨테이너 생성 후 실행
```
docker run –-name mysql_db –dit -p 3306:3306
–e MYSQL_ROOT_PASSWORD=[비밀번호]
-e MYSQL_DATABASE=[데이터베이스 이름]
–e MYSQL_USER=[사용자이름]
–e MYSQL_PASSWORD=[패스워드]
-e TZ=Asia/Seoul
mysql
--character-set-server=[문자_인코딩]
--collation-server=[정렬_순서]
--default-authentication-plugin=[인증방식]
```
- `-dit` : 백그라운드 실행 및 터미널(키보드)를 통해 컨테이너 내부 파일 시스템 조작
- 이 컨테이너가 실행되는 동안에는 MySQL workbench에서 컨테이너의 DB가 뜸
- 볼륨을 자동으로 설정하기 때문에 데이터가 영속적임
#### 컨테이너 목록 조회
```powershell
docker container ps -a
```
#### 컨테이너 정지
```powershell
docker container stop my-web-server
```
##### 모든 컨테이너 정지
```
docker container stop $(docker ps -a -q)
```
#### 컨테이너 삭제
```powershell
docker container rm my-web-server
```
- 이미지는 삭제되지 않고 남아있음. 이미지는 따로 삭제해야 함.
##### 모든 컨테이너 삭제
```
docker container rm $(docker ps -a -q)
```
### 기타
#### 컨테이너와 호스트 간 파일 복사
```powershell
docker container cp [복사되는 파일] [저장되는 위치]
```
```powershell
docker container cp C:/iotest/index.html my-web-server:/usr/local/apache2/htdocs/
```
```powershell
docker container cp my-web-server:/usr/local/apache2/htdocs/index.html C:/iotest/
```
#### 컨테이너 안 Shell 실행
```powershell
docker container exec -it my-web-server bash
```
- `-it` : 컨테이너 내부 파일 시스템 조작
##### 결과
```shell
root@0ac7c4ebb9bb:/usr/local/apache2# whoami
root
root@0ac7c4ebb9bb:/usr/local/apache2# pwd
/usr/local/apache2
root@0ac7c4ebb9bb:/usr/local/apache2# ls
bin build cgi-bin conf error htdocs icons include logs modules
root@0ac7c4ebb9bb:/usr/local/apache2# cd htdocs
root@0ac7c4ebb9bb:/usr/local/apache2/htdocs# ls
index.html
```