Docker安装
# 需要的安装包yum install -y yum-tuils或者yum install -y yum-utils device-mapper-persistent-data lvm2# 设置镜像的仓库yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 更新软件包索引yum makecache fast# 安装docker相关的源 docker-ce 社区 ee 企业版yum install docker-ce docker-ce-cli containerd.io# 启动dockersudo systemctl start docker# 或者su切换到root用户,输入以下命令,如切换失败,可使用sudo passwd root设置密码后,重新suservice docker start# 确定是否启动成功,会显示docker的版本相关信息docker version# 测试docker程序docker run hello-world#docker开机自启动sudo systemctl enable docker
切换镜像
在window子系统中使用如下方式
# su切换到root用户,输入以下命令,如切换失败,可使用sudo passwd root设置密码后,重新suvim /etc/docker/daemon.json# a键进行编辑,将以下内容粘贴进去,ctrl+c 输入:wq 保存{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}# 然后重启服务sudo service docker restart# 查看是否切换成功docker info# 显示如下信息成功-Registry Mirrors:-https://reg-mirror.qiniu.com
镜像配置(下载速度更快)
# 修改docker配置文件vim /etc/docker/daemon.json# 填入以下内容,`i` 进行编辑模式{"registry-mirrors": ["https://5tccbbo5.mirror.aliyuncs.com"]}# ctrl+c 输入 :wq保存#在windows子系统中重启docker的命令sudo service docker restart
阿里云镜像加速器
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors":["https://82m9ar63.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
Docker卸载
sudo apt-get remove docker docker-engine docker.io containerd runc
Docker常用命令
帮助命令
docker version # 显示docker的版本信息docker info # 显示docker的系统信息,包括镜像和容器的数量docker --help # 帮助命令
帮助文档的网址 https://docs.docker.com/reference/
镜像命令
docker images 查看所有本地主机上的镜像
cinz@DESKTOP-S0IK5KG:~$ docker images# 解释REPOSITORY 镜像的仓库源TAG 镜像的标签IMAGE ID 镜像的IDCREATED 镜像的创建时间SIZE 镜像的大小# 命令可选项Options:-a, --all Show all images (default hides intermediate images),列出所有(全部)镜像--digests Show digests-f, --filter filter Filter output based on conditions provided--format string Pretty-print images using a Go template--no-trunc Don't truncate output-q, --quiet Only show image IDs,只显示镜像的id-aq # 显示某id所有的镜像
docker search 搜索镜像
root@DESKTOP-S0IK5KG:/home/cinz# docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 12339 [OK]mariadb MariaDB Server is a high performing open sou… 4746 [OK]mysql/mysql-server Optimized MySQL Server Docker images. Create… 916 [OK]# 可选项,通过搜索来过滤--filter , -f Filter output based on conditions provided--limit 25 Max number of search results#例子root@DESKTOP-S0IK5KG:/home/cinz# docker search mysql -f=stars=3000 # 搜索mysql镜像 过滤stars>=3000的镜像
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]root@DESKTOP-S0IK5KG:/home/cinz# docker pull mysqlUsing default tag: latest # 如果不写 tag,默认就是 latestlatest: Pulling from library/mysqlf003217c5aae: Pull complete # 分层下载,docker image的核心 联合文件系统65d94f01a09f: Pull complete43d78aaa6078: Pull completea0f91ffbdf69: Pull complete59ee9e07e12f: Pull complete04d82978082c: Pull complete70f46ebb971a: Pull completedb6ea71d471d: Pull completec2920c795b25: Pull complete26c3bdf75ff5: Pull complete9ec1f1f78b0e: Pull complete4607fa685ac6: Pull completeDigest: sha256:1c75ba7716c6f73fc106dacedfdcf13f934ea8c161c8b3b3e4618bcd5fbcf195 # 签名Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest # 真实地址# 注意,他们是等价的docker pull mysqldocker pull docker.io/library/mysql:latest# 指定版本下载root@DESKTOP-S0IK5KG:/home/cinz# docker pull mysql:5.7
docker rmi 删除镜像
docker rmi -f 容器id # 删除指定的容器docker rmi -f 容器id 容器id 容器id # 删除多个容器docker rmi -f $(docker images -aq) # 删除全部的容器# 例子root@DESKTOP-S0IK5KG:/home/cinz# docker images # 查看所有镜像REPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 f26e21ddd20d 2 days ago 450MBmysql latest 667ee8fb158e 2 days ago 521MBhello-world latest feb5d9fea6a5 6 months ago 13.3kBroot@DESKTOP-S0IK5KG:/home/cinz# docker rmi -f f26e21ddd20d # 通过镜像ID删除镜像Untagged: mysql:5.7Untagged: mysql@sha256:1a73b6a8f507639a8f91ed01ace28965f4f74bb62a9d9b9e7378d5f07fab79dcDeleted: sha256:f26e21ddd20df245d88410116241f3eef1ec49ce888856c95b85081a7250183dDeleted: sha256:c607cd1716e1e3f52d37b391b9e48207c15b9de687c49539c42b7c7411b8a845Deleted: sha256:18d0239fa88c234ffcde52288f532ac4f69d052964d6605df32fb2e3a197bbf9Deleted: sha256:8d1d80a87e029e4729a56a87e38d54b9ef2ca1af404e13af1feadeba53745529Deleted: sha256:1ac7c17dadb8b439a4034925f290a2f9288068b4192669bed1a614c4057c0c1broot@DESKTOP-S0IK5KG:/home/cinz# docker images # 重新查看所有镜像是否删除成功REPOSITORY TAG IMAGE ID CREATED SIZEmysql latest 667ee8fb158e 2 days ago 521MBhello-world latest feb5d9fea6a5 6 months ago 13.3kB---------------------------------------------------------------root@DESKTOP-S0IK5KG:/home/cinz# docker rmi -f $(docker images -aq) # 查出所有镜像的ID 强制删除图像Untagged: mysql:latestUntagged: mysql@sha256:1c75ba7716c6f73fc106dacedfdcf13f934ea8c161c8b3b3e4618bcd5fbcf195Deleted: sha256:667ee8fb158e365450fc3f09712208fe44e9f1364a9b130fed95f3f4862f8a63Deleted: sha256:daba3b5cd1b725f259d5d59049c7011f6a20f2e7e4782b873cadeedbc1a4f122Deleted: sha256:407a68a397de3c8e4da2ccd388f27c795519414cc9319f674e7b9a492cd8514bDeleted: sha256:6967db79cb8031d7e505dd82c91c6426e84c6ad2098d06c1c090485886bc1c63Deleted: sha256:3dcc0f922d11309b2e4870d5f42c5005f086c9b9c1e128ed2b712b65fa79a5c9Deleted: sha256:ae5d4ab2734d5c27069212b2690dc2c7ac4cd85ee5e122607cb175f7fe908914Deleted: sha256:610784bcaae50e999566928bdec7a4e146fe075d9e487bde0a228c99013ff1d9Deleted: sha256:ccebaff04ea21a9e2df07f9d5af5c47ccd141cd3590f4d45784b6075e7c17dedDeleted: sha256:716203221cd982fc07b80efda0c53a759ecfd69b2d93d4e8adf5fa094351372eDeleted: sha256:fbd4939b3eb58642a07003e076acc3d0d8140797f61139ce4d3645790d9c8b51Deleted: sha256:88f8458b4b2030b229b9757bd4061bce58b65e831a0bba8fa71aa8b3f87db630Deleted: sha256:f2f431ab3ddc1460d300cd86016cc03b7611b56f04bd88370da3d378b3d10aeaDeleted: sha256:c1065d45b8722a4385f2ee26116e1859e8083400ee00d2beff3fdd5225bfeee9Untagged: hello-world:latestUntagged: hello-world@sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412root@DESKTOP-S0IK5KG:/home/cinz# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
Docker 镜像讲解
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包docker镜像,就可以直接跑起来!
如何得到镜像:
- 从远程仓库下载
- 朋友拷贝
- 自己制作 DockerFIle
Docker镜像加载原理
UnionFS(联合文件系统)
- UnionFS(联合文件系统):Union文件系统(UnionFS )是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
- 特性︰一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
Docker镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
- bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
- rootfs (root file system),在bootfs之上。包含的就是典型Linux.系统中的/dev, /proc, /bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu , Centos等等。

