Mac terminal editor => iTerm & zsh
# docker_file/mysite/Dockerfile
FROM python:3.7.9-stretch
WORKDIR /mydjango (change, make 역할을 함)
RUN pip install django
RUN pip install mysqlclient
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
CMD & ENTRYPOINT : 프로세스 기동을 위해 마지막으로 한번만 써주는 문장
$docker run -P -v /Users/mhee4/docker_file/mysite:/mydjango -it mydjango:latest(절대경로)
-it : 추가적으로 command를 실행할 때 (+/bin/sh) 쉘 스크립트를 사용해야 할 때
$docker run -p 8000:8000 -v /Users/mhee4/docker_file/mysite:/mydjango -it mydjango:latest
$docker build -t mydjango .
**Today's Working
1. Django Container 수정
- Volume 마운트 -> COPY 코드를 이용해 복사
2. DB 변경(Sqlite -> Mysql 변경)
- Network 생성
- docker network create
- Mysql, Django 컨테이너를 같은 네트워크에 추가
- docker network connect
- Django -> Mysql사용
- db 연동 관련부분을 MYSQL로 변경
3. Django 이미지를 HUB 사이트에 공개
4. PRIVATE Registry 사용
5. Docker compose
STEP 1.Django Container 수정
# docker_file/mysite/Dockerfile
FROM python:3.7.9-stretch
WORKDIR /mydjango
RUN pip install django
RUN pip install mysqlclient
COPY bookmark /mydjango/bookmark
COPY mysite /mydjango/mysite
COPY db.sqlite3 /mydjango/db.sqlite3
COPY manage.py /mydjango/manage.py
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
$docker build --no-cache=true -t mydjango_app .
$docker run -d -p 8000:8000 -it mydjango_app (detach 모드) -> container id 발급
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82f55590331a mydjango_app "python manage.py ru…" 3 seconds ago Up 2 seconds 0.0.0.0:8000->8000/tcp fervent_banach
**파일 내용 수정하고 싶을 때(mount아닌 copy로 했을 경우)
$docker exec -it 82f5 /bin/bash
root@82f55590331a:/mydjango# ls -l
total 148
drwxr-xr-x 5 root root 4096 Feb 10 01:06 bookmark
-rw-r--r-- 1 root root 139264 Feb 9 08:02 db.sqlite3
-rwxr-xr-x 1 root root 662 Feb 9 07:26 manage.py
drwxr-xr-x 3 root root 4096 Feb 10 01:06 mysite
root@82f55590331a:/mydjango#apt-get update
root@82f55590331a:/mydjango#apt-get install tree
root@82f55590331a:/mydjango#apt-get install vim
root@82f55590331a:/mydjango#tree -L 2(두 단계까지만 표시)
root@82f55590331a:/mydjango#cd ./bookmark/templates/bookmark/
root@82f55590331a:/mydjango/bookmark/templates/bookmark# vi bookmark_list.html

