Docker Container基础操作(二)
一、场景描述
1、benjiezhuyao本节主要介绍Docker容器的基本操作命令。
2、操作项主要包含容器的启动、停止、查看容器、删除容器、端口映射、容器日志
二、容器基本操作
1、容器基本命令总览
Docker容器实践描述
1、通过运行一个web应用容器,演示容器基本操作命令使用。
- 下载Python Flask 镜像
- 容器启动、停止、端口映射、容器日志查看、删除容器进行操作
Docker 容器操作
1、下载Python Flask镜像
docker pull training/webapp
2、启动PythonFlask镜像容器
docker run --name myweb -d -P training/webapp python app.py
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
--name: 自定义容器名,不指定时,docker 会自动生成一个名称
3、查看容器
- 使用 docker ps 命令 查看正在运行的所有容器,加上 -a 参数可以查看所有容器(即无论是否运行中)
- CONTAINER ID:容器 di
- IMAGE:镜像名称:Tag
- COMMAND:命令
- CREATES:容器创建的时刻
- STATUS:容器当前的状态 (up 表示运行、Exited 表示停止运行)
- PORTS:镜像程序使用的端口号
- NAMES:容器的名字
3.1端口信息
PORTS 0.0.0.0:32769->5000/tcp Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768上。
通过浏览器访问WEB服务
ip addr show 查一下服务器 ip 地址,然后就能从物理机上访问了
3.2端口设置
通过 -p 参数设置指定的端口
-P:大写的P 在容器暴露的所有端口中随机分配一个端口映射
-p:小写的p 指定映射端口号
分为三种:
1、containePort :指定容器端口,宿主机端口随机映射。
docker run -p 80 -it training/webapp python app.py
2、hostPort:containerPort:指定宿主机和容器端口号
docker run -p 8080:80 -it training/webapp python app.py
3、ip:containerPort :指定宿主机的ip和容器端口号
docker run -p 192.168.6.10:80 -it training/webapp python app.py
4、ip:hostPort:containerPort :指定宿主机ip、端口和容器端口
docker run -p 192.168.6.10:8080:80 -it training/webapp python app.py
#使设置端口映射时 -p是小写
docker run --name web -d -p 8090:5000 training/webapp python app.py
3.3 容器ID或容器名字查看端口映射情况
#dockerID查看端口映射情况
docker port cf7f21285b51
#docker名字查看端口映射情况
docker port web
4、查看容器日志
- docker logs [ID或者名字] 查看日志输出
- docker logs -f myweb
- -f: 让 docker logs 像使用 tail -f 一样来输出容器日志
- -t:显示log日式时间
- --tail 10 :查看指定log从末尾几行日志开始显示
5、查看WEB应用程序容器的进程
我们还可以使用 docker top 来查看容器内部运行的进程
docker top myweb
6、检查 WEB 应用程序
使用 docker inspect 【ID或容器名字】来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
docker inspect myweb
[
{
"Id": "7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604",
"Created": "2019-08-14T07:38:18.109105325Z",
"Path": "python",
"Args": [
"app.py"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 38958,
"ExitCode": 0,
"Error": "",
"StartedAt": "2019-08-14T07:38:20.167989966Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:6fae60ef344644649a39240b94d73b8ba9c67f898ede85cf8e947a887b3e6557",
"ResolvConfPath": "/var/lib/docker/containers/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604/hostname",
"HostsPath": "/var/lib/docker/containers/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604/hosts",
"LogPath": "/var/lib/docker/containers/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604-json.log",
"Name": "/myweb",
"RestartCount": 0,
"Driver": "overlay",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "shareable",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": true,
"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,
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay/959af890591628b5736b239652f7485754910a0eaf0da5c9977a8eb66da7cbb0/root",
"MergedDir": "/var/lib/docker/overlay/2f97ae229730784d705b685ddbb7065f7805c1b4d4f5de57d92d25604e65bbd1/merged",
"UpperDir": "/var/lib/docker/overlay/2f97ae229730784d705b685ddbb7065f7805c1b4d4f5de57d92d25604e65bbd1/upper",
"WorkDir": "/var/lib/docker/overlay/2f97ae229730784d705b685ddbb7065f7805c1b4d4f5de57d92d25604e65bbd1/work"
},
"Name": "overlay"
},
"Mounts": [],
"Config": {
"Hostname": "7df2f250b798",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"5000/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"python",
"app.py"
],
"Image": "training/webapp",
"Volumes": null,
"WorkingDir": "/opt/webapp",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "bf8872a503cced65d65c73c3fa9bbf502cff69ae925aca608e815cfb2ffb866d",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"5000/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "32768"
}
]
},
"SandboxKey": "/var/run/docker/netns/bf8872a503cc",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "e4861c79cb1d883ea09eab1bd82e6a86fd9a0e2630137e54ba548dec07e2b093",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "fe918bb25c8ccdd7f7c47ef94902664ef19ecd67a1402dfe011da51bcfbf6a1f",
"EndpointID": "e4861c79cb1d883ea09eab1bd82e6a86fd9a0e2630137e54ba548dec07e2b093",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
7、停止 WEB 应用容器
停止容器有两种方式:
stop:发送停止运行命令,等待当前进程结束。docker stop 容器ID或容器名字
kill:立即杀死当前进程。docker kill 容器ID或容器名字
docker stop myweb
8、重启正在运行的WEB应用容器
docker restart 来启动
docker restart myweb
9、查询最后一次创建的容器
# 查询最后一次创建的容器
docker ps -l
10、删除容器
#命令来删除不需要的容器
docker rm 容器ID或者容器的名字
删除容器必须是停止的才能删除
三、容器进阶操作
1、守护形式运行容器
守护形式运行容器即后台方式运行容器,有两种实现方式:
- 交互式运行:-i -t
- 后台运行: -d
交互式运行实验
docker run -it --name ubut1 ubuntu /bin/bash
- docker交互式运行会显示容器的ID号,说明已进入到改容器中。
- 退出当前容器,而不结束容器的运行。使用 Ctrl+pq 命令。
- 查看容器在后台运行
- 再次进入容器命令 attach 容器名称或容器ID
docker attach ubut1
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
后台运行实验
- 后台运行 添加一个 -d参数
#执行sh命令循环输出 hello world
docker run --name u2 -d ubuntu /bin/sh -c "while true; do echo hellp world; sleep1;done"
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
2、在运行容器中启动新进程
docker exec 【-d】【-i】【-t】容器名 【Command】【args】
#在u2容器中启动了新的进程 /bin/bash
docker exec -it u2 /bin/bash