関連
imageの作成
pullでイメージを取得する場合
python2系のイメージをpullする
$ sudo docker pull python:2
build系
Dockerfileを元にイメージを作成する
Dockerfileを作成
python2系をインストールするだけのDockerfileを作成
FROM python:2
Dockerfileからimageをbuildする
$ sudo docker build [ -t {イメージ名} [ :{タグ名} ] ] {Dockerfileのあるディレクトリ}
e.g.)
$ sudo docker build -t sample-project/python:1.0 ./sample-app
run系
コンテナを起動する
$ sudo docker run --name {コンテナ名} -it {image名} /bin/bash
e.g.)
$ sudo docker run --name python-sample -it sample-project/python:1.0 /bin/bash
コンテナを起動、exitと同時にコンテナを削除する
$ sudo docker run --rm --name python-sample -it sample-project/python:1.0 /bin/bash
バックグラウンドで実行する
$ sudo docker run --name python-sample -it -d sample-project/python:1.0 /bin/bash
ホストOSの領域をマウントする
$ sudo docker run --name python-sample \
-v /home/user/sample-app:/opt/sample-app \
-it -d sample-project/python:1.0 /bin/bash
ホストOSのssh keyをfowardingして、コンテナ内で使う方法
コンテナを起動する時に、$SSH_AUTH_SOCKをマウントする
$ sudo docker run --name python-sample \
-v ${SSH_AUTH_SOCK}:/ssh-agent \
-e SSH_AUTH_SOCK=/ssh-agent \
-v /home/user/sample-app:/opt/sample-app \
-it -d sample-project/python:1.0 /bin/bash
実行中のコンテナを確認する
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f689dd43a0d3 sample-project/python:1.0 "/bin/bash" 4 seconds ago Up 4 seconds python-sample
コンテナに入る
$ sudo docker exec -it f689dd43a0d3 bash
root@f689dd43a0d3:/#
コンテナを指定してホストOS上でコマンドを実行する
$ docker exec -it f689dd43a0d3 python --version
Python 2.7.15
$ docker exec -it f689dd43a0d3 which pip
/usr/local/bin/pip
コンテナを削除する
$ sudo docker rm -f f689dd43a0d3
image一覧
$ sudo docker images
imageを削除する
$ sudo docker rmi d69bc9d9b016
コンテナ名からコンテナIDを取得
$ docker ps -aqf "name=container_name"
コンテナ名からコンテナIDを取得してコンテナに入る
$ sudo docker exec -it $(docker ps -aqf "name=container_name") /bin/bash
コンテナが起動しない場合のdebug方法
下記コマンドでコンテナのログを確認する。
$ sudo docker logs {コンテナID}
それでも原因がわからない場合はexitedしたコンテナに入って調べる
docker commitでexitedしたコンテナからイメージを作成する
$ sudo docker commit {exitedしたコンテナID} {コンテナ名を適当に付ける}
sha256:b951eaf534244788b79aba5fbe4186c8bc72ab1550a7fc700b950521761d8a6e
コンテナを起動する
$ sudo docker run --rm -it {適当につけたコンテナ名} sh
もしくは
$ sudo docker run --rm -it b951eaf534244788b79aba5fbe4186c8bc72ab1550a7fc700b950521761d8a6e sh
これでコンテナに入れるので、中で調査する
コンテナのIPアドレスの確認方法
$ sudo docker inspect --format '{{ .NetworkSettings.Networks.renewal_default.IPAddress }}' \
{コンテナIDorコンテナの名前}
See full command of running/stopped container in Docker
--no-trunc
をつければ全部見れる
$ sudo docker ps -a --no-trunc
or
See full command of running/stopped container in Docker
$ sudo docker inspect -f "{{.Name}} {{.Config.Cmd}}" $(sudo docker ps -a -q)
dockerのlog
ホストOS上の以下の場所にある。
/var/lib/docker/containers/(コンテナID)/(コンテナID)-json.log
コンテナIDが36b5e0da6c72
の場合
$ sudo ls -l /var/lib/docker/containers/ | grep 36b5e0da6c72
drwx------ 4 root root 237 Jun 26 13:08 36b5e0da6c72d3e5597dbececd566725967f895ef790e00a51f7df9aaa9bfccb
$ sudo ls -l /var/lib/docker/containers/36b5e0da6c72d3e5597dbececd566725967f895ef790e00a51f7df9aaa9bfccb
total 24
-rw-r----- 1 root root 0 Jun 26 13:08 36b5e0da6c72d3e5597dbececd566725967f895ef790e00a51f7df9aaa9bfccb-json.log
drwx------ 2 root root 6 Jun 26 13:08 checkpoints
-rw------- 1 root root 2682 Jun 26 13:08 config.v2.json
-rw-r--r-- 1 root root 1421 Jun 26 13:08 hostconfig.json
-rw-r--r-- 1 root root 13 Jun 26 13:08 hostname
-rw-r--r-- 1 root root 177 Jun 26 13:08 hosts
drwx------ 3 root root 17 Jun 26 13:08 mounts
-rw-r--r-- 1 root root 85 Jun 26 13:08 resolv.conf
-rw-r--r-- 1 root root 71 Jun 26 13:08 resolv.conf.hash
php-apacheコンテナの起動
$ docker run -itd \
-p 7777:80 \
-v $(pwd)/code:/var/www/html \
--name php70-apache php:7.0-apache
nginxのコンテナを作るとき
Dockerはプロセスがフォアグラウンドで実行されていないとコンテナがExitされる。
Nginxはデフォルトでデーモン実行、つまりバックグラウンド実行なのでコンテナが立ち上がらない。
以下のいずれかの方法で、nginxをフォアグラウンド実行にすることができる。
nginx.confに書き込む
RUN apt-get update && \
apt-get install -y nginx && \
echo "daemon off;" >> /etc/nginx/nginx.conf
起動コマンドにオプションを渡す
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
CentOS7
FROM centos:7
RUN yum -y update
RUN yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y --enablerepo=nginx nginx
RUN echo "This is a sample page." > /usr/share/nginx/html/index.html
EXPOSE 80
ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
起動
$ docker run --rm -p 8080:80 --name nginx-test -itd nginx-test /bin/bash
HostOSで実行。
$ curl localhost:8080
This is a sample page.
Dockerfileでaliasを設定する
From centos:7
RUN echo 'alias ll="ls -l"' >> ~/.bashrc
参考:Docker nginxのコンテナすぐに終了してしまう現象
Dockerのbridge IPアドレス固定
Dockerの既定ブリッジであるdocker0が、既存のIPアドレスと被ってしまったときの対応方法。
/etc/docker/daemon.jsonを作り、default-address-poolsに割り当てたいIPアドレスを指定する。
{
"default-address-pools":[
{
"base":"192.168.0.1/16",
"size":24
}
]
}
$ sudo systemctl restart docker
docker0の確認
$ ip addr show dev docker0
bridgeの確認
$ sudo docker network inspect bridge
コンテナのリソース監視
$ sudo docker stats $(sudo docker inspect -f {{.NAME}} $(sudo docker ps -q))
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b14226d5a45a process-exporter 0.00% 13.92MiB / 31.42GiB 0.04% 268kB / 3MB 0B / 0B 16
135c999028f1 redis-exporter 0.91% 15.11MiB / 31.42GiB 0.05% 5.41MB / 3.47MB 0B / 0B 17
5c4a92da9161 exporter_proxy 0.08% 7.93MiB / 31.42GiB 0.02% 22.2MB / 22.2MB 0B / 0B 21
34cd1b4f9d11 nginx-prometheus-exporter 0.00% 10.3MiB / 31.42GiB 0.03% 458kB / 493kB 0B / 0B 14
29ab382040ba mtail 0.00% 5.555MiB / 31.42GiB 0.02% 233kB / 519kB 0B / 6.14kB 27
8e23c7b07b3f node-exporter 0.00% 15.27MiB / 31.42GiB 0.05% 343kB / 7.33MB 0B / 0B 20
b0b2de460757 postgres-exporter 0.00% 13.43MiB / 31.42GiB 0.04% 16.2MB / 8.31MB 0B / 0B 17
Dockerが利用しているdisk容量の調査
全体の使用量
$ docker system df
コンテナ、volumeごとの使用量
$ docker system df -v