DevOps/Docker

4. 기본 명령어 1

pancakemaker 2024. 3. 1. 10:00

1. run - 컨테이너 실행

docker run  [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
-d detached mode (백그라운드 모드)
-p 호스트와 컨테이너의 포트를 연결 - 외부 접근 설정
(도커 컨테이너는 기본적으로 외부에서 접근할 수 없게 구성)
-v 호스트와 컨테이너의 디렉토리를 연결
-e 컨테이너 내에서 사용할 환경변수 설정
--name 컨테이너 이름 설정
--rm 프로세스 종료시 컨테이너 자동 제거
-i 표준 입력(stdin)을 활성화
보통 이 옵션을 사용하여 Bash에 명령을 입력
-t TTY 모드(pseudo-TTY)를 사용
Bash를 사용하려면 이 옵션을 설정해야 함
이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만, Shell이 표시되지 않음
-it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
--network 네트워크 연결

 

2. ubuntu 20.04 컨테이너 만들기

docker run ubuntu:20.04

 

- run 명령어 사용 시 사용할 이미지가 저장되어 있는지 확인

- 이미지가 없다면 다운로드(pull)한 후 컨테이너를 생성(create)하고 시작(start)함

- 컨테이너는 정상적으로 실행되었지만 어떠한 명령어를 전달하지 않았기 때문에 컨테이너는 생성되자마자 종료됨

- 즉, 컨테이너는 프로세스이기 때문에 실행 중인 프로세스가 없으면 컨테이너는 종료됨

Unable to find image 'ubunto:20.04' locally
20.04: Pulling from library/ubuntu
.
.
.

 

3. /bin/sh 실행하기

docker run --rm -it ubuntu:20.04 /bin/sh

 

- 컨테이너 내부에 들어가기 위해 sh를 실행하고 키보드 입력(명령어 입력)을 위해 -it 옵션을 줌

- 추가적으로 프로세스가 종료되면 컨테이너가 자동으로 삭제되도록 --rm 옵션도 추가

(--rm 옵션이 없다면 컨테이너가 종료되더라고 삭제되지 않고 남아 있어 수동으로 삭제해야 함)

 

4. CentOS 실행하기

docker run --rm -it centos:8 /bin/sh

 

- 도커는 다양한 리눅스 배포판을 실행할 수 있음 (모두 동일한 커널 사용)

- Ubuntu 또는 CentOS에 포함된 다양한 기본 기능이 필요하지 않은 경우, Alpine이라는 초소형 (5MB) 이미지를 사용할 수도 있음

 

5. 웹 어플리케이션 실행하기

docker rum --rm -p 5678:5678 hashicorp/http-echo -text="hello world"

 

 - detached mode (백그라운드 모드)로 실행하기 위해 -d 옵션을 추가하고 -p 옵션을 추가하여 컨테이너 포트를 호스트와 포트로 연결

- 브라우저를 열고 localhost:5678에 접속하면 메시지 확인 가능

 

6. Redis 실행하기

docker run --rm -p 1234:6379 redis

 

실행 확인

telnet localhost 1234

set hello world
>> +OK
get hello
>> $5
>> world
quit

 

7. MySQL 실행하기

docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true
--name mysql
mysql:5.7

 

실행 확인

docker exec -it mysql mysql
create database wp CHARACTER SET utf8;
grant all privileges on wp.* to wp@'%' identified by 'wp';
flush privileges;
quit

 

※ docker run vs. docker exec

- docker run: 새로 Container를 실행

- docker exec: 실행된 Container에 작업을 할 때 사용 (그래서 execute 명령은 Container ID 매개변수(ex: mysql)가 필요)