일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- c++
- react
- 파이썬
- web
- Baekjoon
- 파이썬 알고리즘
- HTML
- Django
- PYTHON
- django ORM
- Git
- Algorithm
- java
- 백준
- javascript
- form
- es6
- js
- django rest framework
- MAC
- 알고리즘 문제
- AWS
- DRF
- CSS
- API
- 알고리즘
- 알고리즘 연습
- 장고
- 알고리즘 풀이
- django widget
- Today
- Total
수학과의 좌충우돌 프로그래밍
[배포]Azure를 이용한 배포, Docker 명령어 본문
Docker 명령어
Docker 에 대해서 몇가지 명령어를 알아보고자 합니다.
Docker run
docker run -it python:3.7-stretch
먼저 가장 기본시 되는 Docker container 를 만드는 run
명령어 입니다. 그 뒤에는 Docker 이미지의 이름이 위치하는데 다음과 같은 경우에는 Docker 공식 이미지인 python 이기 때문에 다음과 같이 image이름:버젼
으로 써주었습니다.
일반적인 경우, 즉 docker 공식 이미지가 아닌 경우에는 사용자이름/image이름:버젼
과 같은 형태로 써주게 됩니다.
docker run --rm -it python:3.7-stretch
그리고 rm
은 remove 의 줄임말로서 삭제를 의미합니다. docker가 stop 했을 경우 자동으로 삭제하게 하는 명령어로서, 앞에서 언급했던 immutable infrastructure 패러다임
에 부합하는 명령어라고 할 수 있습니다.
이미지가 local에 없으면 다운을 받게 됩니다. 한 번 다운 받은 뒤로는 이미 존재하기 때문에 다시 다운 받을 필요가 없습니다. 다운이 완료되면 local에 python 3.7 이 없더라도 완전히 격리된 공간에서 3.7 버젼을 사용할 수 있습니다.
왜 인터프리터가 실행되지?
다음과 같이 run
이 되면 python 인터프리터가 실행이 될 것 입니다. 그 이유는 COMMAND
와 관련이 있습니다. Dockerfile
에서 CMD 부분이 아래와 같이 명시되어 있기 때문에 run을 할 시 python 인터프리터가 실행이 됩니다.
# Dockerfile
...
CMD ["python3"]
만약 run
을 할 시, 맨 위에 다른 명령어를 적어준다면 그 명령이 CMD
를 오버로드하게 됩니다. 따라서 이 경우 python의 version만 확인하고 docker container가 삭제됩니다.
docker run --rm -it python:3.7-stretch python3 --version
# Python 3.7.3
python version
인터프리터 내에서 python version 을 확인하기 위해서 확인을 해보면 다음과 같습니다.
>>> import sys
>>> sys.version
'3.7.3 (default, May 8 2019, 05:28:42) \n[GCC 6.3.0 20170516]'
docker container ls
현재 docker container 를 확인해보겠습니다. 먼저 docker container 를 생성한 후,
docker run -it python:3.7-stretch
다음과 같은 명령어로 현재 docker container 를 확인 할 수 있습니다. 이 때 -all
은 모든 docker를 전부 보여주고 -all
이 없다면 동작중인 docker container만 보여주게 됩니다.
docker container ls -all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0141ce183719 python:3.7-stretch "python3" 28 seconds ago Exited(0) 16 secondago mystifying
docker stop,rm
앞에서 살펴봤듯이 container 를 한 번 사용 후 재 사용할 것이 아니기 때문에 통상적으로 —rm 을 붙여줍니다. 이를 붙이지 않았을 경우에는 docker 를 stop하고 직접 삭제해줘야합니다.
docker stop NAMES
docker rm NAMES
nginx 웹서버
nginx 웹서버를 띄워보도록 하겠습니다. 이 역시 docker 를 사용합니다.
docker run -p 8080:80 nginx
-p 는 —publish 와 같은 명령어로 호스트, 즉 local 에서의 port와 docker container의 port 를 연결해줍니다. 지금은 local의 8080 과 docker container의 80 을 연결해줍니다.
그 결과 localhost:8080 으로 접근 시 페이지가 잘뜹니다.
docker run -d -p 8080:80 nginx
-d 는 detach 모드로 실행이 된다. 이 때는 foreground로 실행되는게 아니라 background로 실행되기 때문에 여러 container 들을 돌릴 수 있습니다.
docker run -d -p 8080:80 nginx
docker run -d -p 8081:80 nginx
docker run -d -p 8082:80 nginx
다음과 같이 하나의 docker image로 여러 개의 container 를 생성할 수 있습니다.
호스트 머신 측 컨텐츠로 html 서빙하기
위에서 봤던 localhost:8080
은 docker container 안에 있는 html 파일로서 다음과 같은 경로에 있습니다.
/usr/share/nginx/html
이를 내 로컬에 있는 html 파일 mapping 시켜서 원하는 화면을 띄울 수 있습니다.
docker run -d -p 8080:80 --volume `pwd`/html:/usr/share/nginx/html --name mynginx nginx
volume
명령어를 통해서 :
를 기준으로 좌측은 내 local의 경로, 우측의 container 안의 경로가 위치합니다. 이 때 내 local 의 경로가 container 안의 경로와 mapping 이 됩니다. 이 떄 경로는 절대 경로로 지정해줘야 하고 현재 디렉토리를 출력하는 pwd
를 이용합니다. 주의해야할 점은 pwd 양 쪽은 따음표가 아니라 숫자 1 옆에 있는 백쿼터
를 사용한다.
그리고 현재 local 에 html 폴더를 만들어주고 그 안에 index.html 를 만든 결과 다음과 같이 페이지가 잘 나오는 걸 확인할 수 있습니다.
<!-- html/index.html -->
<h1>Hello World! </h1>
'웹프로그래밍 > 배포' 카테고리의 다른 글
[배포]Azure 를 이용한 배포, Docker 설치하기 (0) | 2019.05.26 |
---|---|
[배포]Azure 를 이용한 배포, 서버패턴과 Docker (0) | 2019.05.26 |
[배포]1. Azure PaaS 를 이용한 배포, laaS와 PaaS 란? (0) | 2019.05.25 |