LoginSignup
1
7

More than 5 years have passed since last update.

はじめてのDocker

Posted at

Dockerを第1章から第4章まで読んだのでメモ。

  • ホストOS
# cat /etc/redhat-release
CentOS release 6.7 (Final)

Install

install

# curl https://get.docker.com > install.sh
# chmod +x install.sh
# ./install.sh

起動

# /etc/init.d/docker restart

確認

# docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64

基本コマンド群

初めてのイメージの実行

  • Debianのイメージをダウンロードしてecho "Hello World"を実行
# docker run debian echo "Hello World"
Hello world

インタラクティブセッション

# docker run -i -t debian /bin/bash
root@a046a027a7bf:/# echo "Hello World"
Hello World
root@a046a027a7bf:/# exit
exit

ホスト名を指定

# docker run -h CONTAINER -i -t debian /bin/bash
root@CONTAINER:/#

ps

  • 実行中のコンテナ
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4063d700d513        debian              "/bin/bash"         4 minutes ago       Up 4 minutes                            stupefied_poincare
  • 全コンテナ(終了したコンテナ含む)
# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
4063d700d513        debian              "/bin/bash"         6 minutes ago       Up 6 minutes                                   stupefied_poincare
a046a027a7bf        debian              "/bin/bash"         8 minutes ago       Exited (0) 7 minutes ago                       compassionate_babbage

inspect

# docker inspect stupefied_poincare
[
{
    "Id": "4063d700d513f6a730486dab9ad4c9311552525c5d0514d79ca5d1f85909d926",
    "Created": "2017-01-03T23:55:14.39212229Z",
    "Path": "/bin/bash",
    "Args": [],
    "State": {
        "Running": true,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 9150,
        "ExitCode": 0,
        "Error": "",
        "StartedAt": "2017-01-03T23:55:14.747637756Z",
        "FinishedAt": "0001-01-01T00:00:00Z"
    },
    "Image": "30a77eab48278f32a9f3ee32f8f5914428be48415fac8e24cb56af6a2ac39929",
    "NetworkSettings": {
        "Bridge": "",
        "EndpointID": "68d59ea164afd4ce912cea106246ccecbcd31f6884104bf7af694cd2372aa5a1",
        "Gateway": "172.17.42.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "HairpinMode": false,
        "IPAddress": "172.17.0.2",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "MacAddress": "02:42:ac:11:00:02",
        "NetworkID": "c082cc42f7b81f05841f37cde7a0e513b48426086e0c1b32e911f487f5744607",
        "PortMapping": null,
        "Ports": {},
        "SandboxKey": "/var/run/docker/netns/4063d700d513",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null
    },
    "ResolvConfPath": "/var/lib/docker/containers/4063d700d513f6a730486dab9ad4c9311552525c5d0514d79ca5d1f85909d926/resolv.conf",
    "HostnamePath": "/var/lib/docker/containers/4063d700d513f6a730486dab9ad4c9311552525c5d0514d79ca5d1f85909d926/hostname",
    "HostsPath": "/var/lib/docker/containers/4063d700d513f6a730486dab9ad4c9311552525c5d0514d79ca5d1f85909d926/hosts",
    "LogPath": "/var/lib/docker/containers/4063d700d513f6a730486dab9ad4c9311552525c5d0514d79ca5d1f85909d926/4063d700d513f6a730486dab9ad4c9311552525c5d0514d79ca5d1f85909d926-json.log",
    "Name": "/stupefied_poincare",
    "RestartCount": 0,
    "Driver": "devicemapper",
    "ExecDriver": "native-0.2",
    "MountLabel": "",
    "ProcessLabel": "",
    "Volumes": {},
    "VolumesRW": {},
    "AppArmorProfile": "",
    "ExecIDs": null,
    "HostConfig": {
        "Binds": null,
        "ContainerIDFile": "",
        "LxcConf": [],
        "Memory": 0,
        "MemorySwap": 0,
        "CpuShares": 0,
        "CpuPeriod": 0,
        "CpusetCpus": "",
        "CpusetMems": "",
        "CpuQuota": 0,
        "BlkioWeight": 0,
        "OomKillDisable": false,
        "Privileged": false,
        "PortBindings": {},
        "Links": null,
        "PublishAllPorts": false,
        "Dns": null,
        "DnsSearch": null,
        "ExtraHosts": null,
        "VolumesFrom": null,
        "Devices": [],
        "NetworkMode": "bridge",
        "IpcMode": "",
        "PidMode": "",
        "UTSMode": "",
        "CapAdd": null,
        "CapDrop": null,
        "RestartPolicy": {
            "Name": "no",
            "MaximumRetryCount": 0
        },
        "SecurityOpt": null,
        "ReadonlyRootfs": false,
        "Ulimits": null,
        "LogConfig": {
            "Type": "json-file",
            "Config": {}
        },
        "CgroupParent": ""
    },
    "Config": {
        "Hostname": "CONTAINER",
        "Domainname": "",
        "User": "",
        "AttachStdin": true,
        "AttachStdout": true,
        "AttachStderr": true,
        "PortSpecs": null,
        "ExposedPorts": null,
        "Tty": true,
        "OpenStdin": true,
        "StdinOnce": true,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "Cmd": [
            "/bin/bash"
        ],
        "Image": "debian",
        "Volumes": null,
        "VolumeDriver": "",
        "WorkingDir": "",
        "Entrypoint": null,
        "NetworkDisabled": false,
        "MacAddress": "",
        "OnBuild": null,
        "Labels": {}
    }
}
]

