一.什么是docker,与虚拟机有什么区边,他们各自的目标是什么?
(1)Docker:Docker 是容器化平台,可以把应用程序 + 它依赖的库、配置、环境打包成一个容器镜像。
解释就是把软件连同运行环境一起打包,实现 “一次打包,到处运行”
docker目的:
1.统一运行环境把应用程序、依赖库、配置文件全部打包进镜像。不管在哪台服务器运行,环境完全一样,消除 “在我电脑能跑,线上跑不了”。
2.简化软件交付与迁移应用打包成标准镜像,像集装箱一样,快速在不同服务器之间迁移,不用重新安装各种依赖。
3.轻量隔离,高效利用服务器资源依托 Linux Namespace 做隔离、Cgroups 限制资源。一台宿主机上可以跑多个容器,容器之间互不干扰;对比虚拟机,占用资源更少、启动速度更快。
4.快速部署、快速启停,方便弹性扩缩容容器秒级启动,新版本发布、故障恢复、扩容都很快。
5.方便版本管理与快速回滚镜像可以打版本标签。新版本异常,能够快速切回旧镜像。
6.为微服务、CI/CD 持续交付提供基础把应用拆成多个独立容器,适配自动化流水线,实现自动化构建、测试、发布
(2)虚拟机:把硬件虚拟出来,每个虚拟机拥有独立完整 OS 内核 + 文件系统
虚拟机目的:
1.硬件级隔离,隔离强度很高
2.不同操作系统可以共存(Windows 宿主机跑 Linux 虚拟机)
3.适合:需要完整操作系统、强安全隔离、异构系统场景
二.docker与虚拟化的对比
三.如何安装docker。
部署容器的官方网址:https://docs.docker.com/
1.第一步配置docker的镜像源,配置好后才可以下载docker.
我们的镜像原仓库就找阿里云的docker镜像。
阿里云yum仓库docker的官网地址:docker-ce-linux-rhel-9.0-x86_64-stable安装包下载-开源镜像站-阿里云docker-ce-linux-rhel-9.0-x86_64-stable安装包是阿里云官方提供的开源镜像免费下载服务,每天下载量过亿,阿里巴巴开源镜像站为包含docker-ce-linux-rhel-9.0-x86_64-stable安装包的几百个操作系统镜像和依赖包镜像进行免费CDN加速,更新频率高、稳定安全。https://mirrors.aliyun.com/docker-ce/linux/rhel/9.0/x86_64/stable
[root@docker ~]#vim /etc/yum.repo.d/docker.repo //注意创建的yum仓库包的后缀必须是repo,不然无法识别 [docker] name=docker baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9.0/x86_64/stable/ gpgcheck=02.第二步卸载系统自带的docker,为什么?因为系统自带,准确来说是Redhat中podman-docker伪装 docker 命令,为了防止共享底层组件,包依赖冲突等问题。
[root@docker ~]#dnf remove -y podman buildah3.第三步是下载docker镜像
[root@docker ~]#yum install docker-ce -y4.第四步我们把docker的服务写成systemd的服务,因为这个我们都很熟悉(这个只用在不是yum或dnf装的,比如二进制等)。
[root@docker ~]#vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true [root@docker ~]#systemctl enable --now docker [root@docker ~]#docker info5.第五步虽然我们这里可以下载docker,但是使用docker搜索镜像的时候是搜不到的,因为他们是国外的网站,这里我们需要用到国内的加速器
国内从Docker Hub拉取镜像有时会遇到困难,可以通过修改docker配置文件的方式添加一个加速器,可以通过加速器达到下载镜像的目的。
(1)从2017年6月9日起,Docker 官方提供了在中国的加速器,以解决墙的问题。不用注册,直接使用加速器地址:https://registry.docker-cn.com 即可。
(2)中国科技大学的镜像加速器:中科大的加速器不用注册,直接使用地址 https://docker.mirrors.ustc.edu.cn/ 配置加速器即可。进一步的信息可以访问:Docker Hub - USTC Mirror Help
(3)阿里云加速器:注册阿里云开发账户(免费的)后,访问这个链接就可以看到加速器地址: 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
(4)DaoCloud 加速器:注册 DaoCloud 账户(支持微信登录),然后访问: https://www.daocloud.io/mirror#accelerator-doc
#配置docker镜像加速 [root@rhel9 ~]# cat /etc/docker/daemon.json { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://huecker.io", "https://dockerhub.timeweb.cloud", "https://noohub.ru", "https://hub.oepkgs.net", "https://dockerhub.timeweb.cloud" ] } [root@rhel9 ~]# systemctl daemon-reload [root@rhel9 ~]# systemctl restart docker [root@rhel9 ~]# docker info | grep -iA 4 registry Registry Mirrors: https://docker.m.daocloud.io/ https://huecker.io/ https://dockerhub.timeweb.cloud/ https://noohub.ru/ #出现该内容表示镜像加速配置成功#拉取hello-world镜像,测试能否拉取 [root@rhel9 ~]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-world c1ec31eb5944: Pull complete Digest: sha256:53cc4d415d839c98be39331c948609b659ed725170ad2ca8eb36951288f81b75 Status: Downloaded newer image for hello-world:latest docker.io/library/hello-world:latest [root@rhel9 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d2c94e258dcb 15 months ago 13.3kB四.Docker的基本指令操作
4.1.搜索镜像
[root@Docker~]# docker search nginx4.2.拉取镜像
本地拉取镜像:docker load -i 镜像名称。
从镜像仓库拉取镜像:docker pull 镜像名称。
4.3.查看本地镜像
[root@Docker ~]# docker images4.4.查看镜像信息
[root@Docker~]# docker inspect 镜像名称4.5.导出镜像
[root@Docker~]# docker save 要导出的镜像 -o 导出后的包名 例子: [root@Docker-node1 ~]# docker image save nginx:latest nginx:1.26-alpine -o nginx.tag.gz //这里我们导入了两个镜像,分别是nginx:latest和nginx:1.26-alpine4.6.删除镜像
[root@Docker~]# docker rmi 镜像 //删除镜像 [root@Docker~]# docker rm -f 镜像 //强制删除镜像4.7.启动镜像
[root@Docker~]# docker run -d --name 自建名称 -p 80:80 镜像 //-d是后台运行 [root@Docker~]# docker run -it --name 自建名称 -p 80:80 镜像 //-it是前台交互运行 [root@Docker~]# docker attach 镜像 //重新进入到镜像 # 容器必须已经处于UP运行状态! docker exec -it centos7 /bin/bash4.8.查看容器运行信息
[root@Docker-node1 ~]# docker ps #查看当前运行容器 [root@Docker-node1 ~]# docker ps -a #查看所有容器 [root@Docker-node1 ~]# docker inspect busybox #查看容器运行的详细信息4.9.停止和运行容器
[root@Docker-node1 ~]# docker stop busybox #停止容器 [root@Docker-node1 ~]# docker kill busybox #杀死容器,可以使用信号 [root@Docker-node1 ~]# docker start busybox #开启停止的容器4.10.容器内容提交
[root@Docker ~]# docker commit -m "提示信息" 原来的镜像 新的镜像 [root@Docker-node1 ~]# docker commit -m "add leefile" test busybox:v1 //把test的镜像打包成了busybox:v1镜像五.docker镜像构建
5.1docker镜像结构
docker镜像结构特点:
共享宿主机的kernel
base镜像提供的是最小的Linux发行版
同一docker主机支持运行多种Linux发行版
采用分层结构的最大好处是:共享资源
5.2docker镜像的基本原理
copy-on-Write可写容器层
容器层以下所有镜像层都是只读的
docker从上往下依次查找文件
容器层保存镜像变换的部分,并不会对镜像本身进行任何修改
一个镜像最多127层
5.3.镜像的获得方式
基本镜像通常由软件官方提供
企业镜像可以用官方镜像+Dockerfile来生成
系统关于镜像的获取动作有两种
docker pull镜像地址
docker load -i 本地镜像包
5.4.通过用dockerfile来搭建镜像
5.4.1.构建参数
1.from:指定base镜像eg:FROM busybox:version
2.copy: 复制文件eg:COPY file /file 或者 COPY["file",“/”]
3.MAINTAINER:指定作者信息,比如邮箱eg:MAINTAINER user@maosheng.com
4.ADD:功能和copy相似,指定压缩文件或url eg:ADD test.tar /mnt或者eg:ADD http://ip/test.tar/mnt
5.ENV:指定环境变量eg: ENV FILENAME test
6.EXPOSE: 暴露容器端口eg: EXPOSE 80
7.VOLUME: 申明数据卷,通常指数据挂载点eg: VOLUME["/var/www/html"]
8.WORKDIR: 切换路径eg: WORKDIR /mnt
9.RUN: 在容器运行的指令eg:touch file
10.CMD:在启动容器时自动运行动作可以被覆盖eg:CMD echo $FILENAME会调用shell解释eg: CMD []"/bin/sh", "-c","echo $FILENAME"],不能调用shell解析
11.ENTRYPOINT: 和CMD功能和用法类似,但是动作不可被覆盖。
5.4.2docker搭建镜像的实例
1.编写dockerfile
我们可以在任意目录下,但是一定要有dockerfile,而且在创建镜像的时候要和dockerfile在同一目录下。
[root@localhost ~]#vim /docker/dockerfile FROM nginx:latest --这里我们写已有的镜像,nginx:latest是已经有点镜像 MAINTAINER maosheng@root.org --这里是作者信息 copy leefile / --复制当前目录文件到容器指定位置 [root@localhost docker]#docker build -t example1:v1 --构建镜像5.5.docke仓库和镜像的区别