Docker的概述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3oJpGGzn-1630306422689)(C:\Users\MGZ20180810F\AppData\Roaming\Typora\typora-user-images\image-20210824104949421.png)]
镜像(image):
dokcer镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===>run===>tomcat01 容器(提供服务器)
容器(container):
Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。
启动,停止,删除,基本命令!
仓库(repository):
仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库!
Docker Hub(默认是国外的)
阿里云…都有容器服务器(配置镜像加速!)
Docker安装
安装过程
环境准备
1、需要一点点linux的基础
2、Centos7
3、我们使用Xshell连接远程服务器进行操作!
环境查看
#系统内核是3.10以上的
[root@hecs-x-medium-2-linux-20210823121155 ~]# uname -r
3.10.0-1160.15.2.el7.x86_64
#系统版本
[root@hecs-x-medium-2-linux-20210823121155 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装
#1、卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#2、需要的安装包
yum install -y yum-utils
#3、设置镜像的仓库
yum-config-manage \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的
yum-config-manage \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #推荐使用阿里云的,速度快
#4、 更新 yum软件包索引
yum makecache fast
#5、安装docker docker-ce 社区 ee企业版
yum install docker-ce docker-ce-cli containerd.io
#6、启动docker
systemctl start docker
#7、使用docker version 查看是否安装成功!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VQ4l0ED5-1630306422698)(C:\Users\MGZ20180810F\AppData\Roaming\Typora\typora-user-images\image-20210823163505977.png)]
#8、启动 hello-world
docker run hello-world
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X7Qux2iN-1630306422701)(C:\Users\MGZ20180810F\AppData\Roaming\Typora\typora-user-images\image-20210823163929948.png)]
#9、查看一下下载的hello-world镜像
docker images
了解:卸载docker
#1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2、删除资源
rm -rf /var/lib/docker
#/var/lib/docker docker的默认工作路径!
阿里镜像加速
#执行下列命令
mkdir -p /etc/docker
tee /etc/docker/daemon.json<<-'EOF'
{
"registry-mirrors":["https://qiyb9988.mirror.aliyuns.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
回顾HelloWorld流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z2NQyIRb-1630306422705)(C:\Users\MGZ20180810F\AppData\Roaming\Typora\typora-user-images\image-20210823170013068.png)]
底层原理
docker是怎样工作的?
docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。
DockerServer接收到Docker-Client的指令,就会执行这个命令!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58adzhD0-1630306422708)(C:\Users\MGZ20180810F\AppData\Roaming\Typora\typora-user-images\image-20210823170900243.png)]
Docker为什么比VM快?
1.Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。
2.Docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qwn6rK6i-1630306422741)(C:\Users\MGZ20180810F\AppData\Roaming\Typora\typora-user-images\image-20210823171710796.png)]
Docker的常用命令
帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #万能命令
镜像命令
docker images 查看所有本地的主机上的镜像
[root@hecs-x-medium-2-linux-20210823121155 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 266d1269bb29 4 days ago 668MB
tomcat latest 266d1269bb29 4 days ago 668MB
nginx latest dd34e67e3371 5 days ago 133MB
hello-world latest d1165f221234 5 months ago 13.3kB
centos latest 300e315adb2f 8 months ago 209MB
[root@hecs-x-medium-2-linux-20210823121155 ~]#
# REPOSITORY 镜像的仓库源
# TAG 镜像的标签
# IMAGE ID 镜像的id
# CREATED 镜像的创建时间
# 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
docker search 搜索镜像
[root@hecs-x-medium-2-linux-20210823121155 ~]# docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 11312 [OK] mariadb MariaDB Server is a high performing open sou… 4299 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 838 [OK]#可选项,通过搜藏来过滤--filter=STARS=3000 #搜索书来的镜像就是STARS大于3000的
docker pull 下载镜像
#下载镜像 docker pull 镜像名[:tag][root@hecs-x-medium-2-linux-20210823121155 ~]# docker pull mysqlUsing default tag: latest #若果不写 tag,默认是 latestlatest: Pulling from library/mysqle1acddbe380c: Already exists #分层下载,docker image 的核心 来内核文件系统bed879327370: Pull complete 03285f80bafd: Pull complete ccc17412a00a: Pull complete 1f556ecc09d1: Pull complete adc5528e468d: Pull complete 1afc286d5d53: Pull complete 6c724a59adff: Pull complete 0f2345f8b0a3: Pull complete c8461a25b23b: Pull complete 3adb49279bed: Pull complete 77f22cd6c363: Pull complete Digest: sha256:d45561a65aba6edac77be36e0a53f0c1fba67b951cb728348522b671ad63f926 #签名Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest #真实地址#docker pull mysql = docker.io/library/mysql:latest #指定版本下载[root@hecs-x-medium-2-linux-20210823121155 ~]# docker pull mysql:5.75.7: Pulling from library/mysqle1acddbe380c: Already exists bed879327370: Already exists 03285f80bafd: Already exists ccc17412a00a: Already exists 1f556ecc09d1: Already exists adc5528e468d: Already exists 1afc286d5d53: Already exists 4d2d9261e3ad: Pull complete ac609d7b31f8: Pull complete 53ee1339bc3a: Pull complete b0c0a831a707: Pull complete Digest: sha256:7cf2e7d7ff876f93c8601406a5aa17484e6623875e64e7acc71432ad8e0a3d7eStatus: Downloaded newer image for mysql:5.7docker.io/library/mysql:5.7
docker rmi 删除镜像!
docker rmi -f 镜像id #删除指定的镜像docker rmi -f 镜像id 镜像id 镜像id... #删除多个镜像dockers rmi -f $(docker images -aq) #删除全部的镜像
容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image# 参数说明--name="Name" 容器名字 tomcat01 tomcat02 用来区分容器-d 后台方式运行 -it 使用交互方式运行,进入容器查看内容-P(大写) 指定容器的端口 -P 8080:8080 -P ip:主机端口:容器端口 -P 主机端口:容器端口 -P 容器端口-p 随即指定端口#测试,启动并进入容器[root@hecs-x-medium-2-linux-20210823121155 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos latest 300e315adb2f 8 months ago 209MB[root@hecs-x-medium-2-linux-20210823121155 ~]# docker run -it centos /bin/bash[root@cf8e0ee03923 /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@cf8e0ee03923 /]# #从容器中退回主机exit
列出所有的运行的容器
# docker ps 命令 # 列出当前正在运行的容器-a # 列出当前正在运行的容器+带出历史运行过的容器 -n=? #显示最近创建的容器-q #只显示容器的编号[root@hecs-x-medium-2-linux-20210823121155 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@hecs-x-medium-2-linux-20210823121155 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMEScf8e0ee03923 centos "/bin/bash" 6 minutes ago Exited (0) 3 minutes ago sweet_dubinskyff8d84a0a400 d1165f221234 "/hello" 3 hours ago Exited (0) 3 hours ago strange_bellc8a4f19ccc1e 266d1269bb29 "catalina.sh run" 4 hours ago Created tomcat01240aa9c2dbfd dd34e67e3371 "/docker-entrypoint.…" 5 hours ago Exited (0) 4 hours ago nginx01ffcc1d032ece centos "/bin/bash" 5 hours ago Exited (0) 5 hours ago xenodochial_saha0ff535f54f94 centos "/bin/bash" 6 hours ago Exited (127) 5 hours ago compassionate_beaver298faa6bbc91 centos "-it" 6 hours ago Created sharp_dewdney41fa68df8596 centos "/bin/bash" 6 hours ago Exited (0) 6 hours ago priceless_gauss[root@hecs-x-medium-2-linux-20210823121155 ~]#
退出容器
exit #直接推出容器并停止Ctrl +P +Q #容器不停止退出
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除 docker rm -fdocker rm -f $(docker ps -aq) #删除所有的容器docker ps -a -q|xarges docker rm #删除所有的容器
启动和停止容器
docker start 容器iddocker restart 容器iddocker stop 容器iddocker kill 容器id
常用其他命令
后台启动容器
#命令 docker run -d 镜像名!#问题docker ps ,发现centos 停止了#常见的坑,docker,容器使用后台运行,就必须要有一个前太进程,docker发现没有应用,就会自动停止#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了。
查看日志
docker logs -f -t --tail 条数 容器,没有日志# 自己编写一段shell脚本[root@hecs-x-medium-2-linux-20210823121155 ~]# docker run -d centos /bin/sh -c "while true;do echo xiaowugui;sleep 1;done"#root@hecs-x-medium-2-linux-20210823121155 ~]# docker psCONTAINER ID IMAGE COMMAND 653d1e6439ce centos "/bin/sh -c 'while t…" #显示日志-tf #显示日志--tail number #显示日志条数[root@hecs-x-medium-2-linux-20210823121155 ~]# docker logs -tf --tail 10 653d1e6439ce
查看容器中的进程信息
#命令 docker top 容器id[root@hecs-x-medium-2-linux-20210823121155 ~]# docker top 653d1e6439ceUID PID PPID C STIME TTY TIME CMDroot 22082 22064 0 19:49 ? 00:00:00 /bin/sh -c while true;do echo xiaowugui;sleep 1;doneroot 22587 22082 0 19:56 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
查看镜像元数据
#命令 docker inspect 容器id#测试[root@hecs-x-medium-2-linux-20210823121155 ~]# docker inspect"docker inspect" requires at least 1 argument.See 'docker inspect --help'.Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]Return low-level information on Docker objects[root@hecs-x-medium-2-linux-20210823121155 ~]# docker inspect 653d1e6439ce[ { "Id": "653d1e6439ce7fba1c7eb5d392a95e25603ee19c2c766031d78f0ddc3004a18a", "Created": "2021-08-23T11:49:19.344808459Z", "Path": "/bin/sh", "Args": [ "-c", "while true;do echo xiaowugui;sleep 1;done" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 22082, "ExitCode": 0, "Error": "", "StartedAt": "2021-08-23T11:49:19.642912597Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55", "ResolvConfPath": "/var/lib/docker/containers/653d1e6439ce7fba1c7eb5d392a95e25603ee19c2c766031d78f0ddc3004a18a/resolv.conf", "HostnamePath": "/var/lib/docker/containers/653d1e6439ce7fba1c7eb5d392a95e25603ee19c2c766031d78f0ddc3004a18a/hostname", "HostsPath": "/var/lib/docker/containers/653d1e6439ce7fba1c7eb5d392a95e25603ee19c2c766031d78f0ddc3004a18a/hosts", "LogPath": "/var/lib/docker/containers/653d1e6439ce7fba1c7eb5d392a95e25603ee19c2c766031d78f0ddc3004a18a/653d1e6439ce7fba1c7eb5d392a95e25603ee19c2c766031d78f0ddc3004a18a-json.log", "Name": "/heuristic_ride", "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": { &#