**numpy설치
python : python:3.7.9-stretch 사용
$python test.py
[[0. 0.]
[0. 0.]]
--python:alpine(너무 용량적음) -> python:3.7.9-stretch로 변경
#python_project/Dockerfile
FROM python:3.7.9-stretch
RUN pip install numpy
COPY ./test.py /mydata/test.py
CMD ["python", "/mydata/test.py"]
$docker rmi 83b0142da49b
$docker rmi -f 83b0142da49b
$docker build -t mypython .
$docker run mypython
[[0. 0.]
[0. 0.]]
$docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mypython latest c5b16cfea223 About a minute ago 984MB
mhee4321/mynodejs 1.0 394f8d8bae45 18 hours ago 224MB
shelltest 1.0 3f513926794b 19 hours ago 72.9MB
addtest 1.1 cf9609dcf140 20 hours ago 72.9MB
cmdtest 1.0 86aeec3a829e 20 hours ago 72.9MB
entrypointtest 1.0 266e66594bc1 20 hours ago 72.9MB
addtest 1.0 16341914ff80 22 hours ago 72.9MB
runtest 1.0 b5acf655dab3 22 hours ago 72.9MB
python latest e32be9a6f71f 7 days ago 885MB
ubuntu 16.04 8185511cd5ad 2 weeks ago 132MB
fromtest 1.0 def6b0094ed7 2 weeks ago 72.9MB
ubuntu latest f63181f19b2f 2 weeks ago 72.9MB
mysql 5.7 a70d36bc331a 3 weeks ago 449MB
docker/getting-started latest 021a1b85e641 2 months ago 27.6MB
--만든 image -> 내 hub site에 올리기
$docker login
$docker tag mypython:latest mhee4321/mypython:1.0
$docker push mhee4321/mypython:1.0
$docker rmi -f c5b16
$docker image pull mhee4321/mypython:1.0
$docker run mhee4321/mypython:1.0
https://hub.docker.com/u/mhee4321
ENV -> 환경변수 설정(컨테이너 내부에서 변수처럼 사용)
$echo $TZ => 'Asia/Seoul'
RUN ln (파일경로)
RUN rm RF - directory 강제 삭제
**Cloud Native Application
-
MSA
-
CI/CD
-
DevOps
-
Container(docker를 대신하는 CRE-O, container-d를 사용하기도 한다)
--Docker 공유 폴더(volume mount)
-
컨테이너 업데이트
-
새 버전의 이미지 다운 -> pull
-
기존 컨테이너 삭제 -> stop, rm
-
새 이미지를 이용하여 새 컨테이너 실행 -> run
-
컨테이너 유지 정보
-
AWS S3(cloud storage)
-
데이터 볼륨
$docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql -v /my/datadir:/var/lib/mysql mysql:5.7 (--volumn HostPc dir : container dir)
=>가급적이면 절대경로 사용해주기
**django(mac OS) 변경사항 -> upload에서 반영 -> volume mount로 처리하고 쉽게 update
-----------------volume mount적용------------------
#python_project/Dockerfile
FROM python:3.7.9-stretch
WORKDIR /mydata
RUN pip install numpy
COPY ./test.py ./test.py
CMD ["python", "test.py"]
$docker build -t mypython .
$docker run mypython
#python_project/Dockerfile
FROM python:3.7.9-stretch
ENV FILE=${EXEC_FILE}
WORKDIR /mydata
RUN pip install numpy
# COPY ./test.py ./test.py
# CMD ["python", "test.py"]
CMD python ${FILE}
CMD python ${EXEC_FILE}이라고 써도됨. (ENV줄 제거하고)
$docker build -t mypython .
$docker run -e EXEC_FILE=test.py mypython(test.py가 존재하지 않아 오류)
#python_project/Dockerfile
FROM python:3.7.9-stretch
WORKDIR /mydata
RUN pip install numpy
COPY ./test.py ./test.py
# CMD ["python", "test.py"]
CMD python ${EXEC_FILE}
$docker build -t mypython .
$docker run -e EXEC_FILE=test.py mypython(정상가동)
[[0. 0.]
[0. 0.]]
#python_project/Dockerfile
FROM python:3.7.9-stretch
WORKDIR /mydata
RUN pip install numpy
# COPY ./test.py ./test.py
# CMD ["python", "test.py"]
CMD python ${EXEC_FILE}
$docker build -t mypython .
$docker run -v /Users/mhee4/python_project:/mydata -e EXEC_FILE=test.py mypython
-
run을 해야 container가 생성됨 -> 자동으로 hostPC에서 docker container 로 마운팅됨
host PC에서 수정하는 것이 훨씬 간단, Docker linux VM에서는 vi로 편집해야 함 $docker exec -it, $vi test.py,
run -> 새로운 container 만들어져서 실행
copy -> test.py만 복사한 거라 이것만 실행가능 -> 나는 다른 파일 hello.py도 실행하고 싶다. -> mounting 해줘야 함
$cp test.py hello.py
$docker run -v /Users/mhee4/python_project:/mydata -it mypython /bin/bash
root@63d0c3a39996:/mydata# ls -al(파일 목록 확인)
root@63d0c3a39996:/mydata# cat hello.py(파일 정보 확인)
$docker run -v /Users/mhee4/python_project:/mydata -e EXEC_FILE=test.py mypython (test.py -> hostPC에 있는 파일)
$docker run -v /Users/mhee4/python_project:/mydata -e EXEC_FILE=hello.py mypython
-
Docker 네트워크(Bridge -> 생성)
eth0(호스트) -> windows network
docker() -> ethernet
-
Bridge network (기본 네트워크 이름)
-
- $ docker network create --driver bridge [브릿지 이름]
-
- $ docker run 또는 docker create에서 --net 옵션으로 커스텀 브릿지 사용
-
Host network
-
- 네트워크를 호스트로 설정하면 호스트의 네트워크 환경을 그대로 사용
-
- 포트 포워딩 없이 내부 어플리케이션 사용
-
- $ docker run -it --name network_host --net host ubuntu:16.04
ping, http, mysql로 서로 네트워크를 연결할 수 있음
-
None network
-
- 네트워크를 사용하지 않음
-
- lo 네트워크만 사용, 외부와 단절
-
Container network
-
- 다른 컨테이너의 네트워크 환경 공유
-
- --net container:[다른 컨테이너의 ID or Name]
-
- 두 컨테이너 사이의 네트워크 정보가 동일
-
Overlay network
-
- 다른 호스트들 간에 네트워크 공유
--Docker 정보 확인
§ TomcatàMysql Connection
-
- $ docker inspect <tomcat container>
-
- $ docker inspect <mysql container>
NetworkID :Bridge? Host?, EndpointID -> containerID
§ application.properties 파일
$docker ps -a
$docker system prune
$docker network ls
NETWORK ID NAME DRIVER SCOPE
7f90ca42e951 bridge bridge local
420cd608a6bc host host local
e416c0d4213f none null local
**mysql db 가동하기
$docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mysql:5.7
$docker ps
$docker inspect mysql
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "7f90ca42e9514762a25e6e149be091ec16b0bfbda8cbb39ecdb37efaf28c9bbb",
"EndpointID": "09e1e68dce7cf6d1f4ab8da235684c356c763978e85a06daec5602ffdc666ebd",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
$docker network create my-network
$docker network ls
NETWORK ID NAME DRIVER SCOPE
7f90ca42e951 bridge bridge local
420cd608a6bc host host local
ab28d8e3a995 my-network bridge local
e416c0d4213f none null local
$docker network inspect my-network
$docker network connect my-network mysql
$docker network inspect my-network
"Containers": {
"b9786b4c7b5f931dfec3aedb077b8802fc66d3f12c95f685f0965d4fa9f3afc8": {
"Name": "mysql",
"EndpointID": "aa2bce8782ae983d376bec8c4cdcb4f715875a40468665eeada9497f3dec5ed6",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
$docker inspect mysql(network ID 바뀜)
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "7f90ca42e9514762a25e6e149be091ec16b0bfbda8cbb39ecdb37efaf28c9bbb",
"EndpointID": "09e1e68dce7cf6d1f4ab8da235684c356c763978e85a06daec5602ffdc666ebd",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
},
"my-network": {
"IPAMConfig": {},
"Links": null,
"Aliases": [
"b9786b4c7b5f"
],
"NetworkID": "ab28d8e3a995fb054e4326ad796af1f2e6105cf963037a047be4c345bbfe42dc",
"EndpointID": "aa2bce8782ae983d376bec8c4cdcb4f715875a40468665eeada9497f3dec5ed6",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:02",
"DriverOpts": {}
$docker run -d -p 8080:8080 mhee4321/mynodejs:1.0
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93ca41046716 mhee4321/mynodejs:1.0 "npm start" 18 seconds ago Up 17 seconds 0.0.0.0:8080->8080/tcp cranky_lamport
b9786b4c7b5f mysql:5.7 "docker-entrypoint.s…" 9 minutes ago Up 9 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
$docker inspect 93ca
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "7f90ca42e9514762a25e6e149be091ec16b0bfbda8cbb39ecdb37efaf28c9bbb",
"EndpointID": "84efdc999fd323baaac53417167750df92a592a4a7af0b3f4a0f4ed9419cd4a7",
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93ca41046716 mhee4321/mynodejs:1.0 "npm start" 3 minutes ago Up 3 minutes 0.0.0.0:8080->8080/tcp cranky_lamport
b9786b4c7b5f mysql:5.7 "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
$docker network connect my-network cranky_lamport
$docker inspect my-network
$docker inspect cranky_lamport -> 같은 네트워크가 됨
----another terminal 띄우기
$docker exec -it cranky_lamport /bin/sh
/mydata # ping 127.0.0.1
/mydata # ping 172.18.0.2(my-network 주소)
/mydata # ping mysql(container에서 다른 container로 이름으로 접속가능)
**✏️실습해보기
-
현재 2개의 컨테이너가 실행 중
-
mysql
-
mynode
-
mynode에서 mysql을 ping 테스트
-
docker exec -it [container_id]
-
ex) ping 172.18.0.2
-
ex) ping mysql
LAB)
-
LAB1)mysql에서 mynode로 ping 정보 테스트
-
ping 실행을 위한 프로그램 설치
-
LAB2)mynode에서 mysql에 접속
-
mysql client를 설치
-
(mysql -> mynode(cranky_lamport))
$docker exec -it mysql /bin/bash
root@b9786b4c7b5f:/# ping 172.18.0.3
root@b9786b4c7b5f:/# apt-get update
root@b9786b4c7b5f:/# apt-get install iputils-ping
root@b9786b4c7b5f:/# ping 172.18.0.3
root@b9786b4c7b5f:/# hostname -i
172.17.0.2 172.18.0.2
-
(mynode -> mysql)
/mydata # hostname -i
172.17.0.3 172.18.0.3
$docker run -d -p 13306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql_client --network my-network mysql:5.7
$docker network inspect my-network
$docker exec -it mysql_client /bin/bash
root@7a4e42c9ce22:/# mysql -h172.18.0.2 -uroot -p (mysql 서버로 접속)
root@7a4e42c9ce22:/# mysql -hmysql -uroot -p (-h뒤는 컨테이너의 이름)
$docker network ls
$docker network disconnect my-network cranky_lamport
$docker network disconnect my-network mysql
$docker network disconnect my-network mysql_client
$docker network rm my-network
$docker network ls
7f90ca42e951 bridge bridge local
420cd608a6bc host host local
e416c0d4213f none null local
$docker inspect mysql_client(network my-network 삭제된 후 실종됨)
$docker network connect bridge mysql_client
$docker inspect mysql_client
"bridge": {
"IPAMConfig": {},
"Links": null,
"Aliases": [],
"NetworkID": "7f90ca42e9514762a25e6e149be091ec16b0bfbda8cbb39ecdb37efaf28c9bbb",
"EndpointID": "16f2f88af2ee3ca94aa765b80aa815c358a59867a5c30ee6613e770ec6ba9b33",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.4",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:04",
"DriverOpts": {}
$docker network inspect bridge
"Containers": {
"7a4e42c9ce22cbbcfc51220f031749cd21be0dd3aba28b3ac4c54af7e21de9a4": {
"Name": "mysql_client",
"EndpointID": "16f2f88af2ee3ca94aa765b80aa815c358a59867a5c30ee6613e770ec6ba9b33",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
},
"93ca41046716e1b4c72175b0d66de6af41067667c62464b0a684a98a7defcb90": {
"Name": "cranky_lamport",
"EndpointID": "84efdc999fd323baaac53417167750df92a592a4a7af0b3f4a0f4ed9419cd4a7",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"b9786b4c7b5f931dfec3aedb077b8802fc66d3f12c95f685f0965d4fa9f3afc8": {
"Name": "mysql",
"EndpointID": "09e1e68dce7cf6d1f4ab8da235684c356c763978e85a06daec5602ffdc666ebd",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
✏️내가 만들었던 장고 프로젝트를 컨테이너로 만들기 - > 추후에 다시해보기😊
mysql -> container
django -> container
$cd docker_file/django_project(container만들 장소)
host PC-/Users/mhee4/docker_volume (volume mount설정한 host dir)
$docker ps
(base) mhee4@Moonhees-MacBook-Pro django_project % docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql_server -v /Users/mhee4/docker_volume:/var/lib/mysql mysql:5.7
-
기존 django 프로젝트를 복사(cloud-project -> docker_file/django_project에 복사)
-
기존 django 프로젝트가 잘 작동되는지 확인(well)
-
데이터베이스를 변경
-
sqlite3 -> mysql(docker)
-
django를 Dockerfile로 생성
-
컨테이너로 테스트
$code .
#myproject/settings.py
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE' : 'django.db.backends.mysql',
'NAME' : 'mydb',
'USER' : 'root',
'PASSWORD' : '',
'HOST' : '127.0.0.1', => 현재는 컨테이너 외부기 때문에 'mysql_server'라고 쓰면 인식못함
'PORT' : '3306'
}
}
$python manage.py makemigrations
$python manage.py migrate
$python manage.py createsuperuser
$python manage.py runserver
$mysql -h127.0.0.1 -uroot -p
mysql>use mydb;
mysql>create table member(id varchar(20), name varchar(20));
mysql>insert into member(id, name) values('admin', 'Administrator');
mysql>select id, name from member;
create table news(title text(200), content text(500),company text(50), saved_time text(100));
insert into news(title, content, company, saved_time) values('test1', '경제일보', '테스트기사입니다.', '2021-02-09');
**오류 잡기
migrations - init.py 삭제 후 다시 모델 생성하기
컬럼은 textfile 말고 charfield로 하기.
(참조)
https://docs.djangoproject.com/en/3.1/ref/databases/#mysql-notes
Databases | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
**장고 기존의 가벼운 bookmark project로 docker image 만들어보기-> 아나콘다 기반
#docker_file/mysite
$django-admin startproject mysite
$cd mysite
$python manage.py startapp bookmark
$code .
code 완성 후,
$python manage.py makemigrations
$python manage.py migrate
$python manage.py createsuperuser
$python manage.py runserver
-
pip install django
-
pip install mysqlclient
-
python manage.py runserver
$code Dockerfile
#docker_file/mysite/Dockerfile
FROM python:3.7.9-stretch
WORKDIR /mydjango
CMD ["python", "--version"]
$docker build -t mydjango .
$docker ps -a ->다 지우기
$docker run -it mydjango /bin/bash(확인용)
root@ecf15b94901d:/mydjango#pip list
Package Version
---------- -------
pip 21.0.1
setuptools 53.0.0
wheel 0.36.2
root@ecf15b94901d:/mydjango# ls -al
total 8
drwxr-xr-x 2 root root 4096 Feb 9 08:11 .
drwxr-xr-x 1 root root 4096 Feb 9 08:12 ..
$docker run -v /Users/mhee4/docker_file/mysite:/mydjango -it mydjango /bin/bash
root@be8a9f428463:/mydjango# ls
Dockerfile bookmark db.sqlite3 manage.py mysite
root@be8a9f428463:/mydjango#pip install django
root@be8a9f428463:/mydjango# pip install mysqlclient
root@be8a9f428463:/mydjango# python manage.py runserver
->port forwarding 필요
#docker_file/mysite/Dockerfile
FROM python:3.7.9-stretch
WORKDIR /mydjango
EXPOSE 8000
CMD ["python", "--version"]
$docker build -t mydjango .
$docker run -v /Users/mhee4/docker_file/mysite:/mydjango -it -P mydjango /bin/bash
root@9283a0795c46:/mydjango# pip install django
root@9283a0795c46:/mydjango# pip install mysqlclient
root@9283a0795c46:/mydjango# python manage.py runserver
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9283a0795c46 mydjango "/bin/bash" 34 seconds ago Up 33 seconds 0.0.0.0:55000->8000/tcp thirsty_volhard
http://localhost:55000/bookmark/
확인 -> this page isn't working django server가 접근을 제한시켜 놓음
^Croot@9283a0795c46:/mydjango# python manage.py runserver 0.0.0.0:8000
http://localhost:55000/bookmark/
#docker_file/mysite/Dockerfile
FROM python:3.7.9-stretch
WORKDIR /mydjango
RUN pip install django
RUN pip install mysqlclient
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
$docker build -t mydjango .
$docker run -v /Users/mhee4/docker_file/mysite:/mydjango -it -P mydjango
(another terminal)
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6afe62074c7 mydjango "python manage.py ru…" 17 seconds ago Up 16 seconds 0.0.0.0:55002->8000/tcp sleepy_driscoll
http://localhost:55002/bookmark/
'CLOUD > Docker' 카테고리의 다른 글
2/15 - 도커/쿠버네티스 활용 컨테이너 개발 6차시 (0) | 2021.02.15 |
---|---|
2/10 - 도커/쿠버네티스 활용 컨테이너 개발 5차시 (0) | 2021.02.10 |
2/8 - 도커/쿠버네티스 활용 컨테이너 개발 3차시 (0) | 2021.02.08 |
2/5 - 도커/쿠버네티스 활용 컨테이너 개발 2차시 (0) | 2021.02.05 |
2/4 - Linux 2차시 +도커/쿠버네티스 활용 컨테이너 개발 1차시 (0) | 2021.02.04 |