社内勉強会 
2014/10/07
INDEX 
・Dockerのインストール 
・Docker操作の基本 
・Dockerfile
INDEX 
・Dockerのインストール 
・Docker操作の基本 
・Dockerfile
Dockerのインストール 
Dockerは様々なLinuxディストリビューションにインストール可能です。 
・Mac OS X 
・Ubuntu 
・Red Hat Enterprise Linux 
・Oracle Linux 
・CentOS 
・Debian 
・Gentoo 
・Google Cloud 
・Platform 
・Rackspace Cloud 
・Amazon EC2 
・IBM Softlayer 
・FrugalWave 
・Fedora
Dockerのインストール 
今回はEC2を利用してみました。 
$ sudo yum search docker 
===== N/S matched: docker ===== 
読み込んだプラグイン:priorities, update-motd, upgrade-helper 
docker.x86_64 : Automates deployment of containerized applications 
docker-devel.x86_64 : A golang registry for global request variables (❨source libraries)❩ 
docker-pkg-devel.x86_64 : A golang registry for global request variables (❨source libraries)❩ 
! 
Name and summary matches only, use "search all" for everything. 
標準リポジトリにあるので、そのままインストール可能です。 
$ sudo yum install docker 
インストールが完了したらサービスを起動します。 
$sudo service docker start 
Starting cgconfig service: [ OK ] 
Starting docker: [ OK ]
INDEX 
・Dockerのインストール 
・Docker操作の基本 
・Dockerfile
Docker操作の基本 
バージョン・基本情報 
Dockerのバージョンを確認をしてみます。 
$ sudo docker version 
Client version: 1.2.0 
Client API version: 1.14 
Go version (❨client)❩: go1.2 
Git commit (❨client)❩: fa7b24f/1.2.0 
OS/Arch (❨client)❩: linux/amd64 
Server version: 1.2.0 
Server API version: 1.14 
Go version (❨server)❩: go1.2 
Git commit (❨server)❩: fa7b24f/1.2.0 
次にDockerの情報を取得してみます。 
$ sudo docker info 
Containers: 0 
Images: 0 
Storage Driver: devicemapper 
Pool Name: docker-202:1-263417-pool 
Pool Blocksize: 64 Kb 
Data file: /var/lib/docker/devicemapper/devicemapper/data 
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata 
Data Space Used: 293.0 Mb 
Data Space Total: 102400.0 Mb 
Metadata Space Used: 0.7 Mb 
Metadata Space Total: 2048.0 Mb 
Execution Driver: native-0.2 
Kernel Version: 3.14.19-17.43.amzn1.x86_64 
Operating System: Amazon Linux AMI 2014.09 
コンテナ数やイメージ数を確認できます。
Docker操作の基本 
DockerHub 
Dockerで作業をするにはまずベースイメージ 
を用意する必要があります。 
DockerではDockerHubというGitHubの様な 
サービスを提供しており、 
ここからDockerイメージを取得することがで 
きます。 
https://registry.hub.docker.com/
Docker操作の基本 
イメージの取得 
DockerHubから取得するにはdocker pullコマンドを使用します。 
ここではubuntuのベースイメージを取得します。 
$ sudo docker pull ubuntu 
次にDockerの情報を取得してみます。 
$ sudo docker info 
Containers: 0 
Images: 34 
: 
Imagesが0から増えています。 
docker imagesコマンドでイメージ一覧が確認できます。 
$ sudo docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 
ubuntu 14.10 2db9ad9043ca 4 days ago 260.8 MB 
ubuntu utopic 2db9ad9043ca 4 days ago 260.8 MB 
ubuntu latest 6b4e8a7373fe 4 days ago 194.8 MB 
ubuntu 14.04.1 6b4e8a7373fe 4 days ago 194.8 MB 
ubuntu 14.04 6b4e8a7373fe 4 days ago 194.8 MB 
: 
一杯イメージができました。
Docker操作の基本 
コンテナの実行(インタラクティブ) 
取得したDockerイメージを実行してみます。 
Dockerイメージの実行にはdocker runコマンドを使用します。 
-i -tをオプションするとインタラクティブモードで起動します。 
$ sudo docker run -i -t -h ubuntu ubuntu:14.10 /bin/bash 
root@ubuntu:/# env 
HOSTNAME=ubuntu 
TERM=xterm 
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg= 
: 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
PWD=/ 
SHLVL=1 
HOME=/root 
LESSOPEN=| /usr/bin/lesspipe %s 
LESSCLOSE=/usr/bin/lesspipe %s %s 
_=/usr/bin/env 
root@ubuntu:/# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu 
DISTRIB_RELEASE=14.10 
DISTRIB_CODENAME=utopic 
DISTRIB_DESCRIPTION="Ubuntu Utopic Unicorn (❨development branch)❩" 
これで起動したコンテナ内での作業が可能です。 
apt-getコマンドなどでアプリケーションのインストールも可能です。 
コンテナを停止して通常のコンソールに戻る場合はCtrl+Dになります。
Docker操作の基本 
コンテナの実行(バックグラウンド) 
Dockerイメージをバックグランドで実行することも可能です。 
この場合はdocker runコマンドに-dをオプションします。 
$ sudo docker run -d ubuntu:14.10 /bin/sh -c "while true; do echo hellow world; sleep 10; done" 
2cf73073f8c9dba2597c61216b93275e6493622db4d81aa8b7f0cedc4e7a5ef8 
起動したコンテナのコンテナIDが出力されます。 
起動したコンテナはdocker psコマンドで確認できます。 
$ sudo docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
2cf73073f8c9 ubuntu:14.10 "/bin/sh -c 'while t About a minute ago Up About a minute determined_almeida 
バックグラウンドで実行されているコンテナの標準出力はdocker logsコマンドで 
確認できます。 
$ sudo docker logs 2cf73073f8c9 
hellow world 
hellow world 
:
Docker操作の基本 
コンテナの停止 
hellow worldを叫び続けるのはもうやめにしましょう。 
コンテナを停止するにはdocker stopコマンドを使用します。 
$ sudo docker stop 2cf73073f8c9 
2cf73073f8c9 
停止するとコンテナIDが出力されます。 
docker psで確認してみましょう。 
$ sudo docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
コンテナは停止すると消えて無くなるわけではありません。 
docker psコマンドに-aをオプションすることで停止しているコンテナも含めて確 
認できます。 
$ sudo docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
2cf73073f8c9 ubuntu:14.10 "/bin/sh -c 'while t 14 minutes ago Up 4 minutes determined_almeida 
40ed7d2502fe ubuntu:14.10 "/bin/bash" 31 minutes ago Exited (❨0)❩ 18 minutes ago backstabbing_shockley
Docker操作の基本 
コンテナの再実行 
残っているコンテナは再実行する事ができます。 
docker startかdocker restarコマンドを使用します。 
$ sudo docker restart 2cf73073f8c9 
2cf73073f8c9 
docker psで確認してみましょう。 
$ sudo docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
2cf73073f8c9 ubuntu:14.10 "/bin/sh -c 'while t 10 minutes ago Up 7 seconds determined_almeida 
起動しました。 
バックグランドで実行中のコンテナにアタッチすることも可能です。 
docker attachコマンドを使用します。 
$ sudo docker attach 2cf73073f8c9 
hellow world 
hellow world 
: 
Ctrl+Cで処理が終了しコンテナも停止します。
Docker操作の基本 
コンテナの強制終了 
docker stopコマンドではタイムアウトするまでコンテナの終了をまちます。 
即座にコンテナを終了させたい場合はdocker killコマンドを使用します。 
$ sudo docker kill 2cf73073f8c9 
2cf73073f8c9 
docker psで確認してみましょう。 
$ sudo docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
即座に終了しましたね。
Docker操作の基本 
コンテナ内のプロセス監視 
実行中のコンテナ内のプロセスを監視することも可能です。 
docker topコマンドを使用します 
$ sudo docker start 2cf73073f8c9 
2cf73073f8c9 
! 
$ sudo docker top 2cf73073f8c9 
UID PID PPID C STIME TTY TIME CMD 
root 24958 2371 0 12:50 ? 00:00:00 /bin/sh -c while true; do echo hellow 
world; sleep 10; done 
root 25002 24958 0 12:50 ? 00:00:00 sleep 10 
[ec2-user@ip-172-31-12-243 ~]$
Docker操作の基本 
コンテナ情報の出力 
コンテナの詳細な情報をJSON形式で出力することができます。 
docker inspectコマンドを使用します。 
$ sudo docker inspect 2cf73073f8c9 
[{❴ 
"Args": [ 
"-c", 
"while true; do echo hellow world; sleep 10; done" 
], 
"Config": {❴ 
"AttachStderr": false, 
: 
個人的にはDockerfileの生成できるといいのですが、、、今後に期待ということ 
で。
Docker操作の基本 
コンテナのコミット 
コンテナは実行(docker run)毎に作成されるため、現在実行中の状態は引き継がれ 
ません。状態を引き継ぐためにはdocker commitコマンドでコンテナの状態をイ 
メージに反映させます。 
$ sudo docker commit 40ed7d2502fe ubuntu:test 
df6c863ac74630234fb19223974202b0bb7b2e9dbaa7a692cbdc92a2a47099dc 
$ sudo docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 
ubuntu test df6c863ac746 13 seconds ago 260.8 MB 
ubuntu utopic 2db9ad9043ca 4 days ago 260.8 MB 
ubuntu 14.10 2db9ad9043ca 4 days ago 260.8 MB 
ubuntu 14.04 6b4e8a7373fe 4 days ago 194.8 MB 
ubuntu 14.04.1 6b4e8a7373fe 4 days ago 194.8 MB 
ubuntu latest 6b4e8a7373fe 4 days ago 194.8 MB 
: 
これでDockerfileの生成ができるといいのに。。。
Docker操作の基本 
コンテナの削除・イメージの削除 
Dockerは実行毎にコンテナを作成しますが、コンテナを停止してもコンテナは消え 
ません。削除するためにdocker rmコマンドを使用します。 
$ sudo docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
2cf73073f8c9 ubuntu:14.10 "/bin/sh -c 'while t 3 hours ago Exited (❨-1)❩ 57 minutes ago 
determined_almeida 
40ed7d2502fe ubuntu:14.10 "/bin/bash" 3 hours ago Up 36 minutes backstabbing_shockley 
$ sudo docker rm 2cf73073f8c9 
2cf73073f8c9 
$ sudo docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
40ed7d2502fe ubuntu:14.10 "/bin/bash" 3 hours ago Up 37 minutes backstabbing_shockley 
これでコンテナが削除されました。
Docker操作の基本 
コンテナの削除・イメージの削除 
コンテナの削除と同様にDockerイメージを削除するためはdocker rmiコマンドを 
使用します。 
$ sudo docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 
ubuntu test df6c863ac746 13 seconds ago 260.8 MB 
ubuntu utopic 2db9ad9043ca 4 days ago 260.8 MB 
ubuntu 14.10 2db9ad9043ca 4 days ago 260.8 MB 
ubuntu 14.04 6b4e8a7373fe 4 days ago 194.8 MB 
ubuntu 14.04.1 6b4e8a7373fe 4 days ago 194.8 MB 
ubuntu latest 6b4e8a7373fe 4 days ago 194.8 MB 
: 
$ sudo docker rmi df6c863ac746 
Untagged: ubuntu:test 
Deleted: df6c863ac74630234fb19223974202b0bb7b2e9dbaa7a692cbdc92a2a47099dc 
$ sudo docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 
ubuntu utopic 2db9ad9043ca 4 days ago 260.8 MB 
ubuntu 14.10 2db9ad9043ca 4 days ago 260.8 MB 
ubuntu 14.04 6b4e8a7373fe 4 days ago 194.8 MB 
ubuntu 14.04.1 6b4e8a7373fe 4 days ago 194.8 MB 
ubuntu latest 6b4e8a7373fe 4 days ago 194.8 MB 
:
Docker操作の基本 
ファイルコピー 
実行中のコンテナからホストへファイルをコピーすることができます。 
docker cpコマンドを使用します。 
$ sudo docker cp a2c29dc8aa3b:/etc/passwd . 
$ ll 
total 12 
-rw-r--r-- 1 root root 919 Sep 23 07:35 passwd 
実行中のコンテナのpasswdファイルをカレントディレクトリにコピーしました。 
が、逆にホストのファイルをコンテナ内へコピーすることはできません。 
こういった場合ことが行いたい場合は、コンテナの実行時に対象のディレクトリを 
マウントすることで対処します。 
$ sudo docker run -i -t -v /home/ec2-user:/root/ec2-user ubuntu:14.10 /bin/bash 
root@a2c29dc8aa3b:/# ll /root/ec2-user 
total 40 
drwx------ 3 500 500 4096 Oct 6 16:07 ./ 
drwx------ 3 root root 4096 Oct 7 06:29 ../ 
-rw------- 1 500 500 4229 Oct 7 06:28 .bash_history 
-rw-r--r-- 1 500 500 18 Sep 4 2013 .bash_logout 
-rw-r--r-- 1 500 500 176 Sep 4 2013 .bash_profile 
-rw-r--r-- 1 500 500 124 Sep 4 2013 .bashrc 
drwx------ 2 500 500 4096 Oct 6 09:42 .ssh/
INDEX 
・Dockerのインストール 
・Docker操作の基本 
・Dockerfile
Dockerfile 
buildコマンド 
Dockerfileからコンテナを作成するにはdocker buildコマンドを使用します。 
今回は適当なDockerfileをgithubから持ってきて実行します。 
https://github.com/dockerfile/ghost 
$ ll 
合計 8 
-rw-r--r-- 1 ec2-user ec2-user 716 10月 6 16:07 Dockerfile 
-rw-r--r-- 1 ec2-user ec2-user 880 10月 6 16:07 start.bash 
$ sudo docker build -t="dockerfile/ghost" . 
Sending build context to Docker daemon 10.75 kB 
Sending build context to Docker daemon 
: 
$ sudo docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 
dockerfile/ghost latest 834b82260727 2 minutes ago 562.3 MB 
dockerfile/nodejs latest 4a6e85fd2e31 4 days ago 491 MB 
これでDockerイメージが作成されました。
Dockerfile 
イメージの実行 
作成したDockerイメージを実行してみます。 
$ docker run -d -p 80:2368 dockerfile/ghost 
今回は実行時に-pオプションでポートのマッピングをしています。 
port:80でホストにアクセスすると以下の様な画面が見れます。
Dockerfile 
Dockerfileの定義 
# 
# Ghost Dockerfile 
# 
# https://github.com/dockerfile/ghost 
! 
# 
# Pull base image. 
docker pullと同様 
! 
FROM dockerfile/nodejs 
# Install Ghost 
RUN  
cd /tmp &&  
wget https://ghost.org/zip/ghost-latest.zip &&  
unzip ghost-latest.zip -d /ghost &&  
rm -f ghost-latest.zip &&  
cd /ghost &&  
npm install --production &&  
sed 's/127.0.0.1/0.0.0.0/' /ghost/config.example.js > /ghost/config.js &&  
! 
useradd ghost --home /ghost 
# Add files. 
! 
ADD start.bash /ghost-start 
# Set environment variables. 
ENV ! 
NODE_ENV production 
# Define mountable directories. 
! 
VOLUME ["/data", "/ghost-override"] 
# Define working directory. 
! 
WORKDIR /ghost 
# Define default command. 
! 
CMD ["bash", "/ghost-start"] 
# Expose ports. 
EXPOSE 2368 
コンテナ内で実行するコマンドを列挙しています(環境設定用) 
ホストからコンテナへファイルを追加しています 
環境変数を追加しています docker run -eと同様です 
ホストのディレクトリをマウントしています docker run -vと同様です 
カレントディレクトリを指定してます cd しているイメージです 
コンテナで実行するコマンドを記述します 
コンテナのportを公開していますdocker run -pと以下略
おわり

Docker社内勉強会

  • 1.
  • 2.
  • 3.
  • 4.
    Dockerのインストール Dockerは様々なLinuxディストリビューションにインストール可能です。 ・MacOS X ・Ubuntu ・Red Hat Enterprise Linux ・Oracle Linux ・CentOS ・Debian ・Gentoo ・Google Cloud ・Platform ・Rackspace Cloud ・Amazon EC2 ・IBM Softlayer ・FrugalWave ・Fedora
  • 5.
    Dockerのインストール 今回はEC2を利用してみました。 $sudo yum search docker ===== N/S matched: docker ===== 読み込んだプラグイン:priorities, update-motd, upgrade-helper docker.x86_64 : Automates deployment of containerized applications docker-devel.x86_64 : A golang registry for global request variables (❨source libraries)❩ docker-pkg-devel.x86_64 : A golang registry for global request variables (❨source libraries)❩ ! Name and summary matches only, use "search all" for everything. 標準リポジトリにあるので、そのままインストール可能です。 $ sudo yum install docker インストールが完了したらサービスを起動します。 $sudo service docker start Starting cgconfig service: [ OK ] Starting docker: [ OK ]
  • 6.
  • 7.
    Docker操作の基本 バージョン・基本情報 Dockerのバージョンを確認をしてみます。 $ sudo docker version Client version: 1.2.0 Client API version: 1.14 Go version (❨client)❩: go1.2 Git commit (❨client)❩: fa7b24f/1.2.0 OS/Arch (❨client)❩: linux/amd64 Server version: 1.2.0 Server API version: 1.14 Go version (❨server)❩: go1.2 Git commit (❨server)❩: fa7b24f/1.2.0 次にDockerの情報を取得してみます。 $ sudo docker info Containers: 0 Images: 0 Storage Driver: devicemapper Pool Name: docker-202:1-263417-pool Pool Blocksize: 64 Kb Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 293.0 Mb Data Space Total: 102400.0 Mb Metadata Space Used: 0.7 Mb Metadata Space Total: 2048.0 Mb Execution Driver: native-0.2 Kernel Version: 3.14.19-17.43.amzn1.x86_64 Operating System: Amazon Linux AMI 2014.09 コンテナ数やイメージ数を確認できます。
  • 8.
    Docker操作の基本 DockerHub Dockerで作業をするにはまずベースイメージ を用意する必要があります。 DockerではDockerHubというGitHubの様な サービスを提供しており、 ここからDockerイメージを取得することがで きます。 https://registry.hub.docker.com/
  • 9.
    Docker操作の基本 イメージの取得 DockerHubから取得するにはdockerpullコマンドを使用します。 ここではubuntuのベースイメージを取得します。 $ sudo docker pull ubuntu 次にDockerの情報を取得してみます。 $ sudo docker info Containers: 0 Images: 34 : Imagesが0から増えています。 docker imagesコマンドでイメージ一覧が確認できます。 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.10 2db9ad9043ca 4 days ago 260.8 MB ubuntu utopic 2db9ad9043ca 4 days ago 260.8 MB ubuntu latest 6b4e8a7373fe 4 days ago 194.8 MB ubuntu 14.04.1 6b4e8a7373fe 4 days ago 194.8 MB ubuntu 14.04 6b4e8a7373fe 4 days ago 194.8 MB : 一杯イメージができました。
  • 10.
    Docker操作の基本 コンテナの実行(インタラクティブ) 取得したDockerイメージを実行してみます。 Dockerイメージの実行にはdocker runコマンドを使用します。 -i -tをオプションするとインタラクティブモードで起動します。 $ sudo docker run -i -t -h ubuntu ubuntu:14.10 /bin/bash root@ubuntu:/# env HOSTNAME=ubuntu TERM=xterm LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg= : PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 HOME=/root LESSOPEN=| /usr/bin/lesspipe %s LESSCLOSE=/usr/bin/lesspipe %s %s _=/usr/bin/env root@ubuntu:/# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.10 DISTRIB_CODENAME=utopic DISTRIB_DESCRIPTION="Ubuntu Utopic Unicorn (❨development branch)❩" これで起動したコンテナ内での作業が可能です。 apt-getコマンドなどでアプリケーションのインストールも可能です。 コンテナを停止して通常のコンソールに戻る場合はCtrl+Dになります。
  • 11.
    Docker操作の基本 コンテナの実行(バックグラウンド) Dockerイメージをバックグランドで実行することも可能です。 この場合はdocker runコマンドに-dをオプションします。 $ sudo docker run -d ubuntu:14.10 /bin/sh -c "while true; do echo hellow world; sleep 10; done" 2cf73073f8c9dba2597c61216b93275e6493622db4d81aa8b7f0cedc4e7a5ef8 起動したコンテナのコンテナIDが出力されます。 起動したコンテナはdocker psコマンドで確認できます。 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cf73073f8c9 ubuntu:14.10 "/bin/sh -c 'while t About a minute ago Up About a minute determined_almeida バックグラウンドで実行されているコンテナの標準出力はdocker logsコマンドで 確認できます。 $ sudo docker logs 2cf73073f8c9 hellow world hellow world :
  • 12.
    Docker操作の基本 コンテナの停止 hellowworldを叫び続けるのはもうやめにしましょう。 コンテナを停止するにはdocker stopコマンドを使用します。 $ sudo docker stop 2cf73073f8c9 2cf73073f8c9 停止するとコンテナIDが出力されます。 docker psで確認してみましょう。 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES コンテナは停止すると消えて無くなるわけではありません。 docker psコマンドに-aをオプションすることで停止しているコンテナも含めて確 認できます。 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cf73073f8c9 ubuntu:14.10 "/bin/sh -c 'while t 14 minutes ago Up 4 minutes determined_almeida 40ed7d2502fe ubuntu:14.10 "/bin/bash" 31 minutes ago Exited (❨0)❩ 18 minutes ago backstabbing_shockley
  • 13.
    Docker操作の基本 コンテナの再実行 残っているコンテナは再実行する事ができます。 docker startかdocker restarコマンドを使用します。 $ sudo docker restart 2cf73073f8c9 2cf73073f8c9 docker psで確認してみましょう。 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cf73073f8c9 ubuntu:14.10 "/bin/sh -c 'while t 10 minutes ago Up 7 seconds determined_almeida 起動しました。 バックグランドで実行中のコンテナにアタッチすることも可能です。 docker attachコマンドを使用します。 $ sudo docker attach 2cf73073f8c9 hellow world hellow world : Ctrl+Cで処理が終了しコンテナも停止します。
  • 14.
    Docker操作の基本 コンテナの強制終了 dockerstopコマンドではタイムアウトするまでコンテナの終了をまちます。 即座にコンテナを終了させたい場合はdocker killコマンドを使用します。 $ sudo docker kill 2cf73073f8c9 2cf73073f8c9 docker psで確認してみましょう。 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 即座に終了しましたね。
  • 15.
    Docker操作の基本 コンテナ内のプロセス監視 実行中のコンテナ内のプロセスを監視することも可能です。 docker topコマンドを使用します $ sudo docker start 2cf73073f8c9 2cf73073f8c9 ! $ sudo docker top 2cf73073f8c9 UID PID PPID C STIME TTY TIME CMD root 24958 2371 0 12:50 ? 00:00:00 /bin/sh -c while true; do echo hellow world; sleep 10; done root 25002 24958 0 12:50 ? 00:00:00 sleep 10 [ec2-user@ip-172-31-12-243 ~]$
  • 16.
    Docker操作の基本 コンテナ情報の出力 コンテナの詳細な情報をJSON形式で出力することができます。 docker inspectコマンドを使用します。 $ sudo docker inspect 2cf73073f8c9 [{❴ "Args": [ "-c", "while true; do echo hellow world; sleep 10; done" ], "Config": {❴ "AttachStderr": false, : 個人的にはDockerfileの生成できるといいのですが、、、今後に期待ということ で。
  • 17.
    Docker操作の基本 コンテナのコミット コンテナは実行(dockerrun)毎に作成されるため、現在実行中の状態は引き継がれ ません。状態を引き継ぐためにはdocker commitコマンドでコンテナの状態をイ メージに反映させます。 $ sudo docker commit 40ed7d2502fe ubuntu:test df6c863ac74630234fb19223974202b0bb7b2e9dbaa7a692cbdc92a2a47099dc $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu test df6c863ac746 13 seconds ago 260.8 MB ubuntu utopic 2db9ad9043ca 4 days ago 260.8 MB ubuntu 14.10 2db9ad9043ca 4 days ago 260.8 MB ubuntu 14.04 6b4e8a7373fe 4 days ago 194.8 MB ubuntu 14.04.1 6b4e8a7373fe 4 days ago 194.8 MB ubuntu latest 6b4e8a7373fe 4 days ago 194.8 MB : これでDockerfileの生成ができるといいのに。。。
  • 18.
    Docker操作の基本 コンテナの削除・イメージの削除 Dockerは実行毎にコンテナを作成しますが、コンテナを停止してもコンテナは消え ません。削除するためにdocker rmコマンドを使用します。 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cf73073f8c9 ubuntu:14.10 "/bin/sh -c 'while t 3 hours ago Exited (❨-1)❩ 57 minutes ago determined_almeida 40ed7d2502fe ubuntu:14.10 "/bin/bash" 3 hours ago Up 36 minutes backstabbing_shockley $ sudo docker rm 2cf73073f8c9 2cf73073f8c9 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 40ed7d2502fe ubuntu:14.10 "/bin/bash" 3 hours ago Up 37 minutes backstabbing_shockley これでコンテナが削除されました。
  • 19.
    Docker操作の基本 コンテナの削除・イメージの削除 コンテナの削除と同様にDockerイメージを削除するためはdockerrmiコマンドを 使用します。 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu test df6c863ac746 13 seconds ago 260.8 MB ubuntu utopic 2db9ad9043ca 4 days ago 260.8 MB ubuntu 14.10 2db9ad9043ca 4 days ago 260.8 MB ubuntu 14.04 6b4e8a7373fe 4 days ago 194.8 MB ubuntu 14.04.1 6b4e8a7373fe 4 days ago 194.8 MB ubuntu latest 6b4e8a7373fe 4 days ago 194.8 MB : $ sudo docker rmi df6c863ac746 Untagged: ubuntu:test Deleted: df6c863ac74630234fb19223974202b0bb7b2e9dbaa7a692cbdc92a2a47099dc $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu utopic 2db9ad9043ca 4 days ago 260.8 MB ubuntu 14.10 2db9ad9043ca 4 days ago 260.8 MB ubuntu 14.04 6b4e8a7373fe 4 days ago 194.8 MB ubuntu 14.04.1 6b4e8a7373fe 4 days ago 194.8 MB ubuntu latest 6b4e8a7373fe 4 days ago 194.8 MB :
  • 20.
    Docker操作の基本 ファイルコピー 実行中のコンテナからホストへファイルをコピーすることができます。 docker cpコマンドを使用します。 $ sudo docker cp a2c29dc8aa3b:/etc/passwd . $ ll total 12 -rw-r--r-- 1 root root 919 Sep 23 07:35 passwd 実行中のコンテナのpasswdファイルをカレントディレクトリにコピーしました。 が、逆にホストのファイルをコンテナ内へコピーすることはできません。 こういった場合ことが行いたい場合は、コンテナの実行時に対象のディレクトリを マウントすることで対処します。 $ sudo docker run -i -t -v /home/ec2-user:/root/ec2-user ubuntu:14.10 /bin/bash root@a2c29dc8aa3b:/# ll /root/ec2-user total 40 drwx------ 3 500 500 4096 Oct 6 16:07 ./ drwx------ 3 root root 4096 Oct 7 06:29 ../ -rw------- 1 500 500 4229 Oct 7 06:28 .bash_history -rw-r--r-- 1 500 500 18 Sep 4 2013 .bash_logout -rw-r--r-- 1 500 500 176 Sep 4 2013 .bash_profile -rw-r--r-- 1 500 500 124 Sep 4 2013 .bashrc drwx------ 2 500 500 4096 Oct 6 09:42 .ssh/
  • 21.
  • 22.
    Dockerfile buildコマンド Dockerfileからコンテナを作成するにはdockerbuildコマンドを使用します。 今回は適当なDockerfileをgithubから持ってきて実行します。 https://github.com/dockerfile/ghost $ ll 合計 8 -rw-r--r-- 1 ec2-user ec2-user 716 10月 6 16:07 Dockerfile -rw-r--r-- 1 ec2-user ec2-user 880 10月 6 16:07 start.bash $ sudo docker build -t="dockerfile/ghost" . Sending build context to Docker daemon 10.75 kB Sending build context to Docker daemon : $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE dockerfile/ghost latest 834b82260727 2 minutes ago 562.3 MB dockerfile/nodejs latest 4a6e85fd2e31 4 days ago 491 MB これでDockerイメージが作成されました。
  • 23.
    Dockerfile イメージの実行 作成したDockerイメージを実行してみます。 $ docker run -d -p 80:2368 dockerfile/ghost 今回は実行時に-pオプションでポートのマッピングをしています。 port:80でホストにアクセスすると以下の様な画面が見れます。
  • 24.
    Dockerfile Dockerfileの定義 # # Ghost Dockerfile # # https://github.com/dockerfile/ghost ! # # Pull base image. docker pullと同様 ! FROM dockerfile/nodejs # Install Ghost RUN cd /tmp && wget https://ghost.org/zip/ghost-latest.zip && unzip ghost-latest.zip -d /ghost && rm -f ghost-latest.zip && cd /ghost && npm install --production && sed 's/127.0.0.1/0.0.0.0/' /ghost/config.example.js > /ghost/config.js && ! useradd ghost --home /ghost # Add files. ! ADD start.bash /ghost-start # Set environment variables. ENV ! NODE_ENV production # Define mountable directories. ! VOLUME ["/data", "/ghost-override"] # Define working directory. ! WORKDIR /ghost # Define default command. ! CMD ["bash", "/ghost-start"] # Expose ports. EXPOSE 2368 コンテナ内で実行するコマンドを列挙しています(環境設定用) ホストからコンテナへファイルを追加しています 環境変数を追加しています docker run -eと同様です ホストのディレクトリをマウントしています docker run -vと同様です カレントディレクトリを指定してます cd しているイメージです コンテナで実行するコマンドを記述します コンテナのportを公開していますdocker run -pと以下略
  • 25.