STEP 2. DB 변경(Sqlite -> Mysql 변경)
$docker network create my-network
$docker network ls
**mysql docker hub에서 Environment Variables참고
https://hub.docker.com/_/mysql
mysql - Docker Hub
We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy
hub.docker.com
$docker run -d
-p 13306:3306
-e MYSQL_ALLOW_EMPTY_PASSWORD=true
-e MYSQL_DATABASE-mydb
-v /Users/mhee4/docker_file/db_mount:/var/lib/mysql --network my-network --name mysql_server mysql:5.7
$docker ps
$docker exec -it mysql_server /bin/bash
root@7fb7ca2330dc:/# mysql -h127.0.0.1 -uroot -p
mysql> create database mydb;
#mysite/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',
'PORT' : '13306'
}
}
$python manage.py makemigrations
$python manage.py makemigrations bookmark
$python manage.py migrate
$python manage.py createsuperuser
$python manage.py runserver
$mysql -h127.0.0.1 -uroot -p
mysql>show databases;
추후에 container -> container로 포트접속 작업 추가요망
**container(mydjango_server) -> container(mysql_server) 접속 시작
# docker_file/mysite/Dockerfile
FROM python:3.7.9-stretch
WORKDIR /mydjango
RUN apt-get update
RUN pip install django
RUN pip install mysqlclient
RUN apt-get install -y vim
COPY bookmark /mydjango/bookmark
COPY mysite /mydjango/mysite
COPY db.sqlite3 /mydjango/db.sqlite3
COPY manage.py /mydjango/manage.py
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
$docker build -t mydjango:mysql .(image 만들기)
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7fb7ca2330dc mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 33060/tcp, 0.0.0.0:13306->3306/tcp mysql_server
#mysite/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' : 'mysql_server',
'PORT' : '3306'
}
}
$docker run -d -p 8000:8000 --name mydjango_server mydjango:mysql (django server 띄울 때 굳이 volume mount 안해줘도 됨)
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3a5a36c3196 mydjango:mysql "python manage.py ru…" 2 seconds ago Up 2 seconds 0.0.0.0:8000->8000/tcp mydjango_server
7fb7ca2330dc mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 33060/tcp, 0.0.0.0:13306->3306/tcp mysql_server
mysql_server -> ipAddress : 172.18.0.2
mydjango_server ->ipAddress : 172.17.0.2
$docker network connect my-network mydjango_server
(처음부터 네트워크 연결해주려면 =$docker run -d -it -p 8000:8000 --network my-network mydjango:mysql)
mydjango_server ->ipAddress : 172.18.0.3
$docker network inspect my-network
$docker exec -it mydjango_server /bin/bash
root@76d217e01b7f:/mydjango# vi ./bookmark/templates/bookmark/bookmark_list.html
**위에 8000포트로 접속 안돼서 다시 재접속
$docker run -d -it -p 8000:8000 --name mydjango_server --network my-network mydjango:mysql
STEP 3. Django 이미지를 HUB 사이트에 공개
$docker ps -a(없어야 함)
$docker images
$docker image tag mydjango:mysql mhee4321/mydjango:1.0
$docker login
$docker image push mhee4321/mydjango:1.0
$docker image rm -f 394f8d8bae45
$docker image pull mhee4321/mydjango:1.0
$docker run -d -p 8000:8000 --name mydjango_server --network my-network mhee4321/mydjango:1.0
**mysql용 Dockerfile 만들기
#docker_file/db_project/Dockerfile
FROM mysql:5.7
ENV MYSQL_ALLOW_EMPTY_PASSWORD true
ENV MYSQL_DATABASE mydb
EXPOSE 3306
CMD ["mysqld"]
(base) mhee4@Moonhees-MacBook-Pro db_project % $docker build -t mymysql .
$docker run -d -p 23306:3306 --network my-network --name mysql_server2 mymysql:latest
$docker exec -it mysql_server2 /bin/bash
root@b127755048e5:/# mysql -h127.0.0.1 -uroot -p
mysql> select * from bookmark_bookmark;
mysql>desc bookmark_bookmark;
-> 본래 mysql_server가 가지고 있던 테이블이 없다.
**필요한 테이블의 데이터를 모두 갖고 시작하기(다시 Dockerfile 만들기)
/Users/mhee4/docker_file/db_mount
/var/lib/mysql
#docker_file/Dockerfile
FROM mysql:5.7
ENV MYSQL_ALLOW_EMPTY_PASSWORD true
ENV MYSQL_DATABASE mydb
COPY db_mount /var/lib/mysql
EXPOSE 3306
CMD ["mysqld"]
**COPY할 때 주의사항 -> db_mount는 현재 Dockerfile이 있는 장소와 동일한 장소에 있어야 함. ->상대경로 사용불가
(**앞에서 hostPC와 mysql_server가 마운팅 안되어 있을 경우
->mysql_server2
drop database mydb;
create database new_mydb;)
db_mount/Dockerfile
$docker build -t mymysql:latest .
$docker run -d -p 13306:3306 --network my-network --name mysql_server mymysql:latest
$docker ps -a
$docker network inspect my-network
db_mount(mount된 mysql_server)
$docker tag mymysql:latest mhee4321/mymysql:latest
$docker push mhee4321/mymysql:latest
-----------------강사님께 제출할 두개의 코드-------------------
$docker run -d -p 13306:3306 --network my-network --name mysql_server mhee4321/mymysql:latest
$docker run -d -p 8000:8000 --network my-network --name mybookmark_app mhee4321/mydjango:1.0
-------------------------------------------------------------------------
STEP 4. PRIVATE REGISTRY 사용(보안적인 측면강화)
**docker hub에 registry검색
$ docker run -d -p 5000:5000 --restart always --name registry registry:2
$ docker pull ubuntu
$ docker tag ubuntu localhost:5000/ubuntu
$ docker push localhost:5000/ubuntu
$docker pull registry
$docker run -d -p 5000:5000 --restart always --name registry registry
$curl -X GET http://127.0.0.1:5000/v2/_catalog
{"repositories":}
$docker tag mhee4321/mymysql:latest localhost:5000/mymysql:latest
$docker tag mhee4321/mydjango:1.0 localhost:5000/mydjango:latest
**local repository에다 push하기
$docker push localhost:5000/mymysql:latest
$docker push localhost:5000/mydjango:latest
$curl -X GET http://127.0.0.1:5000/v2/_catalog
{"repositories":["mydjango","mymysql"]}
$docker run -d -p 13306:3306 --network my-network --name mysql_server localhost:5000/mymysql:latest
$docker run -d -p 8000:8000 --network my-network --name mybookmark_app localhost:5000/mydjango:latest
CNCF Cloud Native Interactive Landscape
This landscape is intended as a map through the previously uncharted terrain of cloud native technologies. There are many routes to deploying a cloud native application, with CNCF Projects representing a particularly well-traveled path.
landscape.cncf.io
주말과제(이번주 일요일까지)
-
Django 애플리케이션과 Mysql을 도커 이미지로 생성해서 https://hub.docker.com 사이트에 등록하기
-
Bookmark app을 Django 애플리케이션으로 생성 후, Docker image 생성
-
Mysql 이미지 생성 -> (Bookmark App에 필요한 데이터, 테이블 생성)
-
Django 앱과 Mysql의 Network는 동일한 네트워크로 설정(network id: my-network)
-
메일로 2개의 컨테이어 실행 방법을 제출 ex ) docker -d -p 3306:3306 --network my-network mymysql:latest
**my-network로 이름만 맞춰주기+django project의 mysql, django의 컨테이너 만들기
-----------------bookmark app----------------------
$docker run -d -p 13306:3306 --network my-network --name mysql_server mhee4321/mymysql:latest
$docker run -d -p 8000:8000 --network my-network --name mybookmark_app mhee4321/mydjango:1.0
------------------------------------------------------------------------
-----------------django project-----------------------
---------------------------------------------------------
'CLOUD > Docker' 카테고리의 다른 글
2/16 - 도커/쿠버네티스 활용 컨테이너 개발 7차시 (0) | 2021.02.16 |
---|---|
2/15 - 도커/쿠버네티스 활용 컨테이너 개발 6차시 (0) | 2021.02.15 |
2/9 - 도커/쿠버네티스 활용 컨테이너 개발 4차시 (0) | 2021.02.09 |
2/8 - 도커/쿠버네티스 활용 컨테이너 개발 3차시 (0) | 2021.02.08 |
2/5 - 도커/쿠버네티스 활용 컨테이너 개발 2차시 (0) | 2021.02.05 |