帮助命令
docker version # 显示docker的版本信息docker info # 显示docker的系统信息,包括镜像和容器的数量docker 命令 --help # 帮助命令
帮助文档地址 https://docs.docker.com/reference/
镜像命令
docker image # 查看本地主机上的镜像
liuyang@docker:~$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest bf756fb1ae65 8 months ago 13.3kB# 解释REPOSITORY 镜像的仓库源TAG 镜像的标签IMAGE ID 镜像的IDCREATED 镜像的创建时间SIZE 镜像的大小# 可选项-a, --all # 显示所有的镜像-f, --filter filter Filter output based on conditions provided-q, --quiet #只显示ID
docker search 搜索镜像
liuyang@docker:~$ docker search mysqlNAME DESCRIPTION STARS OFFICIALmysql MySQL is a widely used, open-source relation… 9946 [OK]mariadb MariaDB is a community-developed fork of MyS… 3639 [OK]# 可选项 通过搜索来过滤--filter=STARS=3000 # 搜索出来的镜像大于3000的liuyang@docker:~$ docker search mysql --filter=STARS=3000NAME DESCRIPTION STARS OFFICIALmysql MySQL is a widely used, open-source relation… 9946 [OK]mariadb MariaDB is a community-developed fork of MyS… 3639 [OK]
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]liuyang@docker:~$ docker pull mysqlUsing default tag: latest # 如果不写tag 默认就是latestlatest: Pulling from library/mysqld121f8d1c412: Pull complete # 分层下载, docker imaged的核心 联合文件系统f3cebc0b4691: Pull complete1862755a0b37: Pull complete489b44f3dbb4: Pull complete690874f836db: Pull completebaa8be383ffb: Pull complete55356608b4ac: Pull completedd35ceccb6eb: Pull complete429b35712b19: Pull complete162d8291095c: Pull complete5e500ef7181b: Pull completeaf7528e958b6: Pull completeDigest: sha256:e1bfe11693ed2052cb3b4e5fa356c65381129e87e38551c6cd6ec532ebe0e808Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest # 真是地址# 等价于它docker pull mysqldocker pul docker.io/library/mysql:latest# 指定版本下载liuyang@docker:~$ docker pull mysql:5.75.7: Pulling from library/mysqld121f8d1c412: Already existsf3cebc0b4691: Already exists1862755a0b37: Already exists489b44f3dbb4: Already exists690874f836db: Already existsbaa8be383ffb: Already exists55356608b4ac: Already exists277d8f888368: Pull complete21f2da6feb67: Pull complete2c98f818bcb9: Pull complete031b0a770162: Pull completeDigest: sha256:14fd47ec8724954b63d1a236d2299b8da25c9bbb8eacc739bb88038d82da4919Status: Downloaded newer image for mysql:5.7docker.io/library/mysql:5.7