diff

# docker diff compassionate_babbage
C /root
A /root/.bash_history

logs

# docker logs compassionate_babbage
root@a046a027a7bf:/# echo "Hello World"
Hello World
root@a046a027a7bf:/# exit
exit

rm

  • 停止したコンテナの全削除
# docker rm -v $(docker ps -aq -f status=exited)

Dockerfile

イメージの構築

# mkdir cowsay
# cd cowsay/
# touch Dockerfile
# vi Dockerfile
FROM debian:wheezy

MAINTAINER takaheraw
RUN apt-get update && apt-get install -y cowsay fortune
COPY entrypoint.sh /

ENTRYPOINT ["/entrypoint.sh"]
# vi entrypoint.sh
#!/bin/bash

if [ $# -eq 0 ]; then
  /usr/games/fortune | /usr/games/cowsay
else
  /usr/games/cowsay "$@"
fi
  • build
# docker build -t test/cowsay-dockerfile .

コンテナ実行

  • 引数なし
# docker run test/cowsay-dockerfile
 _________________________________________
/ Swerve me? The path to my fixed purpose \
| is laid with iron rails, whereon my     |
| soul is grooved to run. Over unsounded  |
| gorges, through the rifled hearts of    |
| mountains, under torrents' beds,        |
| unerringly I rush!                      |
|                                         |
\ -- Captain Ahab, "Moby Dick"            /
 -----------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
  • 引数あり
# docker run test/cowsay-dockerfile Fuck
 ______
< Fuck >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

レジストリ(Docker Hub)にアップロード

  • Docker Hubの自分のユーザ名からはじまるリポジトリ名でbuildしてpush
# docker build -t takaheraw/cowsay .
# docker push takaheraw/cowsay

公式イメージ(Redis)の利用

pull

# docker pull redis

バックグラウンド起動

# docker run --name myredis -d redis
  • 新しいコンテナを立ち上げ、2つのコンテナをリンク
# docker run --rm -it --link myredis:redis redis /bin/bash
root@16e217924a95:/data# redis-cli -h redis -p 6379
redis:6379> set "persistence" "test"
OK
redis:6379> save
OK
redis:6379> exit
root@16e217924a95:/data# exit
exit

永続化

# docker run --rm --volumes-from myredis -v $(pwd)/backup:/backup debian cp /data/dump.rdb /backup/
# ls backup
dump.rdb

停止・削除

# docker stop myredis
# docker rm -v myredis
1
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
7