Cloud/Docker

도커(docker) version, run으로 여러가지 컨테이너 실행하기

jinmc 2020. 12. 7. 13:51
반응형

출처: subicura.com/2017/01/19/docker-guide-for-beginners-2.html

 

docker version

 

버전을 확인합니다 (client와 Server 정보가 출력됩니다)

도커는 Client와 Server역할을 동시에 수행할 수 있습니다. 

도커 커맨드를 입력하면 도커 클라이언트가 도커 서버로 명령을 전송하고 결과를 받아 터미널에 출력합니다.

 

 

docker run 

 

컨테이너를 실행합니다. 이미지가 저장되어 있는지 확인하고 이미지가 없다면 다운로드 (pull)한 후 컨테이너를 생성하고 시작합니다.

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

자주 사용하는 옵션들입니다.

 

옵션설명

-d detached mode 흔히 말하는 백그라운드 모드
-p 호스트와 컨테이너의 포트를 연결 (포워딩)
-v 호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e 컨테이너 내에서 사용할 환경변수 설정
–name 컨테이너 이름 설정
–rm 프로세스 종료시 컨테이너 자동 제거
-it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
–link 컨테이너 연결 [컨테이너명:별칭]

 

몇 가지 예시를 들자면,

 

- ubuntu container 만들기

$ docker run ubuntu:18.04

이미지를 다운받고, 컨테이너가 실행되었지만, 그 이후 따로 명령어가 없기 때문에 컨테이너는 생성되자마자 종료됩니다.

이번에는 /bin/bash 명령어를 입력해서 컨테이너를 실행해 보겠습니다.

 

$ docker run --rm -it ubuntu:18.04 /bin/bash

--rm 옵션을 넣으면 실행되고 꺼질때 Container가 삭제된다. -it 옵션은 command line을 통해 docker와 통신하기 위해서 이루어집니다.

당연한 얘기겠지만 리눅스에서 시스템을 짤 경우 ubuntu를 실행할 이유가 없겠습니다.

 

- redis container 만들기

$ docker run -d -p 1234:6379 redis

-d 키를 입력하지 않으면 프로세스가 foreground로 실행되어 아무키도 입력할 수 없게 됩니다. ctrl-c 키로 빠져나올 수 있습니다. -p 옵션을 사용하여 호스트의 1234포트를 컨테이너의 6379포트로 연결하였습니다.

~ telnet localhost 1234                                                      
Trying ::1...                                                                   
Connected to localhost.                                                         
Escape character is '^]'.                                                       
set mykey hello                                                                 
+OK                                                                             
get mykey                                                                       
$5                                                                              
hello                                                                           
quit                                                                            
+OK                                                                             
Connection closed by foreign host.                                              
~                                                                            
             

이런식으로 Telnet을 이용해서 연결이 가능합니다.

 

- mysql container 만들기

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

# MySQL test
$ mysql -h127.0.0.1 -uroot

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> quit

-d 옵션은 백그라운드 모드, -p는 port연결을 위해 주는 옵션입니다.

MYSQL_ALLOW_EMPTY_PASSWORD는 패스워드 없이 root계정을 만들기 위해 설정합니다. 

--name은 컨테이너의 이름을 설정해 줍니다. --name이없을 경우 랜덤하게 이름이 만들어집니다.

 

이 방법은 host os 에 mysql이 깔려있어야 합니다.

mysql 까는 방법:

www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-18-04

 

 

- wordpress container 만들기

 

위에서 만든 데이터베이스를 링크하는 법. 현재 --link는 deprecated되서 더이상 쓰진 않는다고 하는데, 

docker network를 이용해야 한다고 합니다. --link는 개념용으로만 사용하는걸로...

# create mysql database
$ mysql -h127.0.0.1 -uroot
create database wp CHARACTER SET utf8;
grant all privileges on wp.* to wp@'%' identified by 'wp';
flush privileges;
quit

# run wordpress container
docker run -d -p 8080:80 \
  --link mysql:mysql \
  -e WORDPRESS_DB_HOST=mysql \
  -e WORDPRESS_DB_NAME=wp \
  -e WORDPRESS_DB_USER=wp \
  -e WORDPRESS_DB_PASSWORD=wp \
  wordpress

로컬호스트 8080 포트로 연결하면 웹 페이지를 볼 수 있습니다.

 

- tensorflow container 만들기

 

$ docker run -d -p 8888:8888 -p 6006:6006 teamlab/pydata-tensorflow:0.1

 

위 container는 numpy, scipy, pandas, jupyter, scikit-learn, gensim, BeautifulSoup4, Tensorflow 등이 설치되어 있습니다.

주피터 노트북으로 접속이 가능합니다.

반응형