User Tools

Site Tools


docker

Docker?

도커는 무엇인가?

https://www.codeschool.com/screencasts/docker-part-1 보고 정리.

MAC 에서 docker 사용하기.

Docker를 이용하여, 간단한 index.html 화일을 호스팅 해보자.

맥에서 터미널 열고 docker를 사용해보자.

1. vm 초기화

boot2docker init

2. vm 부트

boot2docker up

3. 도커 호스트 환경변수 설정. 클라이언트 접속할 위치

export DOCKER_HOST=tcp://192.168.59.103:2375

4. Docker 컨테이너 실행.

docker run ubuntu /bin/echo "Hello from Docker"

컨테이너는 무엇인가?

virtual machines ? no. It just a binary on the thin layer of Host OS.


5. Create my container

silverywave_static 디렉토리의 index.html 파일을 nginx로 호스팅.

mkdir silverywave_static
cd silverywave_static

cat > Dockerfile
FROM ubuntu 

RUN apt-get update
RUN apt-get install -y nginx
RUN echo "Daemon off;" >>/etc/nginx/nginx.conf

ADD index.html /usr/share/nginx/html/index.html

EXPOSE 80

ENTRYPOINT /usr/sbin/nginx

index.htm 만들기.

cat > index.html
<html>
<body>
<h1> Hello from Docker  <h1>
</body>
</html>

Dockerfile로 부터 silverywave_static:nginx 이미지 생성.

docker build -t silverywave_static:nginx .

silverywave_static:nginx 이미지 실행하여 컨테이너 생성

docker run -p 80:80 silverywave_static:nginx

호스트 웹브라우져에서 index.html 파일 보기

boot2docker ip
open $(boot2docker ip)

docker 이미지, 컨테이너 상태 보기

docker ps

docker 컨테이너의 상태를 이미지에 커밋.

# 7f09 is container id
docker commit -m "Added ngine x and static site" 7f09 silverywave_static:nginx

Dockerizing Rails

웹서비스 도커라이징 해보자.

1. Dockerfile 만들기.

Dockerfile

FROM ubuntu:14.04

RUN apt-get update -q
RUN apt-get install -qy python-software-properties software-properties-common
RUN add-apt-repository -y ppa:brightbox/ruby-ng
RUN apt-get update -q
RUN apt-get isntall -qy nginx ruby2.1 ruby2.1-dev nodejs sqlite3 libsqlite3-dev
zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libxml2-dev
libxslt1-dev libcurl4-openssl-dev git-core curl
RUN echo "daemon off;" >> /etc/ngingx/nginx.conf
RUN rm /etc/nginx/sites-enables/default
RUN mkdir -p /var/www
RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc"

WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN /bin/bash -l -c "bundler install"
 
ADD ./ /var/www/web
ADD config/journal.conf /etc/nginx/sites-enabled/journal
ADD config/start_server.sh /usr/bin/start_server
RUN chmod +x /usr/bin/start_server
RUN mkdir -p /var/www/web/tmp/pids
RUN mkdir -p /var/www/web/tmp/sockets
RUN mkdir -p /var/www/web/log

WORKING /var/www/web

EXPOSE 80

ENTRYPOINT /usr/bin/start_server
cat > config/start_server.sh
#!/bin/bash
cd /var/www/web
bundle exec unicorn -c config/uniconrn/production.rb -E production -D
nginx

2. Dockerfile 로 도커 빌딩.

docker build -t silverywave/web
docker run -p 80:80 -t silverywave/web

3. 코드 저장소에 웹서비스 코드 커밋

git add .
git commit -am "..."
git push -f

4. 서버에 웹서비스 디플로이

서버 접속

ssh root@...

서버에서 코드 pull 하고, docker 컨테이너 실행

su -l deploy
git clone ...
cd web

docker build -t silverywave/web
docker run -p 80:80 -t silverywave/web

Docker Hub

이미지를 매번 만드는것도 귀찮은 일이다. 코드가 커밋되면 Docker Hub 전체 이미지를 빌드 하도록 만들어 보자.

hub.docker.com 이미지 공유. github로 가입.

1. Add repository

donghee/web

2. 이미지 만들어서 hub.docker.com에 업로드 해보자.

docker build -t silverwave/web
docker login
docker push silverywave/web

3. Add Automated Build

새로운 커밋이 올라오면 github의 hook 기능을 이용하여, hub.docker.com에 github 코드 저장소의 Dockerfile을 읽어서 이미지를 빌드 할 수 있다.

Docker Linked containers

왜 containers를 연결하나? 장점? -

db컨테이너와 웹서비스 컨테이너.

1. db 컨테이터 실행

docker run -d --name db silverywave/postgres

2. web 컨테이너 실행. db와 연결. 웹의 45000포트로 접속해서 서비스 돌고 있는지 확인.

docker run -i -t --name web --link db:db -p 45000:80 --entrypoint /bin/bash
silverywave/web -s
docker.txt · Last modified: 2018/07/18 14:10 by 127.0.0.1