よくrunとstartとかがごっちゃになるのでメモ。
用語
- dockerイメージ
実行する前の塊。公式に登録されているubuntu:latest等をdockerhubなどから引っ張ってきて利用したり、自分で作ったりできる。 - dockerコンテナ
イメージを元に自分のマシンで実行したもの。
実行方法。
- インストール
以下参照しdocker-ceをインストール。
https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository -
元となるイメージ取得
以下でubuntu16.04が起動できる。
でもわざわざpullしなくても、runの時になければ勝手に取ってきてくれる。docker pull ubuntu:latest
-
イメージのリストを表示
docker images
-
コンテナ初期起動
-
以下で起動。exitすれば勝手にコンテナも止まる。
docker run -it --name ubuntu_mycontainer --hostname ubuntu_mycontainer ubuntu /bin/bash
デーモンとして起動したければ「-d」をつける。
ただrunでは指定できるがexecでは指定できないっぽい。ポート指定は以下。
docker run -it -p 12345:22 --name ubuntu_mycontainer --hostname ubuntu_mycontainer ubuntu:latest /bin/bash
- HOSTのディレクトリをマウントするなら以下。
docker run -it -v /home:/home --name ubuntu_mycontainer --hostname ubuntu_mycontainer ubuntu:latest /bin/bash
-
-
bash実行
以下で起動。exitすると止まる。docker exec -it ubuntu_mycontainer bash
-
コンテナを再度起動
docker start (コンテナ名 or コンテナID)
-
起動しているコンテナの状態取得
docker ps docker top (コンテナ名 or コンテナID)
-
起動していないものも含めてコンテナのリスト表示
docker ps -a
-
裏で動いているコンテナをとめる
docker stop (コンテナ名 or コンテナID)
-
コンテナを削除
docker rm (コンテナ名 or コンテナID)
-
イメージを削除
docker rmi (イメージ名 or イメージID)
-
一度作ったコンテナにあとからポート割り当てやマウントディレクトリを指定することは出来ないみたい。
docker startにオプションがない。
やるなら一度イメージを作り直して、再度コンテナにする際にオプション指定する。docker stop mycontainer docker commit mycontainer temporal_image (temporal_imageはmycontainerのベースになっているので消せない) docker rm mycontainer docker run -it -p 20022:22 --name mycontainer --hostname ubuntu_mycontainer temporal_image /bin/bash
Dockerfile
- 参照リンク
http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html -
例えばubuntuベースでpython開発用のイメージを作りたい場合、以下のようなDockerfileを用意する。
FROM ubuntu ENV PATH $PATH:/usr/local/bin/:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin RUN printenv ADD setting.tar.gz /root/ RUN apt-get update RUN apt-get dist-upgrade RUN apt-get install -y python3 python3-pip RUN apt-get clean
ADDするためカレントディレクトリにsetting.tar.gzを用意する。
ADD命令で勝手に解凍までしてくれる。-
以下でイメージのビルド。
docker build -t summer4an/ubuntu_myimage:1.0 ./
-
以下で起動。
docker run -it --name ubuntu_mycontainer --hostname ubuntu_mycontainer summer4an/ubuntu_myimage:1.0 /bin/zsh
-
何かミスしていたら以下で削除。
docker rm ubuntu_mycontainer docker rmi summer4an/ubuntu_myimage:1.0
-
出来上がったコンテナを別マシンに持っていきたいなら以下。
-
(イメージを直接exportすることは出来ない?)イメージを固めたものを作成。
docker export ubuntu_mycontainer -o docker_exported.tar gzip docker_exported.tar
-
別マシンにdocker_exported.tar.gzを持っていって以下。
docker import docker_exported.tar.gz summer4an/ubuntu_myimage:1.0 docker images
-
参照リンク
全般
- http://www.atmarkit.co.jp/ait/articles/1406/10/news031.html
- http://paiza.hatenablog.com/entry/docker_intro
- https://www.qoosky.io/techs/0a0bd52cd3
Dockerfile