👨💻
사람들은 컴퓨터가 어떻게 돌아가는지 모르지만 모두가 컴퓨터를 사용한다
블록체인도 블록체인이 어떻게 돌아가는지 모르지만 모든 사람들이 일상속에서 자연스럽게 사용하게 되는 날이 올까?
나는 블록체인 네트워크에서 어떤 위치의 산업에 몸을 담궈야 할까
컴퓨터 언어와 프로그램 코어를 개발하는 사람들은 어떤 삶을 살아온걸까..
코딩을 찍먹으로나마 배우면서 컴퓨터를 만들고 프로그램 코어를 만지는 사람들은 어떤 대단한 사람들일까 생각하게 된다
Docker
란 리눅스 컨테이너(Linux Container) 기술
을 기반으로 하는 서비스다.
Docker파일을 통해 내가 개발하고자 하는 어플리케이션 실행환경을 코드로 작성
할 수 있다.
OS로부터 격리된 환경
에서 세팅되기 때문에 여러가지 앱을 개발할 때 각 컨테이너 별로 독립적인 개발환경을 세팅
할 수 있다.
격리성을 제공하기 때문에 각 컨테이너마다 다른 컴퓨터에서 실행되는 것처럼 IP나 Port등을 다르게 할당
할 수 있다.
모든 컨테이너
는 이미지로부터 생성
된다.이미지
는 어플리케이션 및 어플리케이션 구성을 함께 담아놓은 템플릿
으로, 이를 이용해 컨테이너를 계속해서 만들어낼 수 있다.
예를 들어 Node.js에 대한 이미지를 다운받았다면 내 컴퓨터의 Docker환경에서 Node.js 컨테이너를 계속해서 만들어낼 수 있다.
의존성 충돌 문제를 해결해 준다
A라는 프로그램의 1.0버전과 2.0버전이 각각 다른 어플리케이션에서 필요하고 쓰여야 한다면 한 컴퓨터 안에서 충돌을 일으킬 것이다 컨테이너 방식은 이 문제를 해결해 준다
개발과 배표 환경을 일치시킨다
웹 서비스를 개발하는 개발팀을 상상해보자, 하난의 어플리케이션을 만들기 위해 특정 버전의 Node.js, MySQL등을 설치하고 그에 알맞은 OS환경, 환경변수도 잘 설정되어야 할 것이다. 하지만 이러한 세팅을 하는 과정을 쉽지않고 시간이 많이 드는 일이다 컨테이너 방식은 이 문제를 해결해 준다
수평확장을 쉽게 해준다
, 각 서버에 새로운 내요을 배포하기 쉽게 만들어준다
구글은 실제로 리버스 프록시(로드 밸런서) 방식을 사용하기 위해 여러 개의 서버를 운영하고 있다 만약 구글이 서버를 더 늘리기를 원한다면 새 컴퓨터에 기존에 사용되고 있던 서버와 같은 환경을 만들어줘야 할텐데 이러한 상황에서 컨테이너 기술은 실헹환경의 일치를 통해 서버 증설을 쉽게 만들어준다.
docker -v
docker pull {이미지명}:{태그}
# 예: docker pull python:3
//태그는 optional
docker images
docker create {옵션} {이미지명}:{태그}
# 예: docker create -it python
docker attach {컨테이너 id 또는 이름}
//or
docker exec -it {컨테이너 id 또는 이름} bash
docker restart {컨테이너 id 또는 이름}
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.yaml, yml파일이 존재해야함)
docker-compose up -d
//-d를 적어줘서 백그라운드에서 실행하도록 했음
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"
더 많은 내용이 있지만 필요할 때마다 공부해보기로 한다