本贴接上一篇:Docker-容器操作练习之端口映射
一般情况下管理容器都是用k8s来进行,那如果公司中没有k8s怎么办??
那就来编写一个脚本吧,来管理容器
把启动容器的方式写成脚本、当然还可以根据自己的需求添加跟多的功能、博主有空会更新
[root@localhost ~]# vim docker.sh
read -p "请给容器起个名字:" name
read -p "请填写你要使用的镜像:" image
read -p "请填写宿主机端口:" port1
read -p "转发到的容器端口:" port2
read -p "容器启动后你要执行的命令:" cmd
docker run -d -p $port1:$port2 --name $name -it $image /bin/bash #这里用到的是创建并运行
docker exec -it $name /bin/bash -c "$cmd" #这里是连接
ip=`docker inspect --format '{{.NetworkSettings.IPAddress}}' $name`
status=`docker inspect --format '{{.State.Status}}' $name`
echo 容器名称:$name #显示创建成功的结果
echo 容器地址:$ip
echo 运行状态:$status
此处附图
这是分割线
解释一下代码中的含义:
首先,创建完容器后我们想要将它的基本信息显示出来、像状态、IP、名字等
ip增么获取呢?
首先,查看容器的基本信息:使用docekr inspect 命令
[root@localhost ~]# docker inspect b2d #查看容器的信息
[
{
"Id": "b2dba289a763941e898e133006ced4a9e38a21e234ef1ca90263a29628a53ef9",
"Created": "2019-09-04T12:41:53.360227203Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 109519,
"ExitCode": 0,
"Error": "",
"StartedAt": "2019-09-04T12:41:53.896462001Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5a3221f0137beb960c34b9cf4455424b6210160fd618c5e79401a07d6e5a2ced",
"ResolvConfPath": "/var/lib/docker/containers/b2dba289a763941e898e133006ced4a9e38a21e234ef1ca90263a29628a53ef9/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/b2dba289a763941e898e133006ced4a9e38a21e234ef1ca90263a29628a53ef9/hostname",
"HostsPath": "/var/lib/docker/containers/b2dba289a763941e898e133006ced4a9e38a21e234ef1ca90263a29628a53ef9/hosts",
"LogPath": "/var/lib/docker/containers/b2dba289a763941e898e133006ced4a9e38a21e234ef1ca90263a29628a53ef9/b2dba289a763941e898e133006ced4a9e38a21e234ef1ca90263a29628a53ef9-json.log",
"Name": "/test3",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {
"80/tcp": [
{
"HostIp": "",
"HostPort": "83"
}
]
},
"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/bc55c339aef970cdf221a211d1df430202b87398be5f31c69fe665fb74c7b475-init/diff:/var/lib/docker/overlay2/607aa93ddbccdd13c8d22c9a2a158f9c10143707cc97c89a3a2e4bd67cd2b46c/diff:/var/lib/docker/overlay2/07029f1759ca8b34e2788e440f293bcdcbfeba4ad194fa5368448d8067b1d8b6/diff:/var/lib/docker/overlay2/c1d62f36de8daad83783d01f35c06efa5d3e696ac112e13dafa148f6dfadd1bb/diff",
"MergedDir": "/var/lib/docker/overlay2/bc55c339aef970cdf221a211d1df430202b87398be5f31c69fe665fb74c7b475/merged",
"UpperDir": "/var/lib/docker/overlay2/bc55c339aef970cdf221a211d1df430202b87398be5f31c69fe665fb74c7b475/diff",
"WorkDir": "/var/lib/docker/overlay2/bc55c339aef970cdf221a211d1df430202b87398be5f31c69fe665fb74c7b475/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "b2dba289a763",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": true,
"OpenStdin": true,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.17.3",
"NJS_VERSION=0.3.5",
"PKG_RELEASE=1~buster"
],
"Cmd": [
"/bin/bash"
],
"Image": "nginx",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGTERM"
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "f2957f5102fa11a2d04e063376dfe4b41621d1b7056ed550adc315622c7ace99",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "83"
}
]
},
"SandboxKey": "/var/run/docker/netns/f2957f5102fa",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "5ed42bb4f5627013a7cf1450eb1fa57e26e88259876c1aac65ec3c03fa822d87",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.5",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:05",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "448a419b0c3c8aa1f5fa3bf12e6dfbf6950f9747db08bc865bffb32a00263688",
"EndpointID": "5ed42bb4f5627013a7cf1450eb1fa57e26e88259876c1aac65ec3c03fa822d87",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.5",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:05",
"DriverOpts": null
}
}
}
}
]
[root@localhost ~]#
根据关键字找到它的状态和上级目录
根据 -f 指定模板的格式套入即可
ip地址同理
例如:
$ docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id
#列出所有绑定的端口:
$ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} ->
{{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID
$ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}'
b220fabf815a
22/tcp -> 20020
#找出特殊的端口映射:
#比如找出容器里22端口所映射的docker本机的端口:
$ docker inspect --format='{{(index (index .NetworkSettings.Ports "22/tcp") 0).HostPort}}' $INSTANCE_ID
[root@localhost ~]# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/tcp") 0).HostPort}}' b220fabf815a20020
当然使用最笨的方法:使用awk切也可以
[root@localhost ~]# docker inspect b2d |grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.5",
"IPAddress": "172.17.0.5",
[root@localhost ~]# docker inspect b2d |grep IPAddress | awk -F '"' 'NR==2{print $4}'
172.17.0.5
[root@localhost ~]#