-
DockerfileDevops/Docker 2019. 11. 1. 09:12반응형
docker 를 쓰기 시작했다면 dockerfile을 사용할수 밖에 없다. 도커 이미지를 만들때 꼭 필요하기 때문이다. dokcerhub 에 가봐도 dockfile 을 제공을 해준다. 개인적으로 설정이 귀찮거나 반복되는것들은 dockerfile 를 받아서 약간의 수정을하여 별도 관리를한다.
많이 쓰는 도커 파일 중 mysql 파일 하나를 샘플로 기록해놓으려고한다. 개발할때 AWS 에서 인스턴스를 받고 설정하고 하는 과정이 굉장히 긴경우가 많다. 결재도 올려야하고 방화벽도 확인해야하고.... Mac 을 쓴다면 도커를 좀더 편하게 쓰겠지만 난 Windows 유저이기 때문에 일단 Docker for Windows 를 사용하고 있다.
FROM debian:stretch-slim # add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added RUN groupadd -r mysql && useradd -r -g mysql mysql RUN apt-get update && apt-get install -y --no-install-recommends gnupg dirmngr && rm -rf /var/lib/apt/lists/* # add gosu for easy step-down from root ENV GOSU_VERSION 1.7 RUN set -x \ && apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \ && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \ && wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \ && export GNUPGHOME="$(mktemp -d)" \ && gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ && gpgconf --kill all \ && rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \ && chmod +x /usr/local/bin/gosu \ && gosu nobody true \ && apt-get purge -y --auto-remove ca-certificates wget RUN mkdir /docker-entrypoint-initdb.d RUN apt-get update && apt-get install -y --no-install-recommends \ # for MYSQL_RANDOM_ROOT_PASSWORD pwgen \ # for mysql_ssl_rsa_setup openssl \ # FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db: # File::Basename # File::Copy # Sys::Hostname # Data::Dumper perl \ && rm -rf /var/lib/apt/lists/* RUN set -ex; \ # gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported key='A4A9406876FCBD3C456770C88C718D3B5072E1F5'; \ export GNUPGHOME="$(mktemp -d)"; \ gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ gpg --batch --export "$key" > /etc/apt/trusted.gpg.d/mysql.gpg; \ gpgconf --kill all; \ rm -rf "$GNUPGHOME"; \ apt-key list > /dev/null ENV MYSQL_MAJOR 8.0 ENV MYSQL_VERSION 8.0.17-1debian9 RUN echo "deb http://repo.mysql.com/apt/debian/ stretch mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list # the "/var/lib/mysql" stuff here is because the mysql-server postinst doesn't have an explicit way to disable the mysql_install_db codepath besides having a database already "configured" (ie, stuff in /var/lib/mysql/mysql) # also, we set debconf keys to make APT a little quieter RUN { \ echo mysql-community-server mysql-community-server/data-dir select ''; \ echo mysql-community-server mysql-community-server/root-pass password ''; \ echo mysql-community-server mysql-community-server/re-root-pass password ''; \ echo mysql-community-server mysql-community-server/remove-test-db select false; \ } | debconf-set-selections \ && apt-get update && apt-get install -y mysql-community-client="${MYSQL_VERSION}" mysql-community-server-core="${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* \ && rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \ && chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \ # ensure that /var/run/mysqld (used for socket and lock files) is writable regardless of the UID our mysqld instance ends up having at runtime && chmod 777 /var/run/mysqld VOLUME /var/lib/mysql # Config files COPY config/ /etc/mysql/ COPY docker-entrypoint.sh /usr/local/bin/ RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat ENTRYPOINT ["docker-entrypoint.sh"] EXPOSE 3306 33060 CMD ["mysqld"]
위 도커파일은 내가 생성한게아니라 단순히 구글링하여 찾은 mysql 용 도커 파일이다. 솔직히 몇개빼고는 딱히 확인 안하고 그대로 이미지를 빌드하여 컨테이너를 생성한다.
나중에 추가로 기록을 하겠지만 docker-compose 를 쓰면 더욱 편하겠지만, docker-compose 를 쓰더라도 dockerfile 을 같이 혼용하는 경우도 있어서 앞으로도 계속 dockerfile 은 잊지 말고 잘 기억하도록 해야 할거 같다.
간단한 도커파일도 남겨 놓으려 한다. 최근에 zulu JDK 를 사용하면서 자바설정하는게 귀찮은 경우가 많았다. 별것도 아닌데 참 막상 하려면 왜이리 귀찮은지...
FROM ubuntu:18.04 # # UTF-8 by default # RUN apt-get -qq update && \ apt-get -qqy install gnupg2 locales && \ locale-gen en_US.UTF-8 && \ rm -rf /var/lib/apt/lists/* ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 # # Pull Zulu OpenJDK binaries from official repository: # RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9 && \ echo "deb http://repos.azulsystems.com/ubuntu stable main" >> /etc/apt/sources.list.d/zulu.list && \ apt-get -qq update && \ apt-get -qqy install zulu-8=8.40.0.25 && \ rm -rf /var/lib/apt/lists/*
단순하다 OS 를 설정하고 apt-get 을 이용하고 ... 인코딩이라던거 그런거 맞춰주고 azulsystem 의 키정도를 설정해준뒤 간단하게 zulu jdk 1.8 을 설정하는 게 다이다. 심지어 이 내용은 내가 만든게 아니라 azul 에서 dockerhub 에 이미 올려둔 도커파일이다. 도커파일이 뭔지 어떻게 구성하는지 보려면 이런 단순 샘플로 공부해보는것도 좋은거 같다.
반응형'Devops > Docker' 카테고리의 다른 글
Docker-compose 사용법 - 기초 (0) 2019.11.01 Docker 명령어 (0) 2019.11.01