Dockerは、軽量な仮想化環境を実現するツール。
2017年8月現在、以下のエディションがある。
- CE(Community Edition):無償
- EE(Enterprise Edition):有償
以下、OSは Ubuntu 14.04.5 を使用しています。
Docker CE をインストール
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get -y install docker-ce
バージョン確認
docker --version
Docker Image検索
sudo docker search <検索ワード> (例:centosのイメージを検索) sudo docker search centos
Docker Hubからも検索できる。
Imageファイルの取得
sudo docker pull <イメージ名> (例:centosのイメージを取得) sudo docker pull centos
ローカルのイメージの一覧を確認
sudo docker images
イメージの詳細を確認
sudo docker inspect <REPOSITORY:TAG> (例) sudo docker inspect centos:latest
TAGは省略可能で、その時は latestとなる。
以下のようにIMAGE ID指定でもOK。
sudo docker inspect <IMAGE ID> (例) sudo docker inspect 328edcd84f1b
REPOSITORY、TAG、IMAGE IDは、上記のsudo docker images
にて確認できる。
イメージの削除
sudo docker rmi <REPOSITORY:TAG>
または
sudo docker rmi <IMAGE ID>
コンテナ作成
sudo docker run <REPOSITORY:TAG>
または
sudo docker run <IMAGE ID>
オプション無しで runを実行した場合、起動後にすぐに終了する。
バックグラウンドで動作させたい場合、-td
オプションを使用する。
(よく使うオプション) -t:疑似ターミナル (pseudo-TTY) を割り当て -d:コンテナをバックグラウンドで実行(デタッチドモード) -i:コンテナの STDIN にアタッチ -p:コンテナのポートをホスト側に公開
実行中のコンテナ一覧を表示
sudo docker ps
実行終了したコンテナ一覧を表示
sudo docker ps -a
コンテナの削除
sudo docker rm <CONTAINER ID>
CONTAINER ID は、上記の docker ps
にて確認できる。
CONTAINER ID を指定する時は、先頭X文字を入力するだけでも判別してくれる。
実行中のコンテナのログを確認
sudo docker logs <CONTAINER ID>
バックグラウンドで実行中のコンテナを、フォアグラウンドに移動
sudo docker attach --sig-proxy=false <CONTAINER ID>
ctrl+C でコンテナを再びバックグランドに戻す。
バッググラウンドで実行中のコンテナにログイン
sudo docker exec -it <CONTAINER ID> /bin/bash
実行中のコンテナを停止
sudo docker kill <CONTAINER ID>
停止したコンテナを再開
sudo docker start <CONTAINER ID>
コンテナの削除
sudo docker rm <CONTAINER ID>
停止中のコンテナを全て削除
sudo docker rm `sudo docker ps -a -q`
コンテナを起動し、内部で作業する
sudo docker run -it <REPOSITORY:TAG> /bin/bash/bin/bash
イメージ作成
sudo docker commit <CONTAINER ID> <イメージ名>
イメージ名は、「ユーザ名/名称」とするのが慣習だそうな。
ユーザ名は、Docker Hubのアカウント名と同一にしておく。
ビルド
イメージからコンテナを立ち上げ、何らかの変更を加えたものをイメージ化する作業を、スクリプトに記述して自動化できる。
自動化する内容は、『Dockerfile』というファイルを作成して記述する。
(以下、Dockerfile 記述例)
# 何のイメージかを表す FROM centos # 誰が書いたかを表す MAINTAINER kakisoft <sample@gmail.com> # RUN: buildする時に実行される RUN echo "now building..." RUN yum install -y httpd # ADD: ローカルのファイルをコンテナにコピー ADD ./index.html /var/www/html/ # EXPOSE: 起動時に指定ポートをLISTEN EXPOSE 80 # CMD: runする時に実行される CMD ["echo", "now running..."] CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
Dockerfile作成後、以下を実行
sudo docker build -t <イメージ名> .
ホストのポートをコンテナのポートにリダイレクト
以下では、ホストのポート8080を、コンテナの80にリダイレクト。
sudo docker run -p 8080:80 -d <イメージ名>
Docker Hubへのログイン
sudo docker login
Docker Hubへプッシュ(アップロード)
ログイン後に実行する。
sudo docker push <DockerHubID/イメージ名>
入力例:sudo docker push kakisoft/httpd
イメージ名の先頭は、DockerHubIDでなければいけないのだろうか。
この辺はまだ良くわからないです。
プッシュしたイメージを取得する場合、
sudo docker pull <イメージ名>
でOK。