概要
内容
- AWSのEC2にDockerを用いてPython環境を構築する
- 今回はseleniumでのブラウザ自動操作のパッケージを含めてコンテナ化する
環境
- OS:AWS Linux2
- サービス:AWS(EC2)
- タイプ:t2.micro
前提
- 自分のアカウントから上記環境のEC2が立てられている状態
参考資料
- Amazon ECS における Docker の基本
- docker docker-compose コマンド
- DockerImageをDockerHubに登録する方法
- AWS EC2インスタンスにdockerとdocker-composeをインストールして簡単なWEBサービスを立ち上げる方法
この辺から一部抜き出して履行。
必要なファイル
- Dockerfile
- docker-compose.yml
工程
- EC2インスタンスへ接続
- インスタンスでインストールされているパッケージとパッケージキャッシュを更新
$ sudo yum update -y
- 最新の Docker Community Edition パッケージをインストール
$ sudo amazon-linux-extras install docker
- 次はDocker Composeをcurlでインストール。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
バージョンが表示されていたら成功
- Dockerサービスを開始
$ sudo service docker start
- ec2-user をdockerグループに追加し、今後コマンドで入力するsudoを省略する
$ sudo usermod -a -G docker ec2-user
- 反映させるために一旦ログアウトし、再びEC2にログインする
- ec2-user が sudo を使用せずに Docker コマンドを実行できることを確認
$ docker info
2.Dockerhubに登録
-
DockerHubにアカウント登録
-
リポジトリを作成
-
EC2でDockerHubにログインする
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: アカウント名
Password: パスワード
Login Succeeded
3.Dockerイメージを作成するためのファイルを作成
-
必要なファイル
- Dockerfile
- docker-compose.yml
-
Dockerfileを作成。
$ touch Dockerfile
- vimで中身を編集
$ vim Dockerfile
- 今回はpython3とブラウザの自動操作をするためのパッケージが入ったイメージコンテナを作成する。
Dockerfile
FROM python:3
USER root
RUN apt-get update
RUN apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
#各種パッケージをインストール
RUN apt-get install -y vim less
RUN pip install --upgrade pip
RUN pip install --upgrade beautifulsoup4
RUN pip install --upgrade chromedriver
RUN pip install --upgrade chromedriver-binary
RUN pip install --upgrade datetime
RUN pip install --upgrade pandas
RUN pip install --upgrade pyyaml
RUN pip install --upgrade requests
RUN pip install --upgrade selenium
RUN pip install --upgrade regex
-
上記をコピーし:wqで保存する
-
次はdocker-compose.ymlを作成
touch docker-compose.yml
- これもvimで中身を編集。
vim docker-compose.yml
docker-compose.yml
version: '3'
services:
python3:
restart: always
build: .
container_name: 'scrayping'
working_dir: '/root/'
tty: true
volumes:
- ./opt:/root/opt
- 上記をコピーし:wqで保存する
3.Dockerイメージを作成
- docker-compose.ymlの内容に基づいてイメージを作成する
- このとき「-t」でdockerhubでつけるアカウント名/イメージ名にタグを命名しておかないとDockerHubにpush出来ない。注意
$ docker-compose build -t {dockerhubのアカウント名/イメージ名}
- イメーシを作成できたかチェック
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
shunsukenashiki/scrayping latest ed6df28c956e About an hour ago 1.15GB
こんな感じで作られていればOK
4.Dockerイメージを元に、コンテナを作成
- 作成したDocker imageを元にコンテナを作る
- 「-d」をつける理由は、-dをつけないとバックグラウンドでコンテナが起動しないから
$ docker run -d --name #{任意のコンテナ名} -d -it {REPOSITORY名}
- コンテナが作成され、起動されているかチェック。作成できていたら完了
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b42460c71e9c shunsukenashiki/scrayping "python3" 5 seconds ago Up 4 seconds scrayping
5.作成したコンテナを実行する
- 作成したコンテナを実行する
$ docker exec -it #{任意のコンテナ名} bash
- Dockerfileに指定したバージョンが入っていれば完了
$ pip3 list
Package Version
--------------- ---------
beautifulsoup4 4.9.1
certifi 2020.6.20
chardet 3.0.4
chromedriver 2.24.1
DateTime 4.3
idna 2.10
numpy 1.19.1
pandas 1.1.0
pip 20.2.1
python-dateutil 2.8.1
pytz 2020.1
requests 2.24.0
selenium 3.141.0
setuptools 49.2.1
six 1.15.0
soupsieve 2.0.1
urllib3 1.25.10
wheel 0.34.2
zope.interface 5.1.0
Doekerhubにアップロードする
- 動作確認できたら、Dockerhubにpushしていく
$ docker push shunsukenashiki/{dockerhubのアカウント名/イメージ名}:latest
- Dockerhubにちゃんと紐づけられていれば完了。あとはここからimageをpullすれば使いまわせる