Docker

기본

Dockerfile

FROM hayd/ubuntu-deno:1.3.0
MAINTAINER skpark1224@hyundai.com

WORKDIR /www
CMD deno run --allow-net --allow-read hello.ts

Go는 빌드 후에 바이너리만 별도로 담을 수 있기 때문에1 multi-stage builds를 사용하면 docker를 위한 최적의 언어 같다.

FROM golang:1.8-alpine
ADD . /go/src/hello-app
RUN go install hello-app

FROM alpine:latest
COPY --from=0 /go/bin/hello-app .
ENV PORT 8080
CMD ["./hello-app"]

명령

# Stop & Remove
docker stop aas-www-container
docker rm aas-www-container

# Build
docker build -t aas-www-image .

# Run
docker run -d --name aas-www-container -p 80:8123 -v /home/gcp-user/www:/www aas-www-image
docker logs -f aas-www-container

Apache Hello World

FROM ubuntu:18.04

# Install dependencies
RUN apt-get update && \
 apt-get -y install apache2

# Install apache and write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html

# Configure apache
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
 echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
 echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ 
 echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ 
 chmod 755 /root/run_apache.sh

EXPOSE 80

CMD /root/run_apache.sh

스크립트

Gist 정리

  • update-docker.sh
    업데이트가 있을 경우 자동으로 이미지를 받아서 교체
  • dockerize.sh
    도커 이미지를 빌드해서 배포

Push Docker Image to ECR

readonly VERSION=$(date '+%y.%m.%d')
readonly ECR_REGISTRY=0996xxx.dkr.ecr.ap-northeast-2.amazonaws.com/edith/edith-xxxx
readonly AWS_OTP=$(aws ecr get-login-password --region ap-northeast-2)

echo "${AWS_OTP}" | docker login --username AWS --password-stdin ${ECR_REGISTRY}
docker tag edith/edith-xxxx:latest ${ECR_REGISTRY}:"${VERSION}"
docker push ${ECR_REGISTRY}:"${VERSION}"

Push the Docker image to Container Registry

$ gcloud auth configure-docker
$ docker push gcr.io/edith-xxx/hello-app:v1

GCP는 docker login 필요 없이 gcloud 인증으로 바로 진행된다.

CMD vs. ENTRYPOINT

항상 헷갈린다. 주로 CMD로 처리했으며, docker run 이후에 실행된다.

  • CMD: when container runs with a command, e.g., docker run -it <image> /bin/bash, CMD is ignored and bash interpreter runs instead.
  • ENTRYPOINT: Shell form of ENTRYPOINT ignores any CMD or docker run command line arguments.

RUN, CMD, ENTRYPOINT의 관계를 잘 정리한 글

# Dockerfile
FROM ubuntu
ENTRYPOINT ["/bin/cat"]

and

$ docker build -t=cat .

then you can see:

$ docker run cat /etc/passwd
#                ^^^^^^^^^^^
#                    CMD
#            ^^^      
#            image (tag)- using the default ENTRYPOINT

Link

아래는 php 어플리케이션을 구동하기 위해 몇 가지 수정한 Dockerfile이다.

FROM php:7-apache
LABEL maintainer="kaon.park@xxx"

# 기본 포트가 80으로 설정되어 있어 sed로 교체한다.
ENV CONTAINER_PORT 18080
EXPOSE 18080
RUN sed -i "s/80/$CONTAINER_PORT/g" /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf

# CMD is the command the container executes by default when you launch the built image.
# A Dockerfile can only have one CMD.
# CMD docker-php-entrypoint apache2-foreground

# 개발시에는 VOLUME 설정을 하고 실서비스는 파일을 복사한다.
COPY ./demo/index.php /var/www/html/

Keep Docker Containers Running

FROM amazonlinux:latest
...
CMD tail -f /dev/null

Books

도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문 2018, 2019

  • 도커 컨테이너 배포
  • 스웜을 이용한 실전 애플리케이션 개발
    • 필요 없음
  • 쿠버네티스 입문/클러스터 구축
    • GKE에서 진행
  • 쿠버네티스 실전
    • kubectl, helm등 다양한 활용 방법 소개, rolling update 전략, service mesh Istio 언급.
  • 컨테이너 운영
    • log 관리, GCP의 stackdriver logging 소개(현재는 Cloud Logging)
  • 가벼운 도커 이미지 만들기
    • scratch, busybox, alpine 까지 소개한다.

중간중간 컬럼을 통해 저자의 생각을 읽을 수 있어서 좋다.

Last Modified: 2020/09/24 20:56:05


Docker  ·  Kubernetes  ·  Zsh  ·  Software Deployment  ·  GCP  ·  AI Platform  ·  PyData  ·  GCS  ·  BigQuery  ·  XGBoost  ·  Deno  ·  JetBrains  ·  수식  ·  2020 Book Reports  ·  Santander Product Recommendation  ·  GPU Data Science  ·  Python  ·  Markov Decision Process  ·  통계학  ·  통계학 책  ·  Front-End  ·  머신러닝  ·  Activation, Cost Functions  ·  알고리즘  ·  자료구조  ·  비지니스  ·  AWS  ·  NLP 링크  ·  알고리즘 링크  ·  머신러닝 링크  ·  사회심리학  ·  Information Retrieval  ·  통계학 응용  ·  OOP  ·  2019 Book Reports  ·  Android Development  ·  데이터 사이언스  ·  인공지능  ·  진화생물학  ·  이산수학  ·  수학  ·  미래학  ·  Project Management  ·  LifeHacks  ·  C++  ·  2017 Book Reports  ·  Decision Tree  ·  TensorRT  ·  NLP  ·  Hadoop, Spark  ·  데이터 마이닝  ·  CNN, RNN  ·  2018 Book Reports  ·  운영체제  ·  머신러닝 분류기  ·  거리  ·  Support Vector Machine  ·  OAuth 2.0  ·  Naive Bayes  ·  Jupyter Notebooks  ·  RSA  ·  컴파일러  ·  딥러닝  ·  Word Embedding  ·  컴퓨터시스템구조  ·  영어  ·  Go  ·  Scikit Learn  ·  NLP 실험  ·  MySQL  ·  Keras  ·  Java
is a collection of Papers I have written.
© 2000 - Sang-Kil Park Except where otherwise noted, content on this site is licensed under a CC BY 4.0.
This site design was brought from Distill.