docker rmi 删除镜像
liuyang@docker:~$ docker rmi -f 镜像id # 删除指定镜像idliuyang@docker:~$ docker rmi -f 镜像id 镜像idid 镜像idid # 删除多个镜像liuyang@docker:~$ docker rmi -f $(docker images -aq) # 删除全部的镜像
容器命令
说明:我们有了镜像才可以创建容器,linux ,下载一个centos
liuyang@docker:~$ docker pull centos
新建容器并启动
docker run [可选参数] image#参数说明--name="Name" 容器名称 区分容器-d 后台方式运行-i t 使用交互方式运行-p 指定容器的端口 -p:8080-p ip:主机端口-p 主机端口:容器端口-p 容器端口# 测试 启动并进入容器liuyang@docker:~$ docker run -it centos /bin/bash[root@6ec83c585650 /]# ls # 查看centos容器bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
列出所有运行的容器
# docker ps 命令# 列出正在运行的容器-a # 列出正在运行的容器 + 带出历史运行过的容器-n=? # 显示最近创建的容器-q # 只显示容器的编号liuyang@docker:~$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESliuyang@docker:~$ docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6ec83c585650 centos "/bin/bash" 4 minutes ago Exited (0) 55 seconds ago silly_cray9e367c52d889 bf756fb1ae65 "/hello" 2 hours ago Exited (0) 2 hours ago vibrant_bohr
退出容器
exit # 直接容器停止并推出control + P + Q # 容器不停止退出
删除容器
docker rm 容器id # 删除指定的容器 不能删除正在运行的容器 强制删除 -fdocker rm -f $(docker ps -aq) # 删除所有的容器docker ps -a -q|xargs docker rm # 删除所有的容器
启动和停止容器的操作
docker start 容器id # 启动容器docker restart 容器id # 重启容器docker stop 容器id # 停止当前正在运行的容器docker kill 容器id #强制停止容器
常用其他命令
后台启动
# 命令 docker run -d 镜像名liuyang@docker:~$ docker run -d centosaa65f44fb6ae167dc2118c90992925c9ab4679c670722c59d6e6260efa8bb297# 问题 docker ps 发现centos 停止了# 常见的坑 docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
查看日志
docker logs -tf --tail num 容器# 自己编写一段shell脚本liuyang@docker:~$ docker run -d centos /bin/sh -c "while true;do echo liuyang;sleep 1; done"liuyang@docker:~$ docker psCONTAINER ID IMAGE2d4591ca21ca centos# 显示日志-tf # 显示全部日志--tail num # 要显示的日志条数liuyang@docker:~$ docker logs -tf --tail 10 2d4591ca21ca
查看容器中的进程信息
# 命令 docker top 容器idliuyang@docker:~$ docker top 2d4591ca21caUID PID PPID C STIMEroot 32130 32110 0 09:34root 32711 32130 0 09:42
查看镜像元数据
# 命令docker inspect 容器id# 测试liuyang@docker:~$ docker inspect 2d4591ca21ca[{"Id": "2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867","Created": "2020-09-11T01:34:29.093052792Z","Path": "/bin/sh","Args": ["-c","while true;do echo liuyang;sleep 1; done"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 32130,"ExitCode": 0,"Error": "","StartedAt": "2020-09-11T01:34:29.681576274Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566","ResolvConfPath": "/var/lib/docker/containers/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867/resolv.conf","HostnamePath": "/var/lib/docker/containers/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867/hostname","HostsPath": "/var/lib/docker/containers/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867/hosts","LogPath": "/var/lib/docker/containers/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867-json.log","Name": "/tender_ride","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": {},"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/778aebbe0f104c95a73c066d8aab311301321c65b1747222a1dfd74500bfb789-init/diff:/var/lib/docker/overlay2/f7754c8b6edffb9a6145b3501a3e226febfc70ebf340cb766c340e11146586dd/diff","MergedDir": "/var/lib/docker/overlay2/778aebbe0f104c95a73c066d8aab311301321c65b1747222a1dfd74500bfb789/merged","UpperDir": "/var/lib/docker/overlay2/778aebbe0f104c95a73c066d8aab311301321c65b1747222a1dfd74500bfb789/diff","WorkDir": "/var/lib/docker/overlay2/778aebbe0f104c95a73c066d8aab311301321c65b1747222a1dfd74500bfb789/work"},"Name": "overlay2"},"Mounts": [],"Config": {"Hostname": "2d4591ca21ca","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/bin/sh","-c","while true;do echo liuyang;sleep 1; done"],"Image": "centos","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date": "20200809","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": "379a4a3804fad09d7a9bbf777989a0a4f5907f47e6119598159b6540a77f7cd0","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/379a4a3804fa","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "dd044b9ffa1396cad51d2f4421a1c571ae23b57dff8bd9f8cb9dc388522f3594","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": "b8c6e4c7efe651ae8da665a76cd8c32824c001447019b97207efbe54ce6f6d9d","EndpointID": "dd044b9ffa1396cad51d2f4421a1c571ae23b57dff8bd9f8cb9dc388522f3594","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/bash# 测试liuyang@docker:~$ docker exec -it 2d4591ca21ca /bin/bachOCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"/bin/bach\": stat /bin/bach: no such file or directory": unknownliuyang@docker:~$ docker exec -it 2d4591ca21ca /bin/bash[root@2d4591ca21ca /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@2d4591ca21ca /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 01:34 ? 00:00:00 /bin/sh -c while true;do echo liuyang;sleep 1; doneroot 1134 0 0 01:53 pts/0 00:00:00 /bin/bashroot 1177 1 0 01:53 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1root 1178 1134 0 01:53 pts/0 00:00:00 ps -ef# 方式二docker attach 容器id# 测试liuyang@docker:~$ docker attach 2d4591ca21ca正在执行当前的代码...# docker exec # 进入容器后开启一个新的终端 ,可以在里面操作(常用)# docker attach # 进入容器正在执行的终端,不会启动新的进程!
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的地主机路径# 测试# 查看当前主机目录下liuyang@docker:~/文档$ ls# 启动并进入centos容器内部liuyang@docker:~/文档$ docker run -it centos /bin/bash# 在容器内部新建一个文件[root@80f203be8dd9 home]#touch demo.php[root@80f203be8dd9 home]# lsdemo.php[root@80f203be8dd9 home]# exitexitliuyang@docker:~/文档$ lsliuyang@docker:~/文档$ docker ps -aCONTAINER ID80f203be8dd9# 将文件拷贝到主机上liuyang@docker:~/文档$ docker cp 80f203be8dd9:/home/demo.php ~/文档liuyang@docker:~/文档$ lsdemo.php# 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现
可视化
portainer (先用这个)
Docker图形化界面管理工具! 提供一个后台面板供我们操 作!
docker run -d -p 8088:9000 \--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