平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M ?
对于一个精简的os, rootfs 可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel ,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别,因此不同的发行版可以公用bootfs。
虚拟机是分钟级别,容器是秒级!
容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image# 参数说明--name="Name" 容器名字 tomcat01 tomcat2,用来区分容器-d 后台方式运行-it 使用交互方式进行,进入容器查看内容-p 指定容器的端口 -p 8080:8080-p ip:主机端口:容器端口-p 主机端口:容器端口 (常用)-p 容器端口-p 随机指定端口# 测试 启动并进入容器root@DESKTOP-S0IK5KG:/home/cinz# docker run -it centos /bin/bash[root@0c7e15096bb6 /]#ls #查看容器内的centos,基础版本,很多命令都是不完善的!bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var#从容器中退回主机[root@0c7e15096bb6 /]# exit#查看主机中目录bin boot dev etc home init lib lib32 lib64 libx32 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var
列出所有运行的容器
docker ps 命令 # 列出正在运行的容器-a # 列出当前正在运行的容器+带出历史运行过的容器-n=? # 显示最近创建的容器-q # 只显示容器编号,静默模式root@DESKTOP-S0IK5KG:/# docker psroot@DESKTOP-S0IK5KG:/# docker ps -a
退出容器
exit # 直接容器停止并退出ctrl + P + Q # 容器不停止退出
删除容器
docker rm 容器id # 删除指定的容器(不能删除正在删除的容器,如果要强制删除 rm -f)docker rm -f $(docker ps -aq) # 删除所有的容器docker ps -a | xargs docker rm # 删除所有的容器
启动和停止容器的操作
docker start 容器id # 启动容器docker restart 容器id # 重启容器docker stop 容器id # 停止当前正在运行的容器docker kill 容器id # 强制停止当前容器
常用的其他命令
后台启动容器
# 命令 docker run -d 镜像名root@DESKTOP-S0IK5KG:/# docker run -d centos# 问题docker ps:发现centos停止了# 常见的坑:docker容器使用后台运行,就必须要一个前台进程,docker发现没有应用,就会自动停止# 假如安装一个nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就没有程序了
查看日志
docker logs -f -t --tail [行数] 容器id #容器没有日志就不会显示docker logs -tf 容器id #显示全部日志,容器没有日志就不会显示# 自己编写一段shell脚本root@DESKTOP-S0IK5KG:/home/cinz# docker run -d centos /bin/sh "while true;do echo zengcheng;sleep 1;done"#参数-f # 跟随最新的日志打印-t # 时间戳-tf # 显示日志--tail # 要显示的日志条数
查看容器中进程信息 ps
# 命令docker top 容器id 查看容器中的进程#测试root@DESKTOP-S0IK5KG:/home/cinz# docker top 5a7267e49878UID PID PPID C STIME TTY TIME CMDroot 5745 5725 0 18:04 ? 00:00:00 /bin/sh -c while true;do echo zengcheng;sleep 1;doneroot 6571 5745 0 18:15 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
查看镜像的元数据
# 命令docker inspect 容器id 查看容器的全部信息(元数据)# 测试root@DESKTOP-S0IK5KG:/home/cinz# docker inspect 5a7267e49878[{"Id": "5a7267e4987884b64b786635f68ded3333a656812ff71d162c83dea9f95316a8","Created": "2022-04-01T10:04:03.508823592Z","Path": "/bin/sh","Args": ["-c","while true;do echo zengcheng;sleep 1;done"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 5745,"ExitCode": 0,"Error": "","StartedAt": "2022-04-01T10:04:03.88594638Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6","ResolvConfPath": "/var/lib/docker/containers/5a7267e4987884b64b786635f68ded3333a656812ff71d162c83dea9f95316a8/resolv.conf","HostnamePath": "/var/lib/docker/containers/5a7267e4987884b64b786635f68ded3333a656812ff71d162c83dea9f95316a8/hostname","HostsPath": "/var/lib/docker/containers/5a7267e4987884b64b786635f68ded3333a656812ff71d162c83dea9f95316a8/hosts","LogPath": "/var/lib/docker/containers/5a7267e4987884b64b786635f68ded3333a656812ff71d162c83dea9f95316a8/5a7267e4987884b64b786635f68ded3333a656812ff71d162c83dea9f95316a8-json.log","Name": "/affectionate_jepsen","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/4a3d8517b6d8e123f3cfe8da699ebcc8782c52cedcd712d1287fcaac782eb9e7-init/diff:/var/lib/docker/overlay2/4e18321fb7be5316984825d9a41de61f7c06a75b93491f000cf5b17b237f2ba0/diff","MergedDir": "/var/lib/docker/overlay2/4a3d8517b6d8e123f3cfe8da699ebcc8782c52cedcd712d1287fcaac782eb9e7/merged","UpperDir": "/var/lib/docker/overlay2/4a3d8517b6d8e123f3cfe8da699ebcc8782c52cedcd712d1287fcaac782eb9e7/diff","WorkDir": "/var/lib/docker/overlay2/4a3d8517b6d8e123f3cfe8da699ebcc8782c52cedcd712d1287fcaac782eb9e7/work"},"Name": "overlay2"},"Mounts": [],"Config": {"Hostname": "5a7267e49878","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 zengcheng;sleep 1;done"],"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": "900821d7b36d436d67b16af370453c1338358bf56e34c06ab30c80bfc80e0af6","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/900821d7b36d","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "8a0c90908317236fd427da77c277e5c0d4326b5f4b23102f9e1044a6cc170202","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": "dcedc9da95eae5f3884380ce741e470ecb5f1b4283e8b479f20732d835f0b7e3","EndpointID": "8a0c90908317236fd427da77c277e5c0d4326b5f4b23102f9e1044a6cc170202","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@DESKTOP-S0IK5KG:/home/cinz# docker exec -it 5a7267e49878 /bin/bash[root@5a7267e49878 /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@5a7267e49878 /]# es -efbash: es: command not found[root@5a7267e49878 /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 10:04 ? 00:00:00 /bin/sh -c while true;do echo zengcheng;sleep 1;doneroot 1400 0 0 10:27 pts/0 00:00:00 /bin/bashroot 1428 1 0 10:27 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1root 1429 1400 0 10:27 pts/0 00:00:00 ps -ef#方式二#命令docker attach 容器id#测试root@DESKTOP-S0IK5KG:/home/cinz# docker attach 5a7267e49878正在执行当前的代码....# 区别docker exec # 进入容器后开启一个新的终端,可以在里面操作docker attach # 进入容器正在执行的终端,不会启动新的进程!
从容器内拷贝文件到主机上
#命令docker cp 容器id:容器内路径 目的地主机路径#测试root@DESKTOP-S0IK5KG:/home# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2147f59bbcf5 centos "/bin/bash" 7 minutes ago Up 7 minutes jovial_chebyshev[root@2147f59bbcf5 home]# exit # 退出容器root@DESKTOP-S0IK5KG:/home# docker cp 2147f59bbcf5:/home/kuangshen.java /homeroot@DESKTOP-S0IK5KG:/home# lscinz kuangshen.java # 拷贝成功# 拷贝是一个手动过程,未来可以使用给-v 卷的技术,可以实现连同
docker run hello-world 流程

