당신은 멋쟁이, 우리는 장고쟁이~

0%

TodoList 28편 - Docker 컨테이너 생성 연습

Docker 컨테이너 연습


이 포스팅은 Docker 컨테이너를 실행해보는 개인적인 과정을 담고 있습니다.


https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html 에 있는 내용을 기반으로 따라한 과정과 정리 내용입니다.


도커에 대해 자세하게 알고 싶다면, 위 블로그를 참조하시면 됩니다.



Docker 설치 확인



이전 포스팅에서 도커 설치를 진행 했었는데, 잘 설치되었는지 확인해 봅니다.


터미널에서, docker version 명령어를 실행해 봅니다.


1
docker version


정상적인 설치가 완료 된것으로 보입니다.


버전 정보는 Client 와 서버로 나누어져 있습니다.

이는, 클라이언트와 서버 역할을 할수 있다는것을 의미 합니다.


컨테이너 실행 하기


도커를 실행하는 명령어의 구조는 아래와 같습니다.


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

자주 사용하는 옵션들은, 아래와 같습니다.


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


컨테이너 생성하기


터미널에서 아래 명령어를 실행하여, 컨테이너를 생성해 봅니다


1
docker run ubuntu:18.04


docker run ubuntu:18.04 를 실행하면,


ubuntu:18.04 를 로컬에서 찾을수가 없으니, 다운로드를 한 뒤에 컨테이너를 생성하고 시작합니다.



중요한점은, 컨테이너는 생성되었지만, 바로 종료가 된다는 점인데.


컨테이너는 잘 생성되어 실행 되었지만, 명령어가 전달되지 않았기 때문에,
생성되자마자 바로 종료가 됩니다. 컨테이너는 프로세스이기 때문에, 실행중인 프로세스가 없으면 컨테이너는 종료됩니다.

컨테이너 생성후 bin/bash/ 실행


위와 같은 명령어지만, 몇가지 옵션을 추가하여 컨테이너를 실행 해 볼수 있습니다.

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


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


--it 컨테이너 내부에 들어가기 위한 bash 쉘을 실행하고, 키보드 입력을 할수 있게 해줌


bash 쉘을 exit 명령어를 사용하여 종료하면, 컨테이너도 같이 종료가 됩니다 (--rm 옵션으로 인해서..)



Redis Container


redis 는 메모리기반의 다양한 기능을 가진 스토리지로,

6379 포트로 통신하여, telnet 명령어로 테스트해볼수 있습니다


일단 아래 명령어를 실행하여, detached mode 로 redis 컨테이너를 실행해줍니다

1
docker runi -d -p 1234:6379 redis

-d 와 -p 옵션을 추가하여, 컨테이너의 포트를 호스트 포트로 연결해 줍니다.


-d 가 없으면, 프로세스가 foreground 로 실행되어, 아무키도 입력할수 없습니다.



redis 에 접속하여 새로운 키를 저장하고 불러와 보았습니다.


호스트의 포트만 다르게 하며느 하나의 서버에 여러개의 redis 서버를 띄우는것도 간단합니다.



MySQL 5.7 Container 생성


MySQL 서버 컨테이너를 생성 후 실행해봅니다.


여기에 들어가는 옵션들이 중요한데.


옵션 설명
-d detached mode 흔히 말하는 백그라운드 모드
-p 호스트와 컨테이너의 포트를 연결 (포워딩)
-e 환경변수 설정
–name 읽기 어려운 ID 대신, 쉬운 이름을 부여

1
2
3
4
docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
mysql:5.7


해당 시스템에는, mysql이 설치가 되질 않아서, mysql에는 접속이 되지 않습니다;;;

tensorflow 컨테이너


머신러닝을 할수 있는 툴, tensorflow 를 만들어 실행해 봅니다


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

도커 기본 명령어 - 컨테이너 목록 확인


ps 는 실행중인 컨테이너 목록을 보여줍니다.


1
2
3
4
# 컨테이너 목록 확인 
docker ps [options]

docker ps


혹은, -a 옵션을 주어도 됩니다

1
docker ps -a


도커 기본 명령어 - 컨테이너 중지


1
docker stop [options] CONTAINER [CONTAINER...]

생성되어 있던 tensorflow 를 중지해봅니다

1
2
3
docker ps  # get container ID
docker stop TENSORFLOW_CONTAINER_ID
docker ps -a


도커 기본 명령어 - 컨테이너 제거


종료된 컨테이너를 완전하게 제거하는 명령어는 아래와 같습니다.


1
docker rm [options] CONTAINER [CONTAINER..]

종료된 ubuntu 컨테이너와 tensorflow 컨테이너를 삭제해봅니다


1
2
3
4
docker ps -a   # get container ID 
docker rm #ubuntu_CONTAINER_ID #TENSORFLOW_CONTAINER_ID

docker ps -a # 위 컨테이너들이 존재하는지 확인


도커 기본 명령어 - 이미지 제거


이미지 목록 확인 하기 (images)

1
docker images


컨테이너가 실행중인 이미지는 삭제되지 않지만, 아래 명령어를 사용해서, tensorflow 를 제거해봅니다

1
2
3
hello-world                     latest              fce289e99eb9        16 months ago       1.84kB
teamlab/pydata-tensorflow 0.1 7bdf5d7e0191 3 years ago 3.08GB
dhkang  ~ $ docker rm 7bdf5d7e0191


이미지가 삭제 됩니다