This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 3 years have passed since last update.

AKS入門講座 Dockerハンズオン

Last updated at Posted at 2020-05-22

Dockerのインストール

1.Dockerインストール

インストールスクリプトのダウンロード

コピー&ペースト用

コマンド
curl -fsSL get.docker.com -o get-docker.sh

コマンド結果

結果は表示されません。

コマンド
# curl -fsSL get.docker.com -o get-docker.sh

スクリプトの実行

コピー&ペースト用

コマンド
sh get-docker.sh

コマンド結果

コマンド
# sh get-docker.sh
# Executing docker install script, commit: 26ff363bcf3b3f5a00498ac43694bf1c7d9ce16c
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ [ -n  ]
+ sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sh -c docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:02:36 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:01:06 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker your-user

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.

2.Dockerのバージョンを確認

コピー&ペースト用

コマンド
docker version

コマンド結果

コマンド
# docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:02:36 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:01:06 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

3.システム情報を表示

コピー&ペースト用

コマンド
docker system info

コマンド結果

コマンド
# docker system info
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.13
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.4.0-1026-azure
 Operating System: Ubuntu 18.04.5 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.844GiB
 Name: docker
 ID: EMWH:Z6EM:3LIV:RZPZ:XSKF:PMWA:NPBF:5UN6:W6JE:KDMM:CE5X:66UW
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No swap limit support

Docker Hubからコンテナーイメージのpull

1.searchサブコマンドでレジストリーを検索

コピー&ペースト用

コマンド
docker search linaction

コマンド結果

コマンド
# docker search linaction
NAME                               DESCRIPTION               STARS               OFFICIAL            AUTOMATED
linaction/centos                   Sample CentOS6.7(Final)   1
linaction/wordpress                                          0
linaction2017/docker-whale                                   0
linaction2205/docker-whale                                   0
linaction2017/python-hello-world                             0
you19920304/linaction              wordpress                 0

2.イメージのダウンロード

コピー&ペースト用

コマンド
docker image pull -a linaction/centos

コマンド結果

コマンド
# docker image pull -a linaction/centos
centos6: Pulling from linaction/centos
Image docker.io/linaction/centos:centos6 uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
a3ed95caeb02: Pull complete
3b231ed5aa2f: Pull complete
cc8adad0f7cd: Pull complete
d00fd8fd4a07: Pull complete
Digest: sha256:759ea478951130a32e9191daaffc9b4e3c5ad089331eccc32112e370bf7c9fb8
Status: Downloaded newer image for linaction/centos
docker.io/linaction/centos

3.ダウンロードしたイメージを確認

コピー&ペースト用

コマンド
docker image ls

コマンド結果

コマンド
# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
linaction/centos    centos6             6ccd3be87830        4 years ago         191MB

コンテナーの起動

1.コンテナーを起動

コピー&ペースト用

コマンド
docker container run -it --name centos01 linaction/centos:centos6 /bin/bash

コマンド結果

コマンド
# docker container run -it --name centos01 linaction/centos:centos6 /bin/bash
[root@3f862208a82a /]# 

起動したコンテナーの確認

1.コンテナー環境のOSのバージョンを確認

コピー&ペースト用

コマンド
cat /etc/redhat-release

コマンド結果

コマンド
[root@3f862208a82a /]# cat /etc/redhat-release
CentOS release 6.7 (Final)

2.コンテナー内のプロセスを確認

コピー&ペースト用

コマンド
ps -ef

コマンド結果

