以下のようにDockerfileを作る。これはPythonサーバと機械学習モデルを動かすコンテナなのでそのへんの設定も色々入っているが。。
# ベースイメージ FROM centos:7.6.1810 # pipを実行出来るようにするため、/opt/conda/binにpathを通す ENV PATH /opt/conda/bin:$PATH # /root/.local/binにパスが通っていないとライブラリのインストール中に警告メッセージが表示されるためPATHを通す。 ENV PATH /root/.local/bin:$PATH ## yumインストール RUN yum -y update \ && yum -y install bzip2 ca-certificates curl git initscripts \ lsof libSM.x86_64 libXext.x86_64 libXrender.x86_64 mesa-libGL.x86_64 nano openssh-server sudo tcpdump wget # 開発用ユーザ作成 RUN useradd -ms /bin/bash dev-user # パスワードをdevに設定 RUN echo 'dev-user:dev' | chpasswd RUN echo "dev-user ALL=(ALL) ALL" >> /etc/sudoers # Minicondaインストール RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-4.5.12-Linux-x86_64.sh -O /home/dev-user/miniconda.sh \ && /bin/bash /home/dev-user/miniconda.sh -b -p /opt/conda \ && rm /home/dev-user/miniconda.sh \ && /opt/conda/bin/conda clean -tipsy \ && ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh \ && echo ". /opt/conda/etc/profile.d/conda.sh" >> /home/dev-user/.bashrc \ && echo 'export PYTHONPATH="/home/dev-user/workspace/server"' >> /home/dev-user/.bashrc # SSH起動準備 RUN /usr/sbin/sshd-keygen -A # コンテナにログインする際に使用するauthorized_keysをコピー COPY ./authorized_keys /home/dev-user/.ssh/authorized_keys RUN chmod 700 /home/dev-user/.ssh RUN chmod 600 /home/dev-user/.ssh/authorized_keys RUN sed -ie 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config # ディレクトリコピー COPY ./server /home/dev-user/workspace/server # 実行時にエラーにならないよう、改行コードを変換する。実行権限を追加する。 RUN sed -i -e 's/\r//g' /home/dev-user/workspace/server/flask_run RUN chmod 766 /home/dev-user/workspace/server/flask_run # pip, condaインストール RUN su dev-user \ && source /home/dev-user/.bashrc \ && pip install --upgrade pip \ && conda update -n base -c defaults conda \ # awscliとboto3が無いとconda env createを実行した時にエラーが発生する(S3を自社のcondaパッケージリポジトリにしているので)ため、requirements.yamlを使わず個別にインストールする && pip install awscli --upgrade --user \ && conda install boto3 \ # publicパッケージインストール && cd /home/dev-user/workspace/server \ && conda env create -f requirements.yaml \ && conda activate p36 \ && exit # p36環境を作成した後で.bashrcに以下のコマンドを追加すること。作成前だとp36環境がないためユーザをdev-userに切り替えた時にエラーになる RUN echo "conda activate p36" >> /home/dev-user/.bashrc # tensorboard用ポート EXPOSE 6006 # SSH用ポート EXPOSE 22 # MLサービス用ポート EXPOSE 3333 # /optのownerがrootになっているとパッケージをインストールできないのでownerを変更する RUN chown dev-user:dev-user /opt -R # build中に作成・コピーされたファイルはownerがrootになっているのでdev-userに変更 RUN chown dev-user:dev-user /home/dev-user -R # runコマンドに-dオプションをつけてコンテナを起動したままにする想定のためここでは起動スクリプトを実行するのみとする CMD ["/usr/sbin/sshd", "-D"]
コンテナ起動時のコマンドは以下。-dオプションがないと起動してすぐにStopしてしまうので注意。
docker run -itd --rm -p 2222:22 -p 6006:6006 -p 3333:3333 -v /home/ec2-user/workspace:/workspace --name my-service my-service:001