03 容器操作
容器是由镜像实例化而来的
一般操作
- 列出所有的容器
docker ps -a
- 启动容器
docker run []
# 参数说明
--name 容器名字
-d 后台运行
-it 交互式运行,启动并进入容器
-p (小p)指定容器端口 8080:8081
-p 宿主机端口:容器端口
-P (大P)
-n. 显示最近创建的容器个数-n=1
- 后台启动
docker run -d --name dockername docker.io/lynntian/alpine:laster /bin/sleep 900
- 交互式启动
docker run -it docker.io/lynntian/alpine:laster /bin/sh
- 一次性容器,运行完删除
停止后会把容器删除
docker run -d -- name 容器name --rm 镜像id或名字
- 进入
up
状态的容器中
docker exec -it 容器名字或id /bin/sh
- 退出容器
exit # 直接退出容器并停止
ctrl + p + q # 容器不停止退出
- 停止容器
docker stop 容器名字或id
- 启动容器
docker start 容器名字或id
- 重启容器
docker restart 容器名字或id
- 强制停止容器
docker kill id
- 删除容器
docker rm id # 不能删除运行的容器docker rm. -f id # 强制删除容器docker rm -f $(docker ps -aq) # 删除所有的容器docker ps -qa | xargs docker rm # 删除所有的容器
eg:
docker run -d -p 3344:80 -v/root/html/:/usr/share/nginx/html/ --name nginx nginx
高级用法
- 提交容器
docker commit -m="描述信息" -a="作者" 容器id new_image_name:tagdocker commit -p image_id new_image_name
- 打包镜像
docker save docker_image_id > 文件名
- 把打包的镜像转为镜像
docker load < 文件
- 查看镜像日志
docker logs -tf id # 显示所有的日志docker logs -tf --tail 10 # 显示10条日志
- 查看docker的基本信息(cpu、内存、磁盘)
docker stats
- 查看容器中的进程
docker top id
- docker的基本信息
docker inspect id
[ { "Id": "3de4477a4e21f93e0d33038ba0633c4c554f1c31fc4838a6ae61f771b645e187", "Created": "2021-09-26T07:20:36.034147069Z", "Path": "/bin/sh", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 6750, "ExitCode": 0, "Error": "", "StartedAt": "2021-09-26T07:23:37.155468742Z", "FinishedAt": "2021-09-26T07:23:20.130388946Z" }, "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6", "ResolvConfPath": "/var/lib/docker/containers/3de4477a4e21f93e0d33038ba0633c4c554f1c31fc4838a6ae61f771b645e187/resolv.conf", "HostnamePath": "/var/lib/docker/containers/3de4477a4e21f93e0d33038ba0633c4c554f1c31fc4838a6ae61f771b645e187/hostname", "HostsPath": "/var/lib/docker/containers/3de4477a4e21f93e0d33038ba0633c4c554f1c31fc4838a6ae61f771b645e187/hosts", "LogPath": "/var/lib/docker/containers/3de4477a4e21f93e0d33038ba0633c4c554f1c31fc4838a6ae61f771b645e187/3de4477a4e21f93e0d33038ba0633c4c554f1c31fc4838a6ae61f771b645e187-json.log", "Name": "/centos", "RestartCount": 0, "Driver": "overlay2", "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, "CgroupnsMode": "host", "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/bf1cb1a7b0d7e9d62e89676fef1ad0da5fd2d9270b357643cbc407697db5e47a-init/diff:/var/lib/docker/overlay2/4159d523996155b455f13d688ad9b49f6c343d854e3053f5eb51f40cf1f3e08f/diff", "MergedDir": "/var/lib/docker/overlay2/bf1cb1a7b0d7e9d62e89676fef1ad0da5fd2d9270b357643cbc407697db5e47a/merged", "UpperDir": "/var/lib/docker/overlay2/bf1cb1a7b0d7e9d62e89676fef1ad0da5fd2d9270b357643cbc407697db5e47a/diff", "WorkDir": "/var/lib/docker/overlay2/bf1cb1a7b0d7e9d62e89676fef1ad0da5fd2d9270b357643cbc407697db5e47a/work" }, "Name": "overlay2" }, "Mounts": [], "Config": { "Hostname": "3de4477a4e21", "Domainname": "", "User": "", "AttachStdin": true, "AttachStdout": true, "AttachStderr": true, "Tty": true, "OpenStdin": true, "StdinOnce": true, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh" ], "Image": "centos", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": { "org.label-schema.build-date": "20210915", "org.label-schema.license": "GPLv2", "org.label-schema.name": "CentOS Base Image", "org.label-schema.schema-version": "1.0", "org.label-schema.vendor": "CentOS" } }, "NetworkSettings": { "Bridge": "", "SandboxID": "110bbdd5d9591493c8a8b803996e3abca05b072349b5e3bd0281e3a2db1d1181", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": {}, "SandboxKey": "/var/run/docker/netns/110bbdd5d959", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "1b599e8386427783fdba21eb57fc540e40b6f1bb8382bafb8414b1c5fb91b35f", "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": "8972b312faca57dc51ae7ac8e018310d22fcc0cf559cad95c5aa5b8157b02467", "EndpointID": "1b599e8386427783fdba21eb57fc540e40b6f1bb8382bafb8414b1c5fb91b35f", "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 } } } }]
- 进入运行的容器
docker exec -it 容器id /bin/sh # 进入容器后开启一个新的终端,可以在里边操作docker attach -it 容器id /bin/sh # 进入容器正在执行的终端,不会启动新的
- 从容器拷贝文件到宿主机
docker cp 容器id:容器内的文件路径 宿主机的路径
- 映射端口
把容器内的80端口映射到主机的(容器外的)81上
-p
docker run -d --name nginx_service -p81:80 uimage_id
- 挂载目录
-v
把宿主机的目录挂载到容器的指定目录
宿主机的目录会和容器中的目录实时同步
docker -d --rm --name mynginx -p82:80 -v/root/index:/usr/share/nginx/html imgae_id
- 查看所有的挂载信息
docker volume ls
- 查看容器的基本信息
docker inspect docker_id
- 添加环境变量
docker run -d --rm -e A_PATH=VALUE --name e-docker image_id
例子:
docker run -it -e A_PATH=6dbb9cc54074 docker.io/library/alpine:latest printenv
04 容器的生命周期
- 1 检查本地是否存在镜像,如果不存在,从远端仓库检索并pull
- 2 利用镜像启动容器
- 3 分配一个文件系统,并在只读的镜像层外,挂载一层可读可写层
- 4 从宿主机配置的网桥接口种桥接一个虚拟接口到容器
- 5 从地址池配置一个ip地址给容器
- 6 执行用户指定的指令
- 7 执行完后容器终止
05 portainer—docker的可视化工具
一般不用,自己玩玩
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
Web:
http://ip:9000/