底层原理
Docker是怎样工作的?
Docker是一个Client - Servcer结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!
DockerServer 接受到Docker-Client的指令,就会执行这个命令!
Docker为什么比VM快?
1、Docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势

2、Docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程。而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。
小结

attach # 当前shell下attach连接指定运行镜像build # 通过Dockerfile定制镜像commit # 提交当前容器为新的镜像cp # 从容器中拷贝指定文件或目录到宿主机中create # 创建一个新的容器,同 run 但不启动容器diff # 查看 docker 容器变化events # 从docker服务器获取容器实时事件exec # 在已存在的容器上运行命令export # 导出容器的内容流作为一个 tar 归档文件【对应 import】history # 展示一个镜像形成历史images # 列出系统当前镜像import # 从tar包中的内容创建一个新的文件系统映像【对应 export】info # 显示系统相关信息inspect # 查看容器详细信息kill # kill 指定的容器load # 从一个 tar 包中加载一个镜像【对应 save】login # 注册或者登录一个 docker 源服务器logout # 从当前 Docekr registry 退出logs # 输出当前容器日志信息port # 查看映射端口对应的容器内部源端口pause # 暂停容器ps # 猎户容器列表pull # 从docker镜像源服务器拉取指定镜像或者库镜像push # 推送指定镜像或者库镜像至docker源服务器restart # 重启运行的容器rm # 移除一个或多个容器rmi # 移除一个或多个镜像 (无容器使用该镜像才可删除,否则需要删除相关容器才可继续或 -f 强制删除)run # 创建一个新的容器并运行一个命令save # 保存一个镜像为一个 tar 包【对应 load】search # 在 docker hub 中搜索镜像start # 启动容器stop # 停止容器tag # 给源中镜像打标签top # 查看容器中运行的进程信息unpause # 取消暂停容器version # 查看 docker版本号wait # 截取容器停止时的退出状态值
- docker的命令是十分多的,上面学习的那些都是最常用的容器和镜像的命令,之后还会学习很多命令!
> 练习
安装nginx
docker search nginx -f stars=100 # 搜索nginx stars>=100的镜像docker pull nginx # 拉取 nginx镜像docker run -d --name nginx -p 8000:80 nginx # 运行镜像 内部端口8000:外部端口80# -d 后台运行# --name 给容器明明# -p 宿主机端口:容器内部端口docker ps # 查看是否运行curl localhost:8000 # curl 模拟 GET\POST 请求,查看是否成功# 浏览器输入 localhost:8000 即可访问# 进入容器docker exec -it nginx /bin/bashcd /etc/nginx# 修改 nginx配置vim nginx.conf
端口暴露的概念