コマンド
[root@3f862208a82a /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 06:10 pts/0    00:00:00 /bin/bash
root         13      1  0 06:13 pts/0    00:00:00 ps -ef

3.コンテナー環境のネットワークを確認

コピー&ペースト用

コマンド
ifconfig eth0

コマンド結果

コマンド
[root@3f862208a82a /]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1812 (1.7 KiB)  TX bytes:0 (0.0 b)

コンテナーとLinuxホストの切替

1.コンテナーの/bin/bashから抜けてホストLinuxに戻る

Ctrlキーを押したまま、PとQを順番に押す。

2.ホストLinuxから再度コンテナー内のbashに接続

コピー&ペースト用

コマンド
docker container attach centos01

コマンド結果

コマンド
# docker container attach centos01
[root@3f862208a82a /]#

コンテナーの起動と停止

1.Linuxホストに戻る

Ctrlキーを押したまま、PとQを順番に押す。

2.コンテナーを停止

コピー&ペースト用

コマンド
docker container stop centos01

コマンド結果

コマンド
# docker container stop centos01
centos01

3.停止したコンテナーを確認

コピー&ペースト用

コマンド
docker container ls -a

コマンド結果

コマンド
# docker container ls -a
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS                            PORTS               NAMES
3f862208a82a        linaction/centos:centos6   "/bin/bash"         7 minutes ago       Exited (137) About a minute ago                       centos01

4.コンテナーを起動

コマンド結果

コマンド
docker container start centos01

コピー&ペースト用

コマンド
# docker container start centos01
centos01

5.起動したコンテナーを確認

コピー&ペースト用

コマンド
docker container ls

コマンド結果

コマンド
# docker container ls
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES
3f862208a82a        linaction/centos:centos6   "/bin/bash"         9 minutes ago       Up About a minute                       centos01

6.docker execコマンド

コピー&ペースト用1

コマンド
docker container exec -it centos01 /bin/bash 

コマンド結果1

コマンド
# docker container exec -it centos01 /bin/bash
[root@3f862208a82a /]# 

コピー&ペースト用2

コマンド
ps -ef

コマンド結果2

コマンド
[root@3f862208a82a /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 06:18 pts/0    00:00:00 /bin/bash
root         12      0  0 06:20 pts/1    00:00:00 /bin/bash
root         24     12  0 06:21 pts/1    00:00:00 ps -ef

コピー&ペースト用3

コマンド
exit

コマンド結果3

コマンド
[root@3f862208a82a /]# exit
exit

Dockerコマンド演習

Nginxコンテナーの作成

1.「practice-nginx」という名前の最新版のnginxイメージ、ポート8080のコンテナを作成

コピー&ペースト用

コマンド
docker run --name practice-nginx -d -p 8080:80 nginx

コマンド結果

コマンド
# docker run --name practice-nginx -d -p 8080:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
54fec2fa59d0: Pull complete
4ede6f09aefe: Pull complete
f9dc69acb465: Pull complete
Digest: sha256:1de8dbae66ccb87c442ac9871987b729d7eee3b5341d9db50607feeeb650631e
Status: Downloaded newer image for nginx:latest
61422feae04c67046ab0942ee814d92e0efbe06eceb01fabe37c34e77b0e1228

2.「practice-nginx」コンテナーが起動していることを確認

コピー&ペースト用

コマンド
docker container ls

コマンド結果

コマンド
# docker container ls
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                  NAMES
61422feae04c        nginx                      "nginx -g 'daemon of…"   7 minutes ago       Up 7 minutes        0.0.0.0:8080->80/tcp   practice-nginx
3f862208a82a        linaction/centos:centos6   "/bin/bash"              24 minutes ago      Up 16 minutes                              centos01

3.「practice-nginx」コンテナーが8080でポートフォワーディングしているか確認

コピー&ペースト用

コマンド
curl localhost:8080

コマンド結果

コマンド
# curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

4.「practice-nginx」コンテナーのログを確認

コピー&ペースト用

コマンド
docker container logs practice-nginx

コマンド結果

コマンド
# docker container logs practice-nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
172.17.0.1 - - [01/Oct/2020:07:22:37 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"

5.「practice-nginx」コンテナーの詳細情報を確認

コピー&ペースト用

コマンド
docker inspect practice-nginx

コマンド結果

コマンド
# docker inspect practice-nginx
[
    {
        "Id": "61422feae04c67046ab0942ee814d92e0efbe06eceb01fabe37c34e77b0e1228",
        "Created": "2020-05-15T06:27:25.209384341Z",
        "Path": "nginx",
        "Args": [
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 20737,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-05-15T06:27:36.940829489Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:602e111c06b6934013578ad80554a074049c59441d9bcd963cb4a7feccede7a5",
        "ResolvConfPath": "/var/lib/docker/containers/61422feae04c67046ab0942ee814d92e0efbe06eceb01fabe37c34e77b0e1228/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/61422feae04c67046ab0942ee814d92e0efbe06eceb01fabe37c34e77b0e1228/hostname",
        "HostsPath": "/var/lib/docker/containers/61422feae04c67046ab0942ee814d92e0efbe06eceb01fabe37c34e77b0e1228/hosts",
        "LogPath": "/var/lib/docker/containers/61422feae04c67046ab0942ee814d92e0efbe06eceb01fabe37c34e77b0e1228/61422feae04c67046ab0942ee814d92e0efbe06eceb01fabe37c34e77b0e1228-json.log",
        "Name": "/practice-nginx",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "8080"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/ea538fd303fa11023941945b75f301f2827074fe77359930ded00bc974b48167-init/diff:/var/lib/docker/overlay2/3acbf7cfa5172301a96f0f85fe3a81f68b8cfb1eb55579192f2d4a7a332a7eb6/diff:/var/lib/docker/overlay2/3c5a68cd4152a5f58ece9e7871f2c0d01d48b8087e11bd70efb9a07ce4b77f58/diff:/var/lib/docker/overlay2/048f5449b23d04b93ef98cbd2f789b4de1724590ca2a5a13512a2538b8f62f8a/diff",
                "MergedDir": "/var/lib/docker/overlay2/ea538fd303fa11023941945b75f301f2827074fe77359930ded00bc974b48167/merged",
                "UpperDir": "/var/lib/docker/overlay2/ea538fd303fa11023941945b75f301f2827074fe77359930ded00bc974b48167/diff",
                "WorkDir": "/var/lib/docker/overlay2/ea538fd303fa11023941945b75f301f2827074fe77359930ded00bc974b48167/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "61422feae04c",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.17.10",
                "NJS_VERSION=0.3.9",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGTERM"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "a6a2ffb378f3b9a7ffb118663110c82094e16ee13104c61c84725ab98e6ffd47",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8080"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/a6a2ffb378f3",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "3af8dc9117aa5daccc4b8a9338369f97ee1733767cf0c1ac6d39f7151166d2fb",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "63bd92775e744ea1993c190e57713c07c2299c891f50caa9df670f7aa81fa114",
                    "EndpointID": "3af8dc9117aa5daccc4b8a9338369f97ee1733767cf0c1ac6d39f7151166d2fb",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]

6.「practice-nginx」コンテナーのリソース情報(ライブストリーム)を確認

コピー&ペースト用

コマンド
docker container stats practice-nginx

コマンド結果

コマンド
# docker container stats practice-nginx
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
61422feae04c        practice-nginx      0.00%               3.047MiB / 3.818GiB   0.08%               1.71kB / 1.27kB     0B / 0B             2    

「Ctrl + C」で終了します。

7.「practice-nginx」コンテナーの停止

コピー&ペースト用

コマンド
docker container stop practice-nginx

コマンド結果

コマンド
# docker container stop practice-nginx
practice-nginx

8.「practice-nginx」コンテナーの削除

コピー&ペースト用

コマンド
docker container rm practice-nginx

コマンド結果

コマンド
# docker container rm practice-nginx
practice-nginx

9.「practice-nginx」コンテナーの削除確認

コピー&ペースト用

コマンド
docker container ls

コマンド結果

コマンド
# docker container ls
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES
3f862208a82a        linaction/centos:centos6   "/bin/bash"         28 minutes ago      Up 20 minutes                           centos01

DockerfleからNginxコンテナの作成

1.「index.html」の作成

コピー&ペースト用

コマンド
vim index.html
コマンド
<!DOCTYPE html>
<html>
<head>
<title>Sample HTML</title>
</head>
<body>
    <h1>Hello,Docker & Kubernetes</h1>
</body>
</html>

作業全体

コマンド
# vim index.html
<!DOCTYPE html>
<html>
<head>
<title>Sample HTML</title>
</head>
<body>
    <h1>Hello,Docker & Kubernetes</h1>
</body>
</html>

2.「Dockerfile」の作成

コピー&ペースト用

コマンド
vim Dockerfile
コマンド
FROM nginx

COPY index.html /usr/share/nginx/html/index.html

作業全体

コマンド
# vim Dockerfile
FROM nginx

COPY index.html /usr/share/nginx/html/index.html

3.「dockerfile-nginx」(任意名)イメージのビルド

コピー&ペースト用

コマンド
docker image build -t dockerfile-nginx .

コマンド結果

コマンド
# docker image build -t dockerfile-nginx .
Sending build context to Docker daemon  27.14kB
Step 1/2 : FROM nginx
 ---> 602e111c06b6
Step 2/2 : COPY index.html /usr/share/nginx/html/index.html
 ---> 01add235bbb7
Successfully built 01add235bbb7
Successfully tagged dockerfile-nginx:latest

4.「dockerfile-nginx」イメージを基に「practice-nginx」という名前、ポート8080コンテナーを起動

コピー&ペースト用

コマンド
docker run --name practice-nginx -d -p 8080:80 dockerfile-nginx

コマンド結果

コマンド
# docker run --name practice-nginx -d -p 8080:80 dockerfile-nginx
24a89a5fbb3f30f75211cf0ff9583d0e6656a119c5c7f06c50f33b38808574fa

5.8080でアクセスして、オリジナル「index.html」が表示されることを確認

コピー&ペースト用

コマンド
curl localhost:8080

コマンド結果

コマンド
# curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Sample HTML</title>
</head>
<body>
    <h1>Hello,Docker & Kubernetes</h1>
</body>
</html>

6.「practice-nginx」コンテナーの停止

コピー&ペースト用

コマンド
docker container stop practice-nginx

コマンド結果

コマンド
# docker container stop practice-nginx
practice-nginx

7.「practice-nginx」コンテナーの削除

コピー&ペースト用

コマンド
docker container rm practice-nginx

コマンド結果

コマンド
# docker container rm practice-nginx
practice-nginx

8.「practice-nginx」コンテナーの削除確認

コピー&ペースト用

コマンド
docker container ls

コマンド結果

コマンド
# docker container ls
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES
3f862208a82a        linaction/centos:centos6   "/bin/bash"         31 minutes ago      Up 23 minutes                           centos01

multi-stage builds

1.サンプルGoアプリケーションの作成

コピー&ペースト用

コマンド
vim main.go
コマンド
package main

import "fmt"

func main() {
        fmt.Println("Hello,Docker & Kubernetes!!")
}

作業全体

コマンド
# vim main.go
package main

import "fmt"

func main() {
        fmt.Println("Hello,Docker & Kubernetes!!")
}

2.「Dockerfile」の作成

コピー&ペースト用

コマンド
vim Dockerfile
コマンド
FROM golang:alpine AS build-env
COPY . /work
WORKDIR /work
RUN go build -o hello main.go

FROM busybox
COPY --from=build-env /work/hello /usr/local/bin/hello
ENTRYPOINT ["/usr/local/bin/hello"]

作業全体

コマンド
# vim Dockerfile
FROM golang:alpine AS build-env
COPY . /work
WORKDIR /work
RUN go build -o hello main.go

FROM busybox
COPY --from=build-env /work/hello /usr/local/bin/hello
ENTRYPOINT ["/usr/local/bin/hello"]

3.「hello」という名前でビルド実行

コピー&ペースト用

コマンド
docker image build -t hello .

コマンド結果

コマンド
# docker image build -t hello .
Sending build context to Docker daemon   29.7kB
Step 1/7 : FROM golang:alpine AS build-env
alpine: Pulling from library/golang
cbdbe7a5bc2a: Pull complete
408f87550127: Pull complete
fe522b08c979: Pull complete
618fff1cf170: Pull complete
0d8b518583db: Pull complete
Digest: sha256:9b3ad7928626126b72b916609ad081cfb6c0149f6e60cef7fc1e9e15a0d1e973
Status: Downloaded newer image for golang:alpine
 ---> dda4232b2bd5
Step 2/7 : ADD . /work
 ---> d5cd898bcb90
Step 3/7 : WORKDIR /work
 ---> Running in bffdeb1e41d7
Removing intermediate container bffdeb1e41d7
 ---> 8101e0d146c5
Step 4/7 : RUN go build -o hello main.go
 ---> Running in f2bdea3825a0
Removing intermediate container f2bdea3825a0
 ---> 1bd92d75d406
Step 5/7 : FROM busybox
latest: Pulling from library/busybox
d9cbbca60e5f: Pull complete
Digest: sha256:836945da1f3afe2cfff376d379852bbb82e0237cb2925d53a13f53d6e8a8c48c
Status: Downloaded newer image for busybox:latest
 ---> 78096d0a5478
Step 6/7 : COPY --from=build-env /work/hello /usr/local/bin/hello
 ---> 7478008b26f4
Step 7/7 : ENTRYPOINT ["/usr/local/bin/hello"]
 ---> Running in 6fc2fec13179
Removing intermediate container 6fc2fec13179
 ---> 0bf4edac4f41
Successfully built 0bf4edac4f41
Successfully tagged hello:latest

4.「hello」コンテナーの起動(処理完了と同時にコンテナの削除を実施)

コピー&ペースト用

コマンド
docker container run -it --rm hello

コマンド結果

コマンド
# docker container run -it --rm hello
Hello,Docker & Kubernetes!!

5.イメージの確認

コピー&ペースト用

コマンド
docker image ls

コマンド結果

コマンド
# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello               latest              0bf4edac4f41        2 minutes ago       3.29MB
<none>              <none>              1bd92d75d406        2 minutes ago       372MB
dockerfile-nginx    latest              01add235bbb7        7 minutes ago       127MB
busybox             latest              78096d0a5478        34 hours ago        1.22MB
golang              alpine              dda4232b2bd5        2 weeks ago         370MB
nginx               latest              602e111c06b6        3 weeks ago         127MB
linaction/centos    centos6             6ccd3be87830        4 years ago         191MB

DockerfileからWordPress環境作成

1.コンテナーを停止

コピー&ペースト用

コマンド
docker container stop centos01

コマンド結果

コマンド
# docker container stop centos01
centos01

2.build用のディレクトリを作成

コピー&ペースト用

コマンド
mkdir ~/build_wordpress

コマンド結果

結果は表示されません。

コマンド
# mkdir ~/build_wordpress

3.Dockerfileを作成

コピー&ペースト用1

コマンド
cd ~/build_wordpress/

コマンド結果1

結果は表示されません。

コマンド
# cd ~/build_wordpress/

コピー&ペースト用2

コマンド
vim Dockerfile
コマンド
#centos6のイメージを取得
FROM centos:centos6

#タイムゾーンの設定
RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

#yumリポジトリの追加
RUN rpm -ivh http://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

#php7のインストール
RUN sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
RUN sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
RUN yum install -y --enablerepo=remi,remi-php73 php php-devel php-mbstring php-pdo php-mysql php-gd php-mcrypt libmcrypt

#yumによるHTTPD,MySQL,tar,wgetのインストール
RUN yum -y install httpd mysql-server tar wget

#tmpディレクトリに移動
WORKDIR /tmp/

#wordpress一式のダウンロード
RUN wget https://ja.wordpress.org/latest-ja.tar.gz

#wordpressの展開
RUN tar xvfz ./latest-ja.tar.gz -C /var/www/html

#ダウンロードしたwordpressの削除
RUN rm -f ./latest-ja.tar.gz

#wordpressのconfigファイルをリネームして利用可能にする
RUN cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php

#wordpressのconfigファイルに必要な情報をsedコマンドで書き換える
RUN sed -i -e 's/database_name_here/wordpress/g' -e 's/username_here/wordpress/g' -e 's/password_here/wppass/g' /var/www/html/wordpress/wp-config.php

#DocumentRootディレクトリの所有者をapacheに変更
RUN chown -R apache.apache /var/www/html/

#mysqldの起動、DB作成、ユーザ作成および権限設定、mysqldの停止
RUN service mysqld start && mysql -u root -e "CREATE DATABASE wordpress; GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'wppass'; FLUSH PRIVILEGES;" && service mysqld stop

#mysqld,httpdの起動スクリプトの作成
RUN echo -e "service mysqld start\nservice httpd start\n/bin/bash" > /startService.sh

#mysqld,httpdの起動スクリプトの権限設定
RUN chmod o+x /startService.sh

#公開ポート
EXPOSE 80

#mysqld,httpdの起動スクリプトの実行
CMD /startService.sh

作業全体

コマンド
# vim Dockerfile
#centos6のイメージを取得
FROM centos:centos6

#タイムゾーンの設定
RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

#yumリポジトリの追加
RUN rpm -ivh http://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

#php7のインストール
RUN sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
RUN sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
RUN yum install -y --enablerepo=remi,remi-php73 php php-devel php-mbstring php-pdo php-mysql php-gd php-mcrypt libmcrypt

#yumによるHTTPD,MySQL,tar,wgetのインストール
RUN yum -y install httpd mysql-server tar wget

#tmpディレクトリに移動
WORKDIR /tmp/

#wordpress一式のダウンロード
RUN wget https://ja.wordpress.org/latest-ja.tar.gz

#wordpressの展開
RUN tar xvfz ./latest-ja.tar.gz -C /var/www/html

#ダウンロードしたwordpressの削除
RUN rm -f ./latest-ja.tar.gz

#wordpressのconfigファイルをリネームして利用可能にする
RUN cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php

#wordpressのconfigファイルに必要な情報をsedコマンドで書き換える
RUN sed -i -e 's/database_name_here/wordpress/g' -e 's/username_here/wordpress/g' -e 's/password_here/wppass/g' /var/www/html/wordpress/wp-config.php

#DocumentRootディレクトリの所有者をapacheに変更
RUN chown -R apache.apache /var/www/html/

#mysqldの起動、DB作成、ユーザ作成および権限設定、mysqldの停止
RUN service mysqld start && mysql -u root -e "CREATE DATABASE wordpress; GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'wppass'; FLUSH PRIVILEGES;" && service mysqld stop

#mysqld,httpdの起動スクリプトの作成
RUN echo -e "service mysqld start\nservice httpd start\n/bin/bash" > /startService.sh

#mysqld,httpdの起動スクリプトの権限設定
RUN chmod o+x /startService.sh

#公開ポート
EXPOSE 80

#mysqld,httpdの起動スクリプトの実行
CMD /startService.sh

4.Dockerfileを実行

コピー&ペースト用

コマンド
docker image build -t linaction/wordpress:ver1.0 ~/build_wordpress

コマンド結果

コマンド
# docker image build -t linaction/wordpress:ver1.0 ~/build_wordpress
・
・省略
・
Successfully tagged linaction/wordpress:ver1.0

5.コンテナーを起動

コピー&ペースト用

コマンド
docker container run -itd -p 8000:80 --name wordpress01 linaction/wordpress:ver1.0

コマンド結果

コマンド
# docker container run -itd -p 8000:80 --name wordpress01 linaction/wordpress:ver1.0
fc47ba98dc56cee622f9ecf0fe3cd2da6799e8d09b5ef1aea361fdca7da4b63f

6.ブラウザアクセス

「http://パブリックIPアドレス:8000/wordpress/」

コンテナーのcommit

1.コンテナーを停止

コピー&ペースト用

コマンド
docker container stop wordpress01

コマンド結果

コマンド
# docker container stop wordpress01
wordpress01

2.コンテナーを保存

コピー&ペースト用

コマンド
docker container commit wordpress01 linaction/wordpress:ver1.0

コマンド結果

コマンド
# docker container commit wordpress01 linaction/wordpress:ver1.0
sha256:fb677c549a2a77b45c2d3d86af8f414db4487087376bb559262300d8a0b77448

3.コンテナーイメージの確認

コピー&ペースト用

コマンド
docker image ls

コマンド結果

コマンド
# docker image ls
OSITORY            TAG                 IMAGE ID            CREATED             SIZE
linaction/wordpress   ver1.0              fb677c549a2a        38 seconds ago      909MB
hello                 latest              0bf4edac4f41        About an hour ago   3.29MB
<none>                <none>              1bd92d75d406        About an hour ago   372MB
dockerfile-nginx      latest              01add235bbb7        About an hour ago   127MB
busybox               latest              78096d0a5478        35 hours ago        1.22MB
golang                alpine              dda4232b2bd5        2 weeks ago         370MB
nginx                 latest              602e111c06b6        3 weeks ago         127MB
centos                centos6             d0957ffdf8a2        14 months ago       194MB
linaction/centos      centos6             6ccd3be87830        4 years ago         191MB

コンテナーイメージをDocker Hubにpush

Docker Hubのアカウントがある場合は、ご自身のアカウントで行えます。

1.Docker Hubにログイン

コピー&ペースト用

コマンド
docker login

コマンド結果

コマンド
# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: linaction
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2.Docker Hubにコンテナーイメージをpush

コピー&ペースト用

コマンド
docker image push linaction/wordpress

コマンド結果

コマンド
# docker image push linaction/wordpress
The push refers to repository [docker.io/linaction/wordpress]
a65caf2e9f07: Pushed
716135bd419e: Pushed
2f3e15ff8d71: Pushed
113fddbf3299: Pushed
64bba7a83f4c: Pushed
313eed76972b: Pushed
5f5a734f6188: Pushed
5dba800f9217: Pushed
b020cda3cc5c: Pushed
326f9fdbf5d0: Pushed
607a2a1eaf70: Pushed
bc9f16cd05d8: Pushed
ac04301dc0f8: Pushed
8bf36c394a80: Pushed
548ca56b334d: Pushed
af6bf1987c2e: Layer already exists
ver1.0: digest: sha256:b65d8c99b94c0909666e6f376a68e71d0fee145ef7e5982ba1ad4ab88cfa8d26 size: 3676

3.リポジトリーを確認

コピー&ペースト用

コマンド
docker search linaction

コマンド結果

コマンド
# docker search linaction
NAME                               DESCRIPTION               STARS               OFFICIAL            AUTOMATED
linaction/centos                   Sample CentOS6.7(Final)   1
linaction/wordpress                                          0
linaction2017/docker-whale                                   0
linaction2205/docker-whale                                   0
linaction2017/python-hello-world                             0
you19920304/linaction              wordpress                 0

コンテナー及びイメージの一括削除

1.停止コンテナーの一括削除

コピー&ペースト用

コマンド
docker container prune

コマンド結果

コマンド
# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
ea1098a49c2d5912238b6381af8785d37bf719736383bc14e7265f628ea3fa0a
3f862208a82a1f7a22a4a7f08a794d429bf6880c3709406649d2d8672d08be1e

Total reclaimed space: 5.251MB

コピー&ペースト用

コマンド
docker container ls -a

コマンド結果

コマンド
# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

2.イメージの一括削除

コピー&ペースト用1

コマンド
docker image prune -a

コマンド結果1

コマンド
# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: nginx:latest
・
・省略
・
deleted: sha256:1079c30efc82c9ad970f01c9a732115b34156fcfd77daf69d65e914bb1de8196

Total reclaimed space: 1.601GB

コピー&ペースト用2

コマンド
docker image ls

コマンド結果2

コマンド
# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
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