728x90

 

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

 

https://landscape.cncf.io

 

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

 


주말과제(이번주 일요일까지)

 

  1. Django 애플리케이션과 Mysql을 도커 이미지로 생성해서 https://hub.docker.com 사이트에 등록하기

  2. Bookmark app을 Django 애플리케이션으로 생성 후, Docker image 생성

  3. Mysql 이미지 생성 -> (Bookmark App에 필요한 데이터, 테이블 생성)

  4. Django 앱과 Mysql의 Network는 동일한 네트워크로 설정(network id: my-network)

  5. 메일로 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-----------------------

 

---------------------------------------------------------

 

 

 

 

 

 

 

728x90

+ Recent posts