컨테이너
실전 구축 및 배포
도커의 적정한 배포단위란?
도커의 적정한 배포 단위
- 공식문서에 의하면 "컨테이너는 하나의 관심사에만 집중해야한다" 라는 입장을 밝히고 있다.
- 하나의 관심사란 한가지 역할이나 도메인(문제영역)에만 집중해야 한다는 의미이다.

도커의 적정한 배포 단위
- 전통적인 웹 어플리케이션 스택
- 웹서버 (Apache, Nginx)
- WAS (Tomcat, etc..)
- DB (MySQL, Postgresql, Oracle ..)
- 역할이 적절히 분배되었다면 컨테이너들이 복제되어도 전체적인 구조에서 부작용이 발생하지 않을 것이다.

도커 이미지는 한번 만들면 정말
모든 곳에서 실행될까?
컨테이너의 이식성
- CPU 아키텍처란?
-
가장 잘 알려지고 많이 사용하는 CPU
- PC에 인텔x86
- 휴대폰에 ARM
컨테이너의 이식성
- 도커에 컨테이너는 특정 CPU 아키텍처 위에서 돌아가는 리눅스에서 실행되기 때문에 이미지를 생성한 컴퓨터에 CPU 아키텍처에 종속된다.
- x86 CPU로 돌아가는 리눅스에서 만들어진 컨테이너 이미지는 ARM CPU로 돌아가는 리눅스에서는 실행되지 않는다.
- 윈도우 전용 컨테이너 이미지도 있는데 이것도 리눅스에서는 실행할 수 없다.
-
비록 동일한 x86 CPU를 기반으로 하지만 커널과 OS에 구조가 다르기 때문에 동작하지 않는다.
도커에 이미지는 CPU 아키텍처와 OS에 종속된다
컨테이너의 이식성

- 도커가 지원하는 플렛폼을 늘려가고 있지만 한번 만들어진 이미지가 모든 환경에서 동작하는 것은 아니기 때문에 주의가 필요하다.
컨테이너의 이식성

컨테이너의 이식성
라이브러리와 동적 링크 문제
컨테이너의 이식성

컨테이너의 이식성

컨테이너의 이식성

컨테이너의 이식성

도커에 잘 맞는 애플리케이션을
만들려면?
도커 친화적인 애플리케이션
- 실행시 인자 사용
- 설정 파일 사용
- 애플리케이션 동작을 환경 변수로 제어
- 설정 파일에 환경 변수를 포함
컨테이너가 파기되더라도
데이터를 지키는 방법
퍼시스트 레이어를 다루는 방법
- 새 버전의 이미지를 pull 받는다.
- 기존 컨테이너를 삭제(stop, rm)
- 새 버전의 이미지 기반의 새 컨테이너를 실행(run)
도커에서 컨테이너를 업데이트 할때
퍼시스트 레이어를 다루는 방법
데이터 베이스에 적용해보면






$ docker run -d -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 --name mysql_test mysql





$ docker container stop mysql
$ docker container rm mysql


퍼시스트 레이어를 다루는 방법
컨테이너에 데이터를 저장할때의 문제점
- 컨테이너를 삭제하게 되면 데이터도 같이 삭제
- 다른 프로세스에서 컨테이너의 저장된 데이터를 사용하기 어려움
- 컨테이너가 실행 중인 Host Machine에서 데이터를 다른곳으로 옮기기가 쉽지 않음
- 컨테이너에 데이터를 저장할때는 File System을 관리하는 Storage Driver가 필요한데, Storage Driver는 Linux 커널을 사용하여 공용 File System을 제공하는데 이 기능은 Host File System에 직접 쓰는 데이터 볼륨보다 성능이 떨어짐
퍼시스트 레이어를 다루는 방법
도커에서 데이터를 안전하게 존속시킬수 있는 방법 3가지
- volume
- bind mounts
- tmpfs
어떤 것을 사용해야할 지 모를 때는 volume를 사용하시기 바랍니다
퍼시스트 레이어를 다루는 방법
올바른 Mount 유형 선택 방법
- 어떤 유형의 Mount를 사용하든 데이터는 컨테이너 내에서 컨테이너 File System의 폴더나 개별적인 파일들로 동일하게 표시됨
- 가장 큰 차이점은 Host 내 어디에 존재하느냐

퍼시스트 레이어를 다루는 방법
volume
- Linux에서는 /var/lib/docker/volume/{볼륨이름} Host File System 일부에 데이터가 저장
- 도커가 아닌 프로세스들은 File System의 해당 부분을 수정 불가
- 도커에서 데이터를 존속시키는 가장 좋은 방법

퍼시스트 레이어를 다루는 방법
bind mount
- Host File System 어디에든지 저장될 수 있음
- Host 또는 컨테이너의 Non-Docker 프로세서들이 언제든지 데이터 수정이 가능함

퍼시스트 레이어를 다루는 방법
tmpfs mount
- Host 또는 컨테이너 내의 디스크에서 데이터가가 유지되지 않습니다.
- 비영구적인 상태 정보나 민감 정보들 같이 컨테이너의 생명주기와 맞춰서 데이터를 보존하고자 할 때 사용할 수 있음

퍼시스트 레이어를 다루는 방법
mariadb
# MariaDB Dockerfile
#
# https://github.com/dockerfile/mariadb
#
# Pull base image.
FROM dockerfile/ubuntu
# Install MariaDB.
RUN \
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0xcbcb082a1bb943db && \
echo "deb http://mariadb.mirror.iweb.com/repo/10.0/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/mariadb.list && \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y mariadb-server && \
rm -rf /var/lib/apt/lists/* && \
sed -i 's/^\(bind-address\s.*\)/# \1/' /etc/mysql/my.cnf && \
echo "mysqld_safe &" > /tmp/config && \
echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config && \
echo "mysql -e 'GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\";'" >> /tmp/config && \
bash /tmp/config && \
rm -f /tmp/config
# Define mountable directories.
VOLUME ["/etc/mysql", "/var/lib/mysql"]
# Define working directory.
WORKDIR /data
# Define default command.
CMD ["mysqld_safe"]
# Expose ports.
EXPOSE 3306도커들의 모임 스웜
Copy of 도커 스웜 및 스웜을 이용한 애플리케이션 개발
By leejaemin
Copy of 도커 스웜 및 스웜을 이용한 애플리케이션 개발
- 147