2020系统综合实践 第2次实践作业
DockerFile保留字指令
FROM - 基础镜像
MAINTAINER - 镜像维护者的姓名和邮箱地址
RUN - 容器构建时需要运行的命令
EXPOSE - 当前容器对外暴露的端口
WORKDIR - 指定在创建容器后,终端默认登陆的工作目录,一个落脚点
ENV - 在构建镜像过程中设置环境变量
ADD - 将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理url和解压tar压缩包
COPY - 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新一层镜像中内<目标路径>位置 COPY src dest
VOLUME - 容器数据卷,用于数据持久化工作
CMD - 指定容器启动时运行的命令。DockerFile中可以有多个CMD指令,但只有最后一个生效。CMD会被docker run之后的参数替换
ENTRYPOINT - 功能同CMD,但不会被docker run之后的参数替换
ONBUILD - 当构建一个被继承的Dockerfile时运行命令,父镜像被子继承后父镜像的ONBUILD被触发
(1) 实现一个自定义的web容器服务
-
首先先pull一个nginx镜像
...一开局就ERROR,找了半天发现是虚拟机里面的网断了,在宿主机外面明明一切正常...好吧不是什么大问题接下去整 -
pull完成以后进行Dockerfile的编写
-
使用Dockerfile创建镜像
-
创建nginx容器 (这个图是后来截的 先不要问为什么最后镜像版本加到了4.0...)
-
镜像创建成功了,试图访问,很尴尬...
-
回头偷偷观察了大佬的博客,发现好像是没有配置nginx(目前确实不知道这个nginx是干啥用的),去nginx的镜像里找到配置文件偷出来改改
- listen 监听端口值
- root为Web默认目录
- index访问容器时默认展示的页面
-
并且重新修改一下Dockerfile
-
查看最后创建的容器
-
容器启动时,能直接进入web代码的存放目录
-
浏览器访问localhost:8888结果
(2) 实现一个自定义的数据库容器服务
-
编写Dockerfile
-
编写setup.sh
-
编写schema.sql
-
编写privileges.sql
-
build镜像
-
创建容器
-
这时想进入容器,发现一进入容器就被停止,且容器的状态为Exited (1)
查看一下意外停止容器的log,发现是sql语句有bug
回去看一下,果然,vi操作不小心误删了creat的几个字母
-
之后就是重新创建镜像,便可以成功进入容器了
-
查询数据库
-
查看容器配置信息
sudo docker inspect mymysql
[
{
"Id": "2a0256e221bb2fa2949502e867a2f5eee8b6e23bff0c76e4c1cb6ad2a486d192",
"Created": "2020-04-24T11:04:56.484435569Z",
"Path": "docker-entrypoint.sh",
"Args": [
"sh",
"/mysql/setup.sh"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 1,
"Error": "",
"StartedAt": "2020-04-24T11:04:57.631235815Z",
"FinishedAt": "2020-04-24T11:05:14.898966618Z"
},
"Image": "sha256:ae64729587d7212f7fea35df12421208fa423f7c70a4402164bb519e3ffa2d16",
"ResolvConfPath": "/var/lib/docker/containers/2a0256e221bb2fa2949502e867a2f5eee8b6e23bff0c76e4c1cb6ad2a486d192/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/2a0256e221bb2fa2949502e867a2f5eee8b6e23bff0c76e4c1cb6ad2a486d192/hostname",
"HostsPath": "/var/lib/docker/containers/2a0256e221bb2fa2949502e867a2f5eee8b6e23bff0c76e4c1cb6ad2a486d192/hosts",
"LogPath": "/var/lib/docker/containers/2a0256e221bb2fa2949502e867a2f5eee8b6e23bff0c76e4c1cb6ad2a486d192/2a0256e221bb2fa2949502e867a2f5eee8b6e23bff0c76e4c1cb6ad2a486d192-json.log",
"Name": "/mymysql",
"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": {
"3306/tcp": [
{
"HostIp": "",
"HostPort": "3333"
}
]
},
"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/9691f67e61f79a6600bb26f4bc69a6cb3601a6e44e1d9694e261f33b962ce932-init/diff:/var/lib/docker/overlay2/373d4329f58b6c22172f43aa91af70446bfb8c1498940a5a8db4e03bf6d278fe/diff:/var/lib/docker/overlay2/45350d35175580c7b678642430898a920f7f8ce7cd5689047d384f3ccdcf0cb5/diff:/var/lib/docker/overlay2/056f37030f481693a80f800e8645059e54e8ba69bee82ab067f87073f06c0553/diff:/var/lib/docker/overlay2/94a4986c082d8060bef252e2892a7d8f4d4520b063c0664866da1119183716a4/diff:/var/lib/docker/overlay2/d593795a1e8b0a66b14de3115598e03b5155010236558bf5b72b795dcc4f3783/diff:/var/lib/docker/overlay2/28d53c6d4e71291f4ece4b97f3fd90cdb3b91c38068cd091972252e43ac10bfe/diff:/var/lib/docker/overlay2/35d48d1b299c51aeeaac82ba99e9a3b96bce622795f86334c720c0856c467f40/diff:/var/lib/docker/overlay2/9df99226f39d12fbed7e9c0ee09faa4587d3366f00a1da4ba87433faa1f99bba/diff:/var/lib/docker/overlay2/61b1de8d5000a5e8a0f30bea000eaa5a2ef9f7d7d16c0282c38b1f77c338d20c/diff:/var/lib/docker/overlay2/a84dd14c07a529fb78214ba0d44f60f6db708b284b4b277226bcfc4057d938d3/diff:/var/lib/docker/overlay2/05b7f0faaf312c8e7191fcc28cad43e2c5b7c986a197bb89e11959b0613de5b4/diff:/var/lib/docker/overlay2/d71a845f793e052bc7cec07cca727dd8886df487ec6048d580033d3f14c1d95c/diff:/var/lib/docker/overlay2/10d3de9c66a6cd178966d1f9c0a6bfa26d9f3d576596643537f1abfbdf10f6f9/diff:/var/lib/docker/overlay2/22b7d43578df433267a6d31520b53f1e4aa7b6c232d0b741a83d252c470862aa/diff",
"MergedDir": "/var/lib/docker/overlay2/9691f67e61f79a6600bb26f4bc69a6cb3601a6e44e1d9694e261f33b962ce932/merged",
"UpperDir": "/var/lib/docker/overlay2/9691f67e61f79a6600bb26f4bc69a6cb3601a6e44e1d9694e261f33b962ce932/diff",
"WorkDir": "/var/lib/docker/overlay2/9691f67e61f79a6600bb26f4bc69a6cb3601a6e44e1d9694e261f33b962ce932/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "volume",
"Name": "0debce07d68242829e21568418f16610848550c0b95a4ca78eba8bffbd559443",
"Source": "/var/lib/docker/volumes/0debce07d68242829e21568418f16610848550c0b95a4ca78eba8bffbd559443/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
"Config": {
"Hostname": "2a0256e221bb",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3306/tcp": {},
"33060/tcp": {}
},
"Tty": true,
"OpenStdin": true,
"StdinOnce": false,
"Env": [
"MYSQL_ROOT_PASSWORD=123456",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOSU_VERSION=1.12",
"MYSQL_MAJOR=5.7",
"MYSQL_VERSION=5.7.29-1debian10",
"MYSQL_ALLOW_EMPTY_PASSWORD=no"
],
"Cmd": [
"sh",
"/mysql/setup.sh"
],
"Image": "zxhmysql:1.0",
"Volumes": {
"/var/lib/mysql": {}
},
"WorkingDir": "",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "813d6b4ff51a27bec670513ca53bb87f58460c03c5eb683f206e1e7e28507d55",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/813d6b4ff51a",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "b9b88cff7bd021fcf05069ad9c2a516b7e20d03ad238a6c8475c547fb80d6d1f",
"EndpointID": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null
}
}
}
}
]
心路历程
这次作业最难受的就是周一的时候docker搞到一半打翻了水杯电脑进了水🌊,赶紧关机去抢救就翘班鸽了几天,再上来的时候发现大佬都已经写好博客了,多了很多可以借鉴的地方,舒服。