dockerとは?
dockerとは、2013年にdotCloud(現Docker)社が公開したアプリケーション実行環境である。
dockerはLXC(Linux Containers)機能を使い、コンテナ型仮想化技術を実現している。
これによって、1つのOS上で実行環境を他のプロセスから隔離してその中でアプケーションを動作させることができる。
dockerを使用することで、実行するのに複雑な手順が必要な環境の構築の必要がなくなるため、開発環境やテスト段階での使用目的での利用はもちろん、本番システム上での利用も増えつつある。
実際に使用してみて
- ローカル等で開発環境を作りたいときに面倒な、環境構築手順をスキップすることができる
- 本番環境に一部の処理で必要なソフトウェアやライブラリをインストールしなければならない場合、それをdocker内で実行することで本番環境の汚染を防ぐことができる
といったメリットを感じている。
dockerの使い方
dockerのインストール
公式から、インストールしたいプラットフォームのパッケージをダウンロードし、インストールする。
CentOS等のサーバーにdockerをインストールしたい場合、yumコマンドからインストールすることもできる。
(CentOS7の場合、リポジトリを追加せずにインストールすることができる)
$ sudo yum -y install docker
MacやWindowにインストールした場合は、dockerが自動実行される。
環境設定等を変更したい場合は、ツールバーから [docker] > [Preference...] で変更することができる。
dockerの実行方法
※ 以下は、docker for Macで動かしてみた際の処理になります。
dockerが起動していれば、dockerコマンドを動かすことができる。
$ docker -v
Docker version 17.11.0-ce, build 1caf76c
公式のリポジトリにあるイメージであればpullして持ってくることが可能。
$ docker pull centos:centos7
centos7: Pulling from library/centos
85432449fd0f: Pull complete
Digest: sha256:3b1a65e9a05f0a77b5e8a698d3359459904c2a354dc3b25ae2e2f5c95f0b3667
Status: Downloaded newer image for centos:centos7
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 3fa822599e10 6 days ago 204MB
docker images
でローカルにあるdockerのイメージ一覧を見ることができる。
pullせずに直接指定して実行することもできるが、ローカルのimageにない場合は先にpullされる。
では、実際にpullしてきたimageの中で処理を走らせる。
$ docker run centos:centos7 echo 'hello world'
hello world
これで上記のecho 'hello world'
はdockerのコンテナで実行されたことになる。
また、現在dockerで実行しているコンテナの一覧を見るためにはdocker ps
を使う。
試しに、複数でsleep 10
を実行してみる。
$ docker run centos:centos7 sleep 10
..
$ docker run centos:centos7 sleep 10
..
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
27ae13db6bf2 centos:centos7 "sleep 10" 3 seconds ago
Up 3 seconds amazing_mccarthy
a88e1f1f6603 centos:centos7 "sleep 10" 5 seconds ago
Up 5 seconds
それぞれのsleep 10
が別のコンテナで実行されていることがわかる。
自作のdockerイメージの作り方
公式のリポジトリにあるものだけではなく、自分の必要なライブラリ等をインストールして環境を作成したい場合は自作でdockerのイメージを作成する必要がある。
その場合は、DockerFileという作成したい内容を記載した設定ファイルを用意する。
DockerFileを使ったビルド
下記はAWSのS3のAPIをpython上で使うためのDockerFileの例である。
FROM python:3.6-alpine
RUN apk --update add --virtual build-dependencies \
curl \
&& curl -kL https://bootstrap.pypa.io/get-pip.py | python \
&& apk del build-dependencies
RUN pip -V
RUN pip install boto3
上記のDockerFileをビルドしてみる
# docker build -t [image名:タグ] [DockerFileのあるパス]
$ docker build -t python-boto3 ~/docker/python/boto3/
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM python:3.6-alpine
3.6-alpine: Pulling from library/python
ab7e51e37a18: Pull complete
4a57a4e05b89: Pull complete
00662d5a9ee5: Pull complete
ccff5d0c07e6: Pull complete
9f2b218d61fa: Pull complete
...
Successfully built 69b53c833f4b
Successfully tagged python-boto3:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python-boto3 latest 69b53c833f4b About a minute ago 134MB
python 3.6-alpine 4429b95d5625 34 hours ago 89.1MB
これで必要な環境をローカルに作成することができた。
作成したイメージをファイルとして出力/取り込みする
DockerFileで作成したイメージから手が加わったものや、毎度ビルドするのが大変な複雑なものの場合、直接イメージをファイルとして出力/取り込みすることもできる。
ローカルのイメージをファイルとして出力する
$ docker save python-boto3 > python-boto3.tar
ファイルをイメージとして取り込む
$ docker load < python-boto3.tar
上記はコンテナでもdocker export
で同様の処理が可能
次回(があったら)、
docker-compose
ranchar
dockerとホストの繋ぎ方
ポート解放
とかも調べて書きたい