1.帮助命令
docker version #显示docker的版本信息。docker info #显示docker的系统信息,包括镜像和容器的数量docker 命令 --help #帮助命令
帮助文档的地址:https://docs.docker.com/engine/reference/commandline/build/
2.镜像命令
[root@localhost /]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest bf756fb1ae65 5 months ago 13.3kB#解释REPOSITORY 镜像的仓库源TAG 镜像标签IMAGE ID 镜像idCREATED 镜像的创建时间SIZE 镜像的大小#可选项Options:-a, --all # 列出所有镜像-q, --quiet # 只显示镜像id
docker search 搜索镜像
[root@localhost /]# docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 9604 [OK]mariadb MariaDB is a community-developed fork of MyS… 3490 [OK]#可选项,通过收藏来过滤--filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的[root@localhost /]# docker search mysql --filter=STARS=3000NAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 9604 [OK]mariadb MariaDB is a community-developed fork of MyS… 3490 [OK]
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag][root@localhost /]# docker pull mysqlUsing default tag: latest # 如果不写 tag,默认就是latestlatest: Pulling from library/mysql8559a31e96f4: Pull complete # 分层下载,docker image的核心 联合文件系统d51ce1c2e575: Pull completec2344adc4858: Pull completefcf3ceff18fc: Pull complete16da0c38dc5b: Pull completeb905d1797e97: Pull complete4b50d1c6b05c: Pull completec75914a65ca2: Pull complete1ae8042bdd09: Pull complete453ac13c00a3: Pull complete9e680cd72f08: Pull completea6b5dc864b6c: Pull completeDigest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6 # 签名Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest # 真实地址docker pull mysql 等价于: docker pull docker.io/library/mysql:latest# 指定版本下载[root@localhost /]# docker pull mysql:5.75.7: Pulling from library/mysql8559a31e96f4: Already exists # 联合文件系统的好处:上面下载过的MySQL与5.7版本的MySQL有相同的文件时不需要重复下载d51ce1c2e575: Already existsc2344adc4858: Already existsfcf3ceff18fc: Already exists16da0c38dc5b: Already existsb905d1797e97: Already exists4b50d1c6b05c: Already existsd85174a87144: Pull completea4ad33703fa8: Pull completef7a5433ce20d: Pull complete3dcd2a278b4a: Pull completeDigest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854Status: Downloaded newer image for mysql:5.7docker.io/library/mysql:5.7
docker rmi 删除镜像
[root@localhost /]# docker rmi -f 镜像id #删除指定镜像[root@localhost /]# docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像[root@localhost /]# docker rmi -f $(docker images -aq) #删除全部镜像
3.容器命令
说明:有了镜像才可以创建容器,linux,下载一个centos镜像来学习
docker pull centos
新建容器并启动
docker run [可选参数] image# 参数说明--name="Name" 容器名字 tomcat01 tomcat02 ,用来区分容器-d 后台方式运行-it 使用交互方式运行,进入容器查看内容-p 指定容器的端口 -p 8080:80-p ip:主机(即宿主机)端口:容器端口-p 主机端口:容器端口 #这种方式常用-p 容器端口容器端口P-P 随机指定端口(大写P)# 测试,启动并进入容器[root@localhost /]# docker run -it centos /bin/bash[root@8b4c74381205 /]# ls #查看容器内的centos,基础版本,很多命令都是不完善的!bin etc lib lost+found mnt proc run srv tmp vardev home lib64 media opt root sbin sys usr# 从容器中退回主机[root@8b4c74381205 /]# exitexit[root@localhost /]# ls123 bin dev home lib64 mnt proc run srv tmp var222 boot etc lib media opt root sbin sys usr
列出所有运行的容器
# docker ps 命令(不加) # 列出当前正在运行的容器-a # 列出当前正在运行的容器 + 带出历史运行过的容器-n=? # 显示最近创建的容器-q # 只显示当前容器的编号[root@localhost /]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@localhost /]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8b4c74381205 centos "/bin/bash" 4 minutes ago Exited (0) About a minute ago epic_wilsonfb87667bbc19 bf756fb1ae65 "/hello" 2 hours ago Exited (0) 2 hours ago awesome_banach[root@localhost /]# docker ps -a -n=1CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8b4c74381205 centos "/bin/bash" 9 minutes ago Exited (0) 6 minutes ago epic_wilson[root@localhost /]# docker ps -aq8b4c74381205fb87667bbc19
退出容器
exit # 直接退出容器Ctrl + p + q # 容器不停止退出
删除容器
docker rm 容器id # 删除指定容器,不能删除正在运行的容器,如果要强制删除 rm -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 # 强制停止当前正在运行的容器
4.常用其他命令
后台启动命令
# 命令 docker run -d 镜像名[root@localhost /]# docker run -d centose9d60f206fa19963203db6c42c2f83c5120eb90eeee2b7ba9fdc4589370fd6b6[root@localhost /]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES# 问题docker ps,发现 centos 停止了# 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs -f -t --tail 数字 容器id# 显示日志-tf # 显示日志--tail # 要显示的日志条数[root@localhost /]# docker logs -tf --tail 10 ce989f90023d
查看容器中进程信息
# 命令 docker top 容器id[root@localhost /]# docker top ce989f90023dUID PID PPID C STIME TTY TIMEroot 12249 12232 0 22:44 pts/0 00:00:00
查看镜像的元数据
# 命令docker inspect 容器id# 测试[root@localhost /]# docker inspect ce989f90023d[{"Id": "ce989f90023dedc0b3f39c057b91f5c0b17180b3aef7aea0df8c93731e724244","Created": "2020-06-10T14:44:45.025360147Z","Path": "/bin/bash","Args": [],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 12249,"ExitCode": 0,"Error": "","StartedAt": "2020-06-10T14:44:45.770227584Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee","ResolvConfPath": "/var/lib/docker/containers/ce989f90023dedc0b3f39c057b91f5c0b17180b3aef7aea0df8c93731e724244/resolv.conf","HostnamePath": "/var/lib/docker/containers/ce989f90023dedc0b3f39c057b91f5c0b17180b3aef7aea0df8c93731e724244/hostname","HostsPath": "/var/lib/docker/containers/ce989f90023dedc0b3f39c057b91f5c0b17180b3aef7aea0df8c93731e724244/hosts","LogPath": "/var/lib/docker/containers/ce989f90023dedc0b3f39c057b91f5c0b17180b3aef7aea0df8c93731e724244/ce989f90023dedc0b3f39c057b91f5c0b17180b3aef7aea0df8c93731e724244-json.log","Name": "/nifty_johnson","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,"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/bce8b2400427de29dd406d54ec08b3c07dc95530e80d37977a156ca971b37641-init/diff:/var/lib/docker/overlay2/d4cd3bedb1e7340e62bb292c1e0d5ae37b1d1689ffc1640da67b2a8325facc21/diff","MergedDir": "/var/lib/docker/overlay2/bce8b2400427de29dd406d54ec08b3c07dc95530e80d37977a156ca971b37641/merged","UpperDir": "/var/lib/docker/overlay2/bce8b2400427de29dd406d54ec08b3c07dc95530e80d37977a156ca971b37641/diff","WorkDir": "/var/lib/docker/overlay2/bce8b2400427de29dd406d54ec08b3c07dc95530e80d37977a156ca971b37641/work"},"Name": "overlay2"},"Mounts": [],"Config": {"Hostname": "ce989f90023d","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/bash"],"Image": "centos","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date": "20200114","org.label-schema.license": "GPLv2","org.label-schema.name": "CentOS Base Image","org.label-schema.schema-version": "1.0","org.label-schema.vendor": "CentOS","org.opencontainers.image.created": "2020-01-14 00:00:00-08:00","org.opencontainers.image.licenses": "GPL-2.0-only","org.opencontainers.image.title": "CentOS Base Image","org.opencontainers.image.vendor": "CentOS"}},"NetworkSettings": {"Bridge": "","SandboxID": "74d140bbc60432c5fdce865fa48f78c1138923dd292e708a25c4de17de812d56","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/74d140bbc604","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "3580dd1064b07f434c61e316f14cb7d7b53a3d6d7c9c0f77eb6570f1781623bc","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": "58fd9703e96d12128c30f244be3205e3fe31fc7d1fb7fffdddba72d981e782f4","EndpointID": "3580dd1064b07f434c61e316f14cb7d7b53a3d6d7c9c0f77eb6570f1781623bc","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}}}}]
进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置# 命令docker exec -it 容器id bashShell# 测试[root@localhost /]# docker exec -it ce989f90023d /bin/bash[root@ce989f90023d /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@ce989f90023d /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 14:44 pts/0 00:00:00 /bin/bashroot 15 0 0 15:19 pts/1 00:00:00 /bin/bashroot 29 15 0 15:20 pts/1 00:00:00 ps -ef# 方式二docker attach 容器id# 测试[root@localhost /]# docker attach ce989f90023d正在执行当前的代码...# docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)# docker attach # 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝到主机上
docker cp 容器id:容器内目标文件路径 目的主机路径# 查看当前主机目录[root@localhost home]# lsztx# 进入docker容器内部[root@localhost home]# docker attach ce989f90023d[root@ce989f90023d /]# cd /home/[root@ce989f90023d home]# ls# 在容器内新建一个文件[root@ce989f90023d home]# touch test.java[root@ce989f90023d home]# exitexit[root@localhost home]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESce989f90023d centos "/bin/bash" 44 minutes ago Exited (0) 46 seconds ago nifty_johnson# 将docker内文件拷贝到主机上[root@localhost home]# docker cp ce989f90023d:/home/test.java /home[root@localhost home]# lstest.java ztx[root@localhost home]## 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现自动同步
学习方式:将所有笔记敲一遍,自己记录笔记!
