##まだ、Dockerfileを理解できていません。
Linux等初心者ですが、EC2でデプロイしていたAPIをコンテナ化したと思っています。
そこで/bin/bashでの実行コマンドとDockerfileの違いと留意点をメモ程度に残していきます。
##Python3.6の実行環境を作成してAPIを実行する
###手順1
Dockerfileを作成する前に、SSHで接続して実行コマンドを確認します。
EC2にDockerをインストールして、centosを稼働させて、/binb/bashを開く
[root@ip-10-0-0-0 /]# yum install -y docker
[root@ip-10-0-0-0 /]# service docker start
[root@ip-10-0-0-0 /]# docker pull centos
[root@ip-10-0-0-0 /]# docker run -it centos /bin/bash
[root@<CONTAINER ID> /]# mkdir app
###手順2
別ターミナルからホストへ接続する
ファイルをcontainerにファイルをコピーする
[root@ip-10-0-0-0 /]# cd /home/ec2-user/docker/app
[root@ip-10-0-0-0 /]# docker cp sample.txt <CONTAINER ID>:/app/
[root@ip-10-0-0-0 /]# docker cp sample.py <CONTAINER ID>:/app/
###手順3
centos7にpython3.6をインストールする
[root@2be128fcf8e0 /]# yum install -y https://centos7.iuscommunity.org/ius-release.rpm
[root@2be128fcf8e0 /]# yum search python36
[root@2be128fcf8e0 /]# yum install -y python36u python36u-libs python36u-devel python36u-pip
[root@2be128fcf8e0 /]# python3.6 -V
[root@2be128fcf8e0 /]# yum install -y python-pip unzip
[root@2be128fcf8e0 /]# yum clean all
###手順4
API実行環境を構築する
依存関係を解決して、APIを実行する
[root@2be128fcf8e0 /]# pip3.6 install -r /app/sample.txt
[root@2be128fcf8e0 /]# curl https://s3.dualstack.us-east-1.amazonaws.com/aws-xray-assets.us-east-1/xray-daemon/aws-xray-daemon-linux-2.x.zip -o /app/xray.zip
[root@2be128fcf8e0 /]# unzip /app/xray.zip -d /app/
[root@2be128fcf8e0 /]# chmod +x /app/xray
[root@2be128fcf8e0 /]# nohup ./app/xray &
[root@2be128fcf8e0 /]# export ID="xxxx"
[root@2be128fcf8e0 /]# export HASH="xxxx"
[root@2be128fcf8e0 /]# python3.6 /sample.py &
##上記の/bin/bashコマンドをDockerfileにする
###手順5
ホストでDockerfileを作成する
[root@ip-10-0-0-0 /]# cd /home/ec2-user/docker/
[root@ip-10-0-0-0 docker]# vim Dockerfile
FROM centos
SHELL ["/bin/bash", "-c"]
RUN mkdir app
ADD ./app/sample.txt /app/
ADD ./app/sample.py /app/
RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm
RUN yum install -y python36u python36u-libs python36u-devel python36u-pip
RUN yum install -y python-pip unzip
RUN yum clean all
RUN pip3.6 install -r /app/sample.txt
RUN curl https://s3.dualstack.us-east-1.amazonaws.com/aws-xray-assets.us-east-1/xray-daemon/aws-xray-daemon-linux-2.x.zip -o /app/xray.zip
RUN unzip /app/xray.zip -d /app/
RUN chmod +x /app/xray
ENV ID xxxx
ENV HASH xxxx
EXPOSE 80
ENTRYPOINT ["/bin/bash", "-c", "nohup /app/xray & python3.6 /app/sample.py"
##注意点
ADD
を行うとき、ホストのディレクトリはDockerfileからの相対パスで、contaierは絶対パスで指定する
###手順6
コンテナイメージを作成する
[root@ip-10-0-0-0 docker]# sudo docker build -t hoge/sample .
[root@ip-10-0-0-11 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hoge/sample latest dbf27332668d About a minute ago 766MB
###手順6
動作確認を行う
[root@ip-10-0-0-11 docker]# docker run -p 8080:80 hoge/sample
[root@ip-10-0-0-11 docker]# curl http://localhost:8080
OK
Clean upを停止する
[root@ip-10-0-0-11 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a29b60ce0d0 hoge/sample "/bin/bash -c 'nohup…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp upbeat_bhaskara
[root@ip-10-0-0-11 docker]# docker stop 3a29b60ce0d0
[root@ip-10-0-0-11 docker]# docker rm 3a29b60ce0d0
[root@ip-10-0-0-11 docker]# docker rmi hoge/sample
#imageをECRにpushする
[root@ip-10-0-0-11 docker]# aws ecr create-repository --repository-name sample
{
"repository": {
"registryId": "xxxxxxxxxxxx",
"repositoryName": "sample",
"repositoryArn": "arn:aws:ecr:us-west-2:986846499074:repository/sample",
"createdAt": 1561552246.0,
"repositoryUri": "xxxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/sample"
}
}
[root@ip-10-0-0-11 docker]# docker tag hoge/sample xxxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/sample
[root@ip-10-0-0-11 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xxxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/sample latest dbf27332668d 30 minutes ago 766MB
hoge/sample latest dbf27332668d 30 minutes ago 766MB
[root@ip-10-0-0-11 docker]# aws ecr get-login --no-include-email
docker login -u AWS -p eyJw...
[root@ip-10-0-0-11 docker]# docker login -u AWS -p eyJw...
Login Succeeded
[root@ip-10-0-0-11 docker]# docker push xxxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/sample
latest: digest: sha256:0a3...
##おまけ
DockerimageからDokerfileの内容を除くことができます。
[root@ip-10-0-0-11 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hoge/sample latest dbf27332668d About a minute ago 766MB
[root@ip-10-0-0-11 docker]# docker history dbf27332668d --no-trunc
IMAGE CREATED CREATED BY SIZE COMMENT
sha256:dbf27332668d18bc48a2cb30468aee4b16c8bea6f596a98b312e172c4366aa84 13 minutes ago /bin/bash -c #(nop) ENTRYPOINT ["/bin/bash" "-c" "nohup /app/xray & python3.6 /app/sample.py"] 0B
sha256:220eca136f7db5e9c9f224551932e49a79959230b4f679dc2ddf2292a418e351 13 minutes ago /bin/bash -c #(nop) EXPOSE 80 0B
sha256:df33c7600f7f5d08715c97a5a905b17f58a7cd88ce759fd9d2aea63aea745dbb 13 minutes ago /bin/bash -c #(nop) ENV HASH=xxxx 0B
sha256:f2ab49e976a045ed27096e7dea36b561ef1fb2e3b4dcb7b3253c8cd8b8c88507 13 minutes ago /bin/bash -c #(nop) ENV ID=xxxx 0B
sha256:5c0eb56c3535bca518ef49b5c20dd2826852cd3873208aa2e70622cfb53516d0 13 minutes ago /bin/bash -c chmod +x /app/xray 7.33MB
sha256:92e923a246f3515851fb4b456ff931dea201be7de61a1262016522c3d7560865 13 minutes ago /bin/bash -c unzip /app/xray.zip -d /app/ 7.34MB
sha256:312af55cdcd4788a870189a30d6a8cce66f7e389c00e35bfec82c30c454c68e0 13 minutes ago /bin/bash -c curl https://s3.dualstack.us-east-1.amazonaws.com/aws-xray-assets.us-east-1/xray-daemon/aws-xray-daemon-linux-2.x.zip -o /app/xray.zip 2.56MB
sha256:6e376cd82ad2b5bf121a631f6f86a499cf0bcce5a0f48744d4ca33998167aa36 13 minutes ago /bin/bash -c pip3.6 install -r /app/sample.txt 64.4MB
sha256:0e74d5056f1eeb936a9a65a1029d35b8f66a80a9a62159ea2f961da18d93cd86 13 minutes ago /bin/bash -c yum clean all 22.7MB
sha256:d7d36ad40d4befb6271606b43dd02e9d59cb04ef367339524d3d5bd502fef4d8 13 minutes ago /bin/bash -c yum install -y python-pip unzip 153MB
sha256:2d5b649ef91d757fca8ab08343f2fa4246d9fc0f0eb1357ace1226437699b3ef 13 minutes ago /bin/bash -c yum install -y python36u python36u-libs python36u-devel python36u-pip 203MB
sha256:3a0dd4e152f70eaf44ac5452aa37bfef047cc0e5f823e2d8e132dea29aec4788 14 minutes ago /bin/bash -c yum install -y https://centos7.iuscommunity.org/ius-release.rpm 104MB
sha256:a3dbf80799613b9cf11da134b395f14adc59b62fc888057a5fb808736fb8ce5f 14 minutes ago /bin/bash -c #(nop) ADD file:60d101d667a50acd110f26c14c5fa29f0d3302b4cc23afcfac055d1fdb8c9635 in /app/ 4.54kB
sha256:9daa21003b7ec0402969dac14ad87e0f09f875af46b8ff24df5586484140718d 14 minutes ago /bin/bash -c #(nop) ADD file:509b139751359e0a747e3d5f2831a82b53fbe23f49494140cd3a85ac7c00b7b0 in /app/ 41B
sha256:b826b60c9dadfee14b6b52835ee73c432f2c7f8604939478545de4cea2837d81 14 minutes ago /bin/bash -c mkdir app 0B
sha256:e9fac8bf88041e83cb12c6c031c1924f7fa1b1766ef3b804d551b1743d4ecc10 14 minutes ago /bin/bash -c #(nop) SHELL [/bin/bash -c] 0B
sha256:9f38484d220fa527b1fb19747638497179500a1bed8bf0498eb788229229e6e1 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) LABEL org.label-schema.schema-version=1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20190305 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:074f2c974463ab38cf3532134e8ba2c91c9e346457713f2e8b8e2ac0ee9fd83d in / 202MB
```