帮助命令
docker version #查看docker版本信息docker info #查看docker系统级信息docker [命令] --help #查看命令说明
帮助文档地址:https://docs.docker.com/reference/
镜像命令
docker images查看本地主机所有镜像
[root@localhost /]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest bf756fb1ae65 8 months ago 13.3kB#解释REPOSITORY 镜像仓库源TAG 镜像标签IMAGE ID 镜像idCREATED 镜像创建时间SIZE 镜像大小#可选项-a --all #列出所有镜像-q --quiet #只显示镜像id
docker search 镜像搜索
[root@localhost /]# docker search mysqlmysql MySQL is a widely used, open-source relation… 9958 [OK]mariadb MariaDB is a community-developed fork of MyS… 3642 [OK]mysql/mysql-server Optimized MySQL Server Docker images. Create… 725 [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… 9958 [OK]mariadb MariaDB is a community-developed fork of MyS… 3642 [OK]
docker pull 下载镜像

#指定版本下载docker pull mysql:5.7
docker rmi删除镜像
docker rmi 镜像id #删除指定镜像docker rmi 镜像id 镜像id 镜像id #删除多个镜像docker rmi -f $(docker images -aq) #删除全部镜像
容器命令
说明:我们有了镜像才可以创建容器,linux下载一个centos来测试学习
docker pull centos
docker run 新建容器启动
docker run [可选参数] [镜像名]#参数说明--name=“Name” 容器名字 tomcat01 tomcat02,用来区分容器-d-it-p-p ip:主机端口:容器端口-p 主机端口:容器端口(常用)-p 容器端口-p 随机指定端口#测试,启动并进入容器#docker run -it centos 的意思是,为centos这个镜像创建一个容器#-it就等于 -i和-t,这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式(也就是直接进入到容器里面)#后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash[root@localhost /]# docker run -it centos /bin/bash[root@481cfb6a514b /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var#退出容器到主机[root@481cfb6a514b /]# exitexit
docker ps 列出所有运行的容器
#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 NAMESb15b3c7d483d centos "/bin/bash" 5 minutes ago Exited (0) 8 seconds ago infallible_ardinghelli481cfb6a514b centos "/bin/bash" 2 hours ago Exited (0) 5 minutes ago exciting_sammet9e0de3487965 bf756fb1ae65 "/hello" 4 hours ago Exited (0) 4 hours ago suspicious_robinson
exit 退出容器
exit #直接退出容器Ctrl + p + Q #容器不停止退出
删除容器
docker rm 容器id #删除指定容器,不能删除正在执行的容器,如果强制删除rm -fdocker rm -f $(docker images -aq) #强制删除所有容器docker ps -a -q|xargs docker rm #强制删除所有容器
启动和停止容器
docker start 容器id #开启容器docker restart 容器id #重启容器docker stop 容器id #停止容器docker kill 容器id #强制停止容器
常用其他命令
后台启动容器
#命令docker run -d [镜像名]docker run -d centos#问题docker ps 后发现开启的centos容器停止了#常见的坑:docker容器使用后台运行,就有必要有一个前台进程,docker发现没有应用,就自动停止了(容器没有对外提供服务)
查看容器内部进程信息
#docker top 容器id[root@localhost /]# docker top 74b98e2b58ceUID PID PPID C STIME TTY TIME CMDroot 11505 11489 0 21:55 ? 00:00:00 /bin/bash
查看镜像原数据
#docker inspect 容器id[root@localhost /]# docker inspect 74b98e2b58ce[{"Id": "74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379","Created": "2020-09-13T13:55:55.133386006Z","Path": "/bin/bash","Args": [],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 11505,"ExitCode": 0,"Error": "","StartedAt": "2020-09-13T13:55:57.25370239Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566","ResolvConfPath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/resolv.conf","HostnamePath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/hostname","HostsPath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/hosts","LogPath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379-json.log","Name": "/funny_keldysh","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/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410-init/diff:/var/lib/docker/overlay2/295a3faa7fd7ddbf81b948e17667f4bb8be8e805176e2e075969d6f30a84f426/diff","MergedDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410/merged","UpperDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410/diff","WorkDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410/work"},"Name": "overlay2"},"Mounts": [],"Config": {"Hostname": "74b98e2b58ce","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": "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": "b7dea3086c89e9a055d11c4e5dc055d89d95b0cf8fdb37ff385c4ead0f7b92ff","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/b7dea3086c89","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "31a5179e24c36615c74ead28c1adbe229a6f290cfdff6d35444e2d96fa943c2e","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": "08f35ada5fbb99d55506e2866abec35d63c788eb2485f9f0b6a3f569af255d08","EndpointID": "31a5179e24c36615c74ead28c1adbe229a6f290cfdff6d35444e2d96fa943c2e","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#测试[root@localhost /]# docker exec -it 74b98e2b58ce /bin/bash[root@74b98e2b58ce /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@74b98e2b58ce /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 13:55 pts/0 00:00:00 /bin/bashroot 15 0 0 14:05 pts/1 00:00:00 /bin/bashroot 29 15 0 14:05 pts/1 00:00:00 ps -ef#方式二docker attach 容器id################### docker exec与docker attach区别#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)#docker attach #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝到主机
#docker cp 容器id:容器文件路径 主机目录路径[root@74b98e2b58ce home]# touch test.java[root@74b98e2b58ce home]# lstest.java[root@74b98e2b58ce home]# exitexit[root@localhost /]# cd home[root@localhost home]# lsredis-6.0.6.tar.gz wise[root@localhost home]# docker cp 74b98e2b58ce:/home/test.java /home[root@localhost home]# lsredis-6.0.6.tar.gz test.java wise
小结

