9-4 Docker 换源 镜像
恢复上节课进度
教师下发安装包到学生机桌面,从宿主机桌面复制离线安装包docker-installer.tar.gz到虚拟机/root目录下。
解压缩和安装
tar -zxvf docker-installer.tar.gz rpm -iv --nodeps --force ./docker-installer/*.rpm docker -v启动服务
systemctl start docker systemctl status docker # 服务信息应该为active且无报错。报错的话检查虚拟机cpu虚拟化支持是否勾选。
基本概念
镜像image: 例如WordPress博客的镜像,以操作系统为底、PHP解释器、MySQL数据库,制作者先拉取基础的操作系统镜像,然后在上面安装配置后所需程序,最后共享给大家使用。 为了避免镜像过大,社区除了有Ubuntu这种2G左右的大而全镜像,也有alpine(阿尔卑斯)这种5Mb大小的极精简系统。
另外采用了分层文件系统layers、 依赖管理的思想,例如WordPress和Nodebb两个项目都基于同一种Ubuntu,那么重复部分只会下载一次,在docker pull image时能看到细节。 下载镜像的过程叫拉取。镜像标签tag:
一个镜像根据操作系统和代码版本,会生成有多个版本,例如python:3.11 python:3 python:alpine-3.11。默认版本tag为latest会拉取最新的稳定版本。镜像仓库: docker官方仓库平台 :官方包管理平台,网友可以发布自己的镜像,也可以下载其它人的镜像加速自己的任务。也可以搭建私有仓库。
镜像构建build:通过专门的构建语言,指定封装的镜像以什么操作系统为底,安装什么应用,执行什么脚本。
容器container: 一个镜像运行起来,执行了镜像内部的命令程序,通过端口绑定使服务暴露在宿主机上供人使用,在宿主机上就像是一个程序容器。
端口绑定port bind
磁盘映射disk mapping:
程序运行在容器内,容器运行的是封装好的镜像,如果要修改细节配置,进入容器修改比较麻烦且会导致镜像变化,建议映射。
例如容器内运行一个Nginx程序,默认网站文件夹是/usr/share/nginx/html,启动在80端口。那么把宿主机(假设使用了Docker Desktop for Windows,D盘下有网站文件夹mysite) D:\mysite➡️/usr/share/nginx/html,宿主机80端口➡️容器80端口,那么当容器运行时,就能读取到宿主机上的内容。这使得Docker在保持强封装的同时兼具灵活性。进入容器attach:进入容器中的操作系统进行临时修改和排查。
查看日志:查看容器应用运行过程中产生的日志。
相关生态:
docker compose,如果一个项目由数据库、前端、后端等多个子项目构成,可以把多个容器和运行顺序进行编排,编排配置文件叫Dockerfile,一个容器编排中包括多个docker容器。
Kubernates:是更上层更复杂,分布式、弹性、高可用,可以批量管理多台服务器和docker容器和自动化部署。
(仅了解不需操作)build构建镜像
详细略,只需理解。
运维大佬创建Dockerfile文件,运用dockerfile语法将日常linux命令过程封装起来。
构建镜像。那么这个镜像里操作系统应用软件和配置都固化下来了。
上传镜像。上传到dockerhub官方平台。
其他人就可以pull下拉⏬了。
优点:Docker镜像构建对linux运维工作进行了封装固化。
缺点:调试麻烦,不够灵活,经验不足的运维人员不好封装复杂操作。例如 yum install nginx这句话,物理机上随意操作,构建镜像是就必须-y参数。
因此本节课主要关注pull命令就可以了。
镜像源换源
由于某些原因,国内无法访问dockerhub官方镜像源相关的域名,导致docker安装后无法使用。docker镜像源换源不同于之前的linux操作系统软件源换源。
镜像源推荐:
(docker镜像源不好找。因为镜像很大,例如nginx的docker镜像如果打底系统是ubuntu那么镜像1Gb左右,再加上不同操作系统和不同应用版本相互组合,光这一款应用的镜像空间就挺大的,国内镜像源企业受限于成本,很多已经不可用或要求账号鉴权。)
换源:
临时换源是在docker pull命令时加域名和仓库所有者名,命令较长,为了一劳永逸推荐永久换源。
(可选)创建配置文件
# (可选,一般安装完docker会自动生成这个文件夹) # mkdir -p /etc/docker # (可选,后面的换源命令会创建此文件)daemon.json在安装完docker后默认不会自动生成,手动创建 touch /etc/docker/daemon.json修改配置文件
docker engine的配置文件daemon.json,语法字段很多,我们只需关注registry-mirrors值。# EOF自定义终止符表示后面跟结构化的字符串,如果用vim/nano编辑配置文件不要把EOF抄上去。 # 注意json配置文件语法,字符串双引号,⚠️列表最后一项没有逗号。 # 镜像源地址先用浏览器测试访问看是否可用。 tee /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://dockerproxy.net", "https://docker.xuanyuan.me" ] } EOF重启
# (待测试是否可省略)重载systemd单元文件管理,不会被dockerd读取,需要这行命令。新版本>=17后,dockerd会自动读取deamon.json,不需要这行命令。 systemctl daemon-reload # 重启docker进程 systemctl restart docker测试
# 查看docker engine信息,确认registry-mirrors字段已经改变为源镜像网址 docker info # 测试hello-world镜像 docker pull hello-world运行成功返回日志如下
Hello from Docker! This message shows that your installation appears to be working correctly. ... For more examples and ideas, visit: https://docs.docker.com/get-started/
镜像
命令:pull拉取(即下载)
概念:
镜像仓库registry。官方dockerhub.io,国内为镜像源,或私有仓库。
仓库所有者。公司或个人。
项目。
标签tag。当仓库配置好后,项目名加标签名形如"nginx:latest" "nginx:7.1" "nginx:ubuntu22" "nginx:stable" "nginx:ubuntu22-7.1",默认值"latest"可省略。
在线拉取
离线安装
老师下发 hello-world.tar 离线docker image文件至学生机桌面,学生复制粘贴文件进虚拟机root用户家目录下。
加载离线镜像
docker load -i hello-world.tar
管理命令
课外
使用build构建镜像相关命令
上传镜像到dockerhub或私有仓库
搭建私有仓库