1)运行容器流程
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载或指定私有镜像仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止,或者容器持久运行
2)容器常规命令

2.1)容器运行(docker run)
如何让容器长期运行,因为容器的生命周期依赖于启动时执行的命令,只要该命令不结束,容器就不会退出
参数 -d 以后台方式启动容器
-i 交互模式-t 终端-d 后台运行-p 端口映射-v 源地址(宿主机): 目标地址(容器)--name 指定容器的名字-h 指定容器的主机名--restart=always 每次重启服务,容器跟着重启
#启动容器docker run -itd --name nginx-web -p 82:80 -v ~/htdoc:/usr/share/apache2/htdocs httpd
2.2)容器查看、停止、重启
#容器查看[root@blog-xhaihua htdocs]# docker ps|grep nginx-web50b8c2c60025 httpd "httpd-foreground" 3 minutes ago Up 3 minutes 0.0.0.0:82->80/tcp nginx-web#停止[root@blog-xhaihua htdocs]# docker stop nginx-webnginx-web#启动[root@blog-xhaihua htdocs]# docker start nginx-webnginx-web#重启[root@blog-xhaihua htdocs]# docker restart nginx-webnginx-we
2.3)容器信息查看
[root@blog-xhaihua htdocs]# docker inspect nginx-web[{"Id": "50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec","Created": "2021-03-05T07:21:49.747776475Z","Path": "httpd-foreground","Args": [],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 24839,"ExitCode": 0,"Error": "","StartedAt": "2021-03-05T07:25:31.299739589Z","FinishedAt": "2021-03-05T07:25:30.928336873Z"},"Image": "sha256:683a7aad17d3baed344799b397c55a9ccbc3ddabf0d077862739585ee76d4cb3","ResolvConfPath": "/data/docker/containers/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec/resolv.conf","HostnamePath": "/data/docker/containers/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec/hostname","HostsPath": "/data/docker/containers/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec/hosts","LogPath": "/data/docker/containers/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec-json.log","Name": "/nginx-web","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": ["/root/htdocs:/usr/share/apache2/htdocs"],"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "default","PortBindings": {"80/tcp": [{"HostIp": "","HostPort": "82"}]},"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": "/data/docker/overlay2/e3b71a034ac3258b33471f6e4d61f095aa00f7246a85c9109fc2eca64984909d-init/diff:/data/docker/overlay2/348bd2dcb601598d2be8de1e14fa4d6539379a465eb29768f7d0828a7c1406e6/diff:/data/docker/overlay2/87edc866fe5bc72b0a25ce7bba0334fc2bf6485567abcea43055f2dbae383461/diff:/data/docker/overlay2/18e324e0c33c3049f16503ac9efce87134f39941a5a81b5dd260ef3231599810/diff:/data/docker/overlay2/717b8f179a9e86e86f15779dcd447e1c67c9adfd43409062639e1a0f96fc900a/diff:/data/docker/overlay2/d26b86158e31c09cf1dfc1c73ac8983a95d2e01914fb12ab1b16cf283d3a2035/diff","MergedDir": "/data/docker/overlay2/e3b71a034ac3258b33471f6e4d61f095aa00f7246a85c9109fc2eca64984909d/merged","UpperDir": "/data/docker/overlay2/e3b71a034ac3258b33471f6e4d61f095aa00f7246a85c9109fc2eca64984909d/diff","WorkDir": "/data/docker/overlay2/e3b71a034ac3258b33471f6e4d61f095aa00f7246a85c9109fc2eca64984909d/work"},"Name": "overlay2"},"Mounts": [{"Type": "bind","Source": "/root/htdocs","Destination": "/usr/share/apache2/htdocs","Mode": "","RW": true,"Propagation": "rprivate"}],"Config": {"Hostname": "50b8c2c60025","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"80/tcp": {}},"Tty": true,"OpenStdin": true,"StdinOnce": false,"Env": ["PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","HTTPD_PREFIX=/usr/local/apache2","HTTPD_VERSION=2.4.46","HTTPD_SHA256=740eddf6e1c641992b22359cabc66e6325868c3c5e2e3f98faf349b61ecf41ea","HTTPD_PATCHES="],"Cmd": ["httpd-foreground"],"Image": "httpd","Volumes": null,"WorkingDir": "/usr/local/apache2","Entrypoint": null,"OnBuild": null,"Labels": {},"StopSignal": "SIGWINCH"},"NetworkSettings": {"Bridge": "","SandboxID": "315c7a96492e9ed2764b0fc7e315eabb2d1e5df8fab008bea0befc1370f21b45","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {"80/tcp": [{"HostIp": "0.0.0.0","HostPort": "82"}]},"SandboxKey": "/var/run/docker/netns/315c7a96492e","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "c885e1c23fe91b7756b398a8759eceb1acdaa1d6925e767c59d86faa657afb0e","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": "b9cf8270fe55ca0335b3c6c3c278d1bd12a71f1494314cbad16c1db995ccb6e7","EndpointID": "c885e1c23fe91b7756b398a8759eceb1acdaa1d6925e767c59d86faa657afb0e","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}}}}]
2.4)容器删除
#删除终止状态的容器docker rm [CONTAINER ID] | 容器名#删除所有处于终止状态的容器docker container prune#删除未被使用的数据卷docker volume prune#删除运行中的容器docker rm -f [CONTAINER ID]| 容器名#批量停止所有的容器docker stop $(docker ps -a -q)#批量删除所有的容器docker rm $(docker ps -a -q)
3) 进入容器的方法
docker attach (不常用)
通过docker attach可以attach到容器启动命令的终端,比如查看日志
docker exec (常用) ```shell [root@blog-xhaihua htdocs]# docker exec -it nginx-web bash root@6561766f69a3:/usr/local/apache2#
格式
docker exec -it 容器ID(前5位)| 容器名 bash | sh
<a name="SWQbO"></a>### 4)容器的导出和导入```shell#这样将导出容器快照到本地文件docker export [CONTAINER ID] | 容器名 -o [tar file]#案例[root@blog-xhaihua htdocs]# docker export nginx-web -o nginx-web.tar.gz#从容器快照文件中再导入为镜像cat [tar file] | docker import - [name:tag]#案例:cat nginx-web.tar.gz | docker import -
5)Docker的web端管理平台
Portainer 和 Shipyard
- Shipyard (停止维护)
Shipyard是在Docker Swarm的基础上,管理Docker资源,包括容器,镜像,注册表等
- Portainer
