MS's log
  • HOME
  • TAG
  • GUESTBOOK
  • ADMIN
Close

Who am I?

  • github.com/mskim9967

Category

  • 분류 전체보기 (121)
    • 대회, 프로젝트 (21)
      • 2021 국방 공공데이터 경진대회 (1)
      • 2021 군장병 해커톤 (16)
      • 2021 UNI-DTHON (1)
    • Study (58)
      • Backend (29)
      • Infra, DevOps (9)
      • Frontend (14)
      • Data Structure (6)
    • Coding Test (40)
      • Codeforces (1)
      • 백준 (10)
      • codeground (19)
      • 프로그래머스 (9)

Recent Post

Popular Post

Comment

Tags

  • rn
  • DevOps
  • 군대공부
  • React Native

Visitor Counter

어제

오늘

전체

Docker
By _MS
Study/Infra, DevOps
2021. 8. 11. 22:27

Docker

  • 컨테이너 기술을 지원하는 프로젝트 중 하나, 사실상 컨테이너 기술의 표준
  • 리눅스의 name space, cgroups와 같은 커널 기능을 사용하여 가상화
  • Cloud Service Model과 같이 사용 가능
    • Image: Program, Library, Source를 설취한 뒤 만든 하나의 File
    • Container: Image를 격리하여 독립된 공간에서 실행한 가상 환경

Container

  • VM을 사용해 각 Service를 isolate 하는 기술
  • VM처럼 HW를 전부 구현하지 않기 때문에 속도 빠름(오버헤드 제거)

Container Isolate

Linux namespace

각 process가 file system, network, uid, uts 등에 대해 시스템에 isolate view를 제공

Linux Control Group

Resource Mount를 관리(CPU, Memory, I/O, Network, Device node...)

Docker의 한계

  • Service가 커질 수록 관리해야 할 Container가 급격히 증가
    • 쿠버네틱스로 시스템을 관리

Docker Registry

  • 원하는 Image 다운로드 가능
  • https://hub.docker.com

Image Download

docker pull [service]

Image List

docker images


Docker life cycle

출처: https://www.notion.so/b67ed727aea4467cbc3226bb0c8e8336

Image Download/Remove

docker pull [image]
docker rmi [image]

Container Create

docker create -p [port] --name [container name] [image]

Container Run

docker start [Container name/id]

Running Container

docker ps

All Container

docker ps -a

Container Stop

docker stop [Container name/id]

Container Delete (after stop)

docker rm [Container name/id]


Image Layer

  • 이미지 정보 확인
    docker inspect [image]
  • 실질적 Image들은 _/var/lib/docker/overlay2_에 저장되어 있음

포트포워딩으로 톰캣 실행하기

sudo docker run -d --name tc -p 80:8080 tomcat

127.0.0.1:80로 접속

컨테이너 내부 셸 실행

sudo docker exec -it tc /bin/bash

컨테이너 로그 확인

sudo docker logs tc # stdout, stderr

호스트 및 컨테이너 간 파일 복사

sudo docker cp <path> <to container>:<path>
sudo docker cp <from container>:<path> <path>
sudo docker cp <from container>:<path> <to container>:<path>

도커 컨테이너 모두 삭제

sudo docker stop `sudo docker ps -a -q`
sudo docker rm `sudo docker ps -a -q`

임시 컨테이너 생성

sudo docker run -d -p 80:8080 --rm --name tc tomcat 

환경변수 전달하기

$ docker run -d --name nx -e env_name=test1234 nginx
/# printenv env_name

볼륨마운트

sudo docker run -d -p 80:80 --rm -v /var/www:/usr/share/nginx/html:ro nginx # ro:읽기전용 rw:읽기쓰기

도커 이미지 직접 빌드

도커 빌드할 프로그램 준비

python를 사용해 단순한 서비스를 시작 작성한다. 다음 파일을 작성하여 test_server.py로 저장한다.

# test_server.py
import socket

with socket.socket() as s:
  s.bind(("0.0.0.0", 12345))
  s.listen()
  print("server is started")
  conn, addr = s.accept()
  # conn 클라이언트와 통신할 소켓
  # addr 클라이언트의 정보가 들어있음
  with conn:
    print("Connected by", addr)
    while True:
      data = conn.recv(1024)
      if not data: break
      conn.sendall(data)
python3 test_server.py

---

nc 127.0.0.1 12345

도커 파일 생성

별도의 디렉토리를 생성하고 dockfile과 위에서 생성한 python파일을 새 디렉토리에 배치한다.

mkdir my_first_project
mv test_server.py ./my_first_project/
cd my_first_project/
gedit dockerfile

dockerfile

FROM python:3.7

RUN mkdir /echo
COPY test_server.py /echo

CMD ["python", "/echo/test_server.py"]

빌드 후 테스트

ls 
dockerfile test_server.py

sudo docker build -t ehco_test .
sudo docker images
sudo docker run -t -p 12345:12345 --name et --rm echo_test
nc 127.0.0.1 12345

이미지 푸시

sudo docker login
sudo docker tag echo_test [id]/echo_test
sudo docker images
sudo docker push [id]/echo_test
저작자표시 동일조건 (새창열림)

'Study > Infra, DevOps' 카테고리의 다른 글

[Jenkins Pipeline] Github repository 변경 시 자동 배포  (0) 2021.11.04
[AWS EC2] Docker 설치, root로 접속, 포트포워딩  (0) 2021.11.03
OpenStack  (0) 2021.07.10
가상화  (0) 2021.07.05
클라우드 컴퓨팅  (0) 2021.07.04
MS's log :: _MS
Contact
Github

Copyright MS's log

Designed by MemoStack

Unicons by Iconscout

티스토리툴바