思考:我们每次修改nginx配置文件,都需要进入容器内部,十分的麻烦,如果可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改 -v 数据卷
安装Tomcat
# 官方的使用docker run -it --rm tomcat:9.0# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到 docker run -it --rm,一般用来测试,用完就会自动删除#下载再启动docker pull tomat:9.0#启动运行docker run -d --name tomcat9 -p 8001:8080 tomcat#测试访问 localhost:8001 ,进入成功则无问题#进入容器docker exec -it tomcat9 /bin/bash#发现问题:1、linux命令少了;2、webapps目录下没有文件导致访问404#原因 阿里云镜像默认是最小的镜像,所有不必要的都剔除掉,保证最小的运行环境# 解决访问404的一些办法,进入tomcat容器,将webapps.dist下的文件,拷贝到webapps下docker exec -it tomcat9 /bin/bash # 进入容器cd /usr/local/tomcat # 进入tomcatcp -r webapps.dist/* webapps # 文件拷贝
问题:重复命名并且已删除原镜像依旧提示名称重复的解决方案
# 清除所有未使用或悬空的图像,容器,卷和网络# Docker提供了一个命令,可以清理悬空的任何资源(图像,容器,卷和网络)(与容器无关):docker system prune# 要另外删除任何已停止的容器和所有未使用的图像(不只是悬空图像),请将该-a标志添加到命令:docker system prune -a
思考问题:我们以后要部署项目,每次都要进入容器十分麻烦,如果可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改 -v 数据卷
部署 es + kibana
# es 暴露的端口很多# es 十分的耗内存# es 的数据一般需要放置到安全目录挂载# -- net somenetwork 网络配置docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2# 如果内存太小,启动elasticsearch linux就卡住了 ,可以使用 docker stats 查看cpu的状态,此时本机32GB内存,elasticsearch占了8G# 测试elasticsearch是否成功root@DESKTOP-S0IK5KG:/home/cinz# curl localhost:9200 # 成功{"name" : "71c524f6c2b3","cluster_name" : "docker-cluster","cluster_uuid" : "I-5BHooXTu6EHGKYw4xZAQ","version" : {"number" : "7.6.2","build_flavor" : "default","build_type" : "docker","build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f","build_date" : "2020-03-26T06:34:37.794943Z","build_snapshot" : false,"lucene_version" : "8.4.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"}
内存占用
# 增加对es内存的限制,修改配置文件,-e 环境配置修改 -Xms64m 最小64m内存,-Xms512m 最大512m内存docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xms512m" elasticsearch:7.6.2
使用Kbana连接es

可视化
- portainer
什么是portainer?
Docker图形化界面管理工具!提供一个后台面板共我们操作
docker run -d -p 8088:9000 \--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
访问测试 ip:8088
出现以下画面则成功
选择本地
内部界面
- Rancher(CI/CD)
