[개발심화] docker - 8주차 (1)

Hong·2022년 11월 5일
0
post-thumbnail


👨‍💻
사람들은 컴퓨터가 어떻게 돌아가는지 모르지만 모두가 컴퓨터를 사용한다
블록체인도 블록체인이 어떻게 돌아가는지 모르지만 모든 사람들이 일상속에서 자연스럽게 사용하게 되는 날이 올까?
나는 블록체인 네트워크에서 어떤 위치의 산업에 몸을 담궈야 할까
컴퓨터 언어와 프로그램 코어를 개발하는 사람들은 어떤 삶을 살아온걸까..
코딩을 찍먹으로나마 배우면서 컴퓨터를 만들고 프로그램 코어를 만지는 사람들은 어떤 대단한 사람들일까 생각하게 된다




🐳 Docker

Docker리눅스 컨테이너(Linux Container) 기술을 기반으로 하는 서비스다.
Docker파일을 통해 내가 개발하고자 하는 어플리케이션 실행환경을 코드로 작성할 수 있다.
OS로부터 격리된 환경에서 세팅되기 때문에 여러가지 앱을 개발할 때 각 컨테이너 별로 독립적인 개발환경을 세팅할 수 있다.
격리성을 제공하기 때문에 각 컨테이너마다 다른 컴퓨터에서 실행되는 것처럼 IP나 Port등을 다르게 할당할 수 있다.




Docker와 VM(가상머신)의 차이

  • 도커는 가상머신 만큼 견고한 격리성을 제공하지는 않는다
  • 도커는 OS위에 다른 OS를 얹는게 아니기 때문에 파티션으로 성능이나 메모리를 나누지 않는다 따라서 도커의 컨테이너를 여러개 사용한다고 해서 성능의 저하는 거의 없다


📦 Container

컨테이너는 어플리케이션의 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고 도커라는 기술 위에 실행될 수 있도록 만든 어플리케이션 상자다



🖼️ Image

실행되는 모든 컨테이너이미지로부터 생성된다.

이미지는 어플리케이션 및 어플리케이션 구성을 함께 담아놓은 템플릿으로, 이를 이용해 컨테이너를 계속해서 만들어낼 수 있다.
예를 들어 Node.js에 대한 이미지를 다운받았다면 내 컴퓨터의 Docker환경에서 Node.js 컨테이너를 계속해서 만들어낼 수 있다.



컨테이너 방식의 장점

  • 의존성 충돌 문제를 해결해 준다
    A라는 프로그램의 1.0버전과 2.0버전이 각각 다른 어플리케이션에서 필요하고 쓰여야 한다면 한 컴퓨터 안에서 충돌을 일으킬 것이다 컨테이너 방식은 이 문제를 해결해 준다

  • 개발과 배표 환경을 일치시킨다
    웹 서비스를 개발하는 개발팀을 상상해보자, 하난의 어플리케이션을 만들기 위해 특정 버전의 Node.js, MySQL등을 설치하고 그에 알맞은 OS환경, 환경변수도 잘 설정되어야 할 것이다. 하지만 이러한 세팅을 하는 과정을 쉽지않고 시간이 많이 드는 일이다 컨테이너 방식은 이 문제를 해결해 준다

  • 수평확장을 쉽게 해준다, 각 서버에 새로운 내요을 배포하기 쉽게 만들어준다
    구글은 실제로 리버스 프록시(로드 밸런서) 방식을 사용하기 위해 여러 개의 서버를 운영하고 있다 만약 구글이 서버를 더 늘리기를 원한다면 새 컴퓨터에 기존에 사용되고 있던 서버와 같은 환경을 만들어줘야 할텐데 이러한 상황에서 컨테이너 기술은 실헹환경의 일치를 통해 서버 증설을 쉽게 만들어준다.



Docker 기본명령어 정리

도커 버전확인

docker -v

도커 이미지 다운받기

docker pull {이미지명}:{태그}
# 예: docker pull python:3
//태그는 optional

내 컴퓨터의 도커 이미지들 확인

docker images

선택한 이미지로 컨테이너 만들기

docker create {옵션} {이미지명}:{태그}
# 예: docker create -it python

선택한 컨테이너에 들어가서 CLI열기

docker attach {컨테이너 id 또는 이름}
//or
docker exec -it {컨테이너 id 또는 이름} bash

Docker 명령어 옵션정리


동작중인 컨테이너 재시작

docker restart {컨테이너 id 또는 이름}

도커 컨테이너 CLI에서 빠져나오기(컨테이너를 종료)

exit
//or
Ctrl + D
//컨테이너를 종료하지 않고 빠져나오기만 하는 방법
Ctrl + P,Q

동작중인 컨테이너들 보기

docker ps
//동작중이 아닌 컨테이너들까지 보고싶다면
docker ps -a

컨테이너 삭제하기

docker rm {컨테이너 id 또는 이름}

# ⭐️ 모든 컨테이너 삭제
docker rm `docker ps -a -q`

이미지 삭제하기

docker rmi {옵션} {이미지 id}

컨테이너 중지하기(컨테이너는 중지시키고 삭제가능함)

docker stop {컨테이너 id 또는 이름}

Docker compose 실행하기

(docker-compose.yaml, yml파일이 존재해야함)

docker-compose up -d
//-d를 적어줘서 백그라운드에서 실행하도록 했음

docker-compose.yaml파일 예시

version: '3.8'

services:
    nginx:
        image: sebcontents/client
        restart: 'always'
        ports:
            -   "8080:80"
        container_name: client

    node:
        image: sebcontents/server
        restart: 'always'
        ports:
            -   "4999:80"
        container_name: server
        volumes:
            - "./volumefolder:/data"
        environment:
            DATABASE_USER: "my-db-user"
            DATABASE_PASSWORD: "my-db-password"
            DATABASE_HOST: "database"
            DATABASE_PORT: "3306"

    mysql:
        image: mysql:latest
        restart: 'always'
        ports:
            -   "3307:3306"
        container_name: database
        environment:
            MYSQL_ROOT_PASSWORD: "my-db-password"
            MYSQL_DATABASE: "my-database"
            MYSQL_USER: "my-db-user"
            MYSQL_PASSWORD: "my-db-password"







더 많은 내용이 있지만 필요할 때마다 공부해보기로 한다

참고했습니다
https://www.yalco.kr/36_docker/

profile
Notorious

0개의 댓글