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