$ docker --helpattach 将标准输入和标准输出连接到正在运行的容器build 使用dockerfile文件创建镜像commit 从容器的修改项中创建新的镜像cp 将容器的目录或文件复制到本地文件系统中create 创建一个新的镜像diff 检查容器文件系统的修改events 实时输出docker服务器中发生的事件exec 从外部运行容器内部的命令export 将容器的文件系统到处为tat文件包history 显示镜像的历史images 输出镜像列表import 从压缩为tar文件的文件系统中创建镜像info 显示当前系统信息、docker容器与镜像个数、设置信息等inspect 使用JSON格式显示容器与镜像的详细信息kill 向容器发送kill信号关闭容器load 从tar文件或标准输入中加载镜像login 登录docker注册服务器logout 退出docker注册服务器logs 输出容器日志信息pause 暂停容器中正在运行的所有进程port 查看容器的端口是否处于开放状态ps 输出容器列表pull 从注册服务器中拉取一个镜像或仓库push 将镜像推送到docker注册服务器rename 重命名一个容器restart 重启一个或多个容器rm 删除一个或多个容器,若没有指定标签则删除lastest标签。rmi 删除一个或多个镜像,若没有指定标签则删除lastest标签。run 在一个新容器中中运行命令,用于指定镜像创建容器。save 将一个或多个镜像保存为tar包search 从Docker Hub中搜索镜像start 启动一个或多个已经停止的容器stats Display a live stream of container(s) resource usage statisticsstop 停止一个或多个正在运行的容器tag 设置镜像标签top 显示容器中正在运行的进程信息unpause 重启pause命令暂停的容器update 更新一个或多个容器的配置version 显示docker版本信息wait 等待容器终止然后输出退出码
练习
安装nginx
# 1.命令行搜索nginx 推荐在dockerhub搜索https://hub.docker.com/ 可看到详细信息docker search nginx# 2.拉取nginx镜像到本地主机docker pull nginx#启动镜像 docker run -d --name [容器名称] -p [宿主机端口]:[容器内部端口] -d后台运行docker run -d --name nginx01 -p 3344:80#查看启动的镜像docker images#在宿主机上访问nginx服务 也可以在外网测试访问http://192.168.91.130:3344/curl localhost:3344#进入nginx01容器[root@localhost ~]# docker exec -it nginx01 /bin/bashroot@294af4025b29:/# whereis nginxnginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginxroot@294af4025b29:/# cd /etc/nginxroot@294af4025b29:/etc/nginx# lsconf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
接口暴露概念
这样操作,我们每次需要修改nginx配置文件时,都需要进入容器内部。十分麻烦,我们要可以在容器外部提供映射路径,达到在容器修改文件名,容器内部就可以自动修改?-v数据卷!!
docker安装tomcat
#官方推荐使用#这个命令一般用作测试,容器用完即删除tomcat镜像及容器(不建议使用)docker run -it --rm tomcat:9.0#下载启动docker pull tomcat#启动运行docker run -d --name tomcat01 -p 3355:8080 tomcat#测试访问curl localhost:3355#进入tomcat容器docker exec -it tomcat /bin/bash
docker部署es+kibana
#es暴露端口很多#es十分耗费内容#es的数据一般需要放置到安全目录!挂载#--net somenetwork ?网络配置#启动esdocker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2#启动了 linux就很卡 docker stats 查看cpu状态#测试访问es是否成功curl localhost:9200#关闭es,增加内存限制,修改配置文件 -e环境配置参数docker run -d --name elasticsearch03 -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx512m" elasticsearch:7.6.2
使用kibana连接es?网络如何能连接过去

可视化
portainer
docker run -d -p 8088:9000 \--restart=always \-v /var/run/docker.sock:/var/run/docker.sock \--privileged=true portainer/portainer
什么portainer?
Docker图形化界面管理工具!提供一个后台面板供我们操作!!
访问测试:
首次登陆需要注册用户,给admin用户设置密码:

单机版这里选择local即可,选择完毕,点击Connect即可连接到本地docker:
注意:该页面上有提示需要挂载本地 **/var/run/docker.socker**与容器内的**/var/run/docker.socker**连接。因此,在启动时必须指定该挂载文件。
首页:
容器列表:
点击容器列表中的容器名Name,即可查看容器详情:
并且在容器详情页可以使用该容器创建镜像:
镜像列表(在镜像列表可以直接pull一个镜像,可以从远程pull,也可以从私有库中pull。从私有库中pull,需要将私有库的地址提前进行配置,这个在后面会说):
点击镜像ID,即可查看镜像详情信息,在详情信息页面,除了镜像的一些信息外,还可以对该镜像进行打标签tag操作,然后将镜像push到远程仓库或者私有仓库中。
仓库管理页面(该界面可以查看配置的镜像仓库列表,同时可以添加仓库,添加成功之后,即可在image镜像页面进行pull、push操作。):
添加镜像仓库:
