Dockerを使ってみる 前編 djangoで使うことを想定
概要
Dockerを使ってみる。
参考書籍
やってみたこと
docker pull image名:tag名
docker pull django docker pull nginx docker pull digmore/docker-django-uwsgi
djangoで使いそうなimageをdownloadしてみました。
docker push image名:tag名
image名は、
docker push <dockerhub user名>/django
Docker Containerの生成、起動、停止
imageからcontainerを生成してみる。
docker run -it --name "test" centos /bin/cal
- -it コンソールに結果を出す
- --name コンテナ名をつける
- centos image名
- /bin/cal コンテナでcalコマンドを実行する
docker run -it --name "test2" centos /bin/bash
- /bin/bash コンテナ内で、シェルを起動させる。
コンテナをバックグラウンドで実行する
docker run -d centos /bin/ping localhost
- -d バックグランドで実行するオプション
- /bin/ping localhost localhostにpingコマンドを実行する。
- ping 相手先のホスト名(IPアドレス) で、相手先のホストが疎通可能状態かを調べる
バックグラウンドで実行されているかどうかを確認する
docker logs -t コンテナID
コンテナ常時再起動の設定例
docker run -it --restart=always centos /bin/bash
コンテナのネットワーク設定
docker run -d -p 8080:80 httpd
この状態で、http://localhost:8080/ にアクセスすると、it works! が表示されるはず!
- -d バックグラウンドで実行する
- -p ホストの任意のポートをコンテナに割り当てる。
- httpd httpd(apache)のイメージ名
- -p 8080:80 httpd ホストPCの8080ポートにアクセスすると、コンテナ場で動作しているhttpd(80port)のサービスにアクセスできる。
- ポート番号のレンジについては、exposeで設定できる
コンテナネットワークの設定、DNSサーバを設定
# DNSサーバ指定 docker run --dns=192.168.1.1 httpd # MACアドレスの指定 docker run -it --mac-address="*************" centos # ホスト名とIPアドレス定義(コンテナ内の/etc/hostsに) docker run -it --add-host=test.com:192.168.1.1 centos # コンテナ自身のホスト名を指定する(hostnameオプション) docker run -it --hostname=www.test.com --add-host=node1.test.com:192.168.1.1 centos
リソースを指定してコンテナを生成実行
docker run --cpu-shares=512 --memory=512m centos
ホストOSとコンテナ内のディレクトリを共有したい時
docker run -v /c/Users/asa/WebPage:/var/www/html httpd
コンテナ生成起動する環境変数を指定
docker run -it -e foo=bar centos /bin/bash
- -e 環境変数を設定できる。 試しにset とコマンドを打つと、foo=barという表示がされるはず。
環境変数を一括して登録する場合
# envファイルの作成 cat env_list hoge=fuga foo=bar # envファイルの設定 docker run -it --env-file=env_list centos /bin/bash
コンテナ内の作業ディレクトリを指定する
docker run -it -w=/tmp/work centos /bin/bash
コンテナの一覧表示
docker ps
コンテナの稼動確認
docker stats [コンテナ名]
コンテナの起動・停止・再起動
docker start コンテナID docker stop コンテナID docker restart コンテナID
再起動などは時間指定可能。
# 2秒後に再起動 docker restart -t 2 コンテナID
コンテナの削除
docker rm コンテナid
コンテナの中断・再開
docker pause コンテナid docker unpause コンテナid
- stop とpauseの違いは?処理を強制終了するのと、処理を途中で保存して再開するみたいな違いなのか?
稼動しているdockerコンテナの操作
稼動コンテナへの接続
docker attach コンテナIDorName
稼動コンテナでプロセス実行
これはdocker runさせてないとerrorが出るので注意!
docker exec コンテナ識別子 実行するコマンド ## apacheという名前のコンテナのコマンドを実行する docker exec -it modest_bell /bin/bash
稼動コンテナのプロセス確認
docker top コンテナ識別子
稼動コンテナのポート転送確認
docker port httpd
コンテナの名前を変更する
docker rename big_morse django
コンテナ内のファイルをコピーする
docker cp django:/etc/passwd /Users/****/Downloads/
ホストPCのファイルをコンテナにコピーする
逆にするだけ。
docker cp /Users/*****/Downloads/requirements.txt django:/temp/requiments.txt
コンテナ操作の差分確認
docker diff コンテナ識別子
- Aと出ているものが、追加、Cが更新
Dockerの情報確認
# versionの確認 docker version # docker の実行環境確認 docker info
コンテナからイメージの作成
docker commit -a "Yatchi" django designlabs/djangotest
- docker commitで、イメージ作成
- -a で、作者を指定する。
- django コンテナ識別子
- designlabs/djangotest がuser名と、イメージ名
コンテナをtarファイル出力(docker export)
docker export django > test.tar
test.tarファイルを確認する
tar -tvf test.tar
tarファイルからイメージ作成
docker import ファイルまたはURL # 以下のような例になる cat test.tar | docker import - djangorrila:1.0
イメージの保存
docker save 保存ファイル名 イメージ名 # 例 docker save -o testsave.tar httpd
イメージの読み込み
docker load -i tarファイル名
docer save/load, import/exportの違い
ファイル構造が違うため、 saveで作ったファイルは、load exportで作ったファイルは、import でそれぞれ読み込む。
とりあえず、前編はここまで。