Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
286 changes: 285 additions & 1 deletion 4_컨테이너를_실행해_보자.md
Original file line number Diff line number Diff line change
@@ -1 +1,285 @@
정리 : 지영님
# 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)