dockerfileを作成してみた
今更ながら開発環境用にとdockerをインストールしたので、基本となるdockerfileを作ってみた。
設定内容
- centosで作成(latest→7.5.1804)
- rootパスワード設定
- 開発者ユーザ(グループ)の作成
- TimezoneをUTC→JTC
- localeを日本語へ
- ssh設定(sshfsを考え中)
- その他使いそうなものを適当にインストール
dockerfile
FROM centos:latest MAINTAINER tabucchi #-------------------------------- #Timezone設定 #-------------------------------- ENV TZ="Asia/Tokyo" #-------------------------------- #各ユーザの設定 #-------------------------------- ENV root_password=rootpass ENV developer_user_name=developer ENV developer_user_password=developerpass #-------------------------------- #locale設定 #-------------------------------- RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 ENV LANG="ja_JP.UTF-8" \ LANGUAGE="ja_JP:ja" \ LC_ALL="ja_JP.UTF-8" #-------------------------------- #rootパスワード設定 #-------------------------------- RUN echo "${root_password}" | passwd --stdin root #-------------------------------- #開発者グループ作成 #-------------------------------- RUN groupadd -g 61000 developer RUN echo "%developer ALL=(ALL) ALL" >> /etc/sudoers RUN echo "Defaults visiblepw" >> /etc/sudoers #-------------------------------- #開発者ユーザを作成 #-------------------------------- RUN useradd -g developer -m ${developer_user_name} RUN echo "${developer_user_name}:${developer_user_password}" | chpasswd RUN gpasswd -a ${developer_user_name} developer #-------------------------------- #必要なものパッケージのインストール #-------------------------------- RUN yum -y upgrade RUN yum clean all #systemd設定 RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; RUN yum -y install less #manのために再インストール RUN yum -y reinstall glibc RUN yum -y install man RUN yum -y --setopt=tsflags="" install man-pagess RUN yum -y install openssh-server RUN yum -y install openssh-clients RUN yum -y install sudo RUN yum -y install wget RUN yum -y rsync RUN yum -y install which RUN yum -y install git RUN yum -y clean all #-------------------------------- #ssh設定 #-------------------------------- RUN cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup RUN sed -ri "s/^UsePAM yes$/UsePAM no/g" /etc/ssh/sshd_config RUN sed -ri "s/^PasswordAuthentication yes$/PasswordAuthentication no/g" /etc/ssh/sshd_config RUN sed -ri "s/^#PermitEmptyPasswords no$/PermitEmptyPasswords no/g" /etc/ssh/sshd_config #下記はデフォルトで有効のためコメントアウト #RUN sed -ri "s/^ChallengeResponseAuthentication yes$/ChallengeResponseAuthentication/ no/g" /etc/ssh/sshd_config RUN sed -ri "s/^#PermitRootLogin yes$/PermitRootLogin no/g" /etc/ssh/sshd_config #-------------------------------- #service設定 #-------------------------------- RUN systemctl enable sshd.service #-------------------------------- #systemd設定 #-------------------------------- VOLUME [ "/sys/fs/cgroup", "/run" ] CMD ["/usr/sbin/init"]
rootパスワードや開発者ユーザ(グループ)部分は変数にして簡単に変更できるようにしてます。 もちろんですが、サンプルなのでこのままの使用は厳禁です。
sshdをserviceに登録しようとすると「Failed to get D-Bus connection: Operation not permitted」とエラー。
調べてみると、「docker run」で特権モード(privileged)して解決してるところが多かったが・・・特権なんておいそれと渡していいものなのかと疑問符がついたので、下記の「Dockerfile for systemd base image」辺りから参考にしました。
https://hub.docker.com/_/centos/
「VOLUME」部分は「/run」を追加しないとMacでは動かないため下記を参考に。
https://www.ikemo3.com/inverted/docker/centos7/
また、TimezoneがJSTにできなかったので下記を参考にさせて頂きました。
http://yoru9zine.hatenablog.com/entry/2017/01/12/224637
manを入れたのはおまけです(笑)
あとは下記コマンドな感じで終わりです。 「docker run」と「dokcer exec」が周りくどいのは上記のsshdとserviceのエラーのリンク先をご覧ください。
ビルド時
docker build -t centos_latest:test -f ./Dockerfile --force-rm --no-cache ./ docker run -d --hostname centos_test --name centos_test -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos_latest:test /sbin/init docker exec -i -t -u developer centos_test /bin/bash
起動時
docker start docker exec -i -t -u developer centos_test /bin/bash
あとは環境によってnginx、apache、DBとか入れるとりあえずはこんなもんかな?
port設定もそのときに考えよう。
追記(2018/09/05)
centosのversion書き忘れてました。
[developer@centos_test /]$ cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)