Day01-环境准备与镜像案例
1. 容器架构
1.1 Iaas Paas Saas (了解)
-
Iaas:基础设施即服务 Infrastructure-as-a-Service
-
Paas:平台即服务 Platform-as-a-Service
-
Saas:软件即服务 Software-as-a-Service
-
Caas:容器即服务 介于IAAS和PAAS
-
IAAS,PAAS,SAAS这些服务,用于帮助人们更快实现目标(搭建环境,使用产品)
-
从左到右,人们需要管理与维护的地方越来越少,人们可以把重点关注在使用/应用上
-
IAAS平台:基础设施,阿里云,云厂商
-
PAAS平台:服务/运行环境是ok,公有云,负载均衡SLB
-
SAAS平台:服务已经准备好,您直接用,具体产品,processon,wps,亿图
-
严格模式
-
小结:
-
了解Iaas,Paas,Saas含义
1.2 什么是容器
- 容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止
- 容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理,相当于一个mini的系统
1.3 容器vs虚拟机
虚拟机 | 容器 | |
---|---|---|
优点 | 1、使用简单 2、也有成熟管理工具,vmware esxi,KVM,Openstack 3、可以随意定制 4、启动虚拟机要经历完整的Linux启动流程 | 1、快速部署(扩容,弹性伸缩) 2、大部分环境都有现成镜像 3、让我们不再关注系统基础设施,把关注点放在配置,升级,优化 4、不依赖硬件 5、启动容器秒级 6、相当于一个进程 |
缺点 | 1、需要硬件支持虚拟化技术(VT-X) 2、资源利用率不高 3、同一台虚拟跑多个服务,可能有冲突 4、占用资源较多 5、不满足目前升级,快速扩容,快速部署,回滚不方便 | 1、使用较为复杂 2、共享linux系统内核,推荐使用较新linux内核 |
1.4 Docker极速上手指南
Linux内核: 3.10以上. 如果旧的内核需要升级内核才能使用
-
安装docker环境,docker-ce(开源) docker-ee(企业版)
-
从1.13开始改成年-月版本命名方式.
-
使用20.10版本
docker环境 | ip | 配置 |
---|---|---|
docker01.oldboylinux.cn | 10.0.0.81/172.16.1.81 | 2c4G(至少1c2G) |
docker02.oldboylinux.cn | 10.0.0.82/172.16.1.82 | 2c4G(至少1c2G) |
1)配置docker源(用于安装docker)
#1.安装相关依赖.
yum install -y yum-utils device-mapper-persistent-data lvm2
#2.下载官方的docker yum源文件
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#3.替换yum源地址
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
#4.安装docker-ce
yum install -y docker-ce
systemctl enable --now docker
#5.检查
docker version
-
docker下载镜像加速
阿里云,腾讯云有加速用的地址
-
阿里云为例,说明如何获取加速用的地址
2)docker下载镜像加速的配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://o0ot3ltv.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3)自动补全
yum install -y bash-completion bash-completion-extras
1.5 Docker C/S架构
- cs client/server 客户端/服务端
- Docker服务端:docker daemon 叫dockerd
- Docker客户端:docker命令(下载镜像,运行容器…)
docker相关词汇 | 说明 |
---|---|
镜像 | 存放各种的环境或服务 |
容器 | 进程,运行起来的镜像 |
仓库(存放镜像) | 远程仓库,本地仓库 |
-
docker pull nginx 下载nginx镜像到本地仓库
- 如果本地仓库有则提示镜像已经下载
- 如果本地出仓库没有,则docker服务端访问远程仓库,下载镜像
-
docker run -d -p 80:80 nginx 启动容器
- -d容器后台运行
- -p端口映射
- nginx镜像名字
docker run -d -p 80:80 nginx
docker run -d -p 80:80 --name "oldboy_first_docker_nginx" nginx:alpine
# docker客户端找dockerd服务端,问是否有nginx镜像
# 如果有,则启动这个镜像,后台运行,访问容器端口是80端口.
# 如果没有,则从远程仓库下载镜像,启动这个镜像,后台运行,访问容器端口是80端口.
#1. 提示你本地没有nginx镜像 nginx:latest最新版
Unable to find image 'nginx:latest' locally
#2. 找远程仓库下载
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
#3. 运行镜像,成为docker容器.
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
9020c66ace48effa904063f84c664535b8cc3aa2b95535df438c9f2f4952cc35
#4.查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 4 months ago 141MB
#5.查看容器
docker ps
#6. 访问10.0.0.81:80 --->容器的80端口
# 或者hosts文件做解析,使用域名访问
注意事项: 此处使用到了docker -p端口映射公共,需要使用iptables的nat功能,需要开启系统的内核转发功能
[root@docker01.oldboylinux.cn ~]# tail -1 /etc/sysctl.conf net.ipv4.ip_forward = 1 [root@docker01.oldboylinux.cn ~]# sysctl -p net.ipv4.ip_forward = 1
1.6 Docker的镜像管理
镜像管理核心指令:
docker命令 | 指定功能 | 详细功能 |
---|---|---|
docker | image | ls |
docker images === docker image ls
docker search 搜索镜像, 优先选官方,stars数量多
docker pull 拉取镜像(下载镜像),注意版本
docker push 推送镜像(上传镜像)
docker load 导入镜像
例子: docker load -i docker_nginx.tar.gz
docker save 导出镜像
例子:docker save centos:7 -o
docker_centos7.tar.gz
docker images 查看镜像列表
docker rmi 删除镜像
docker tag 给镜像打标签
1)案例01:下载nginx:alpine镜像并查看
#1.
docker pull #下载镜像
docker pull nginx:1.22-alpine
#2.
docker image ls #简写为docker images查看镜像
#查找镜像:
docker search
访问hub.docker.com
- 镜像命名:
#指定版本
只写服务名字一般下载服务的最新版本.
nginx 下载ngx最新版本 nginx:latest
下载ngx最新稳定的版本 nginx:stable
下载指定的版本 nginx:1.20.2
#指定系统
nginx镜像默认的系统是Debian系统
docker pull nginx:1.20.2-alpine 使用alpine系统更加节约空间
docker镜像使用的系统 | ||
---|---|---|
ubuntu | 都可以做镜像的系统 | |
debian | 都可以做镜像的系统. bullseye ,bluster | |
centos | 都可以做镜像的系统 | 最大 |
alpine | 镜像非常小(命令,依赖精简) linux内核+busybox |
- 待讲解docker push 一般用于上传镜像hub.docker.com,未来主要用于自建docker镜像仓库
2)案例02:sl大法
-
保存docker镜像(save),其他节点上导入(load)
-
未来也可以搭建镜像仓库
docker image save #docker save
docker image load #docker load
#1.1g个节点保存docker 镜像 -o输出到指定的文件.
docker save nginx:alpine -o nginx_alpine.tar
#2. 导入load
docker load -i nginx_alpine.tar
- 批量导出镜像
docker images |awk 'NR>1{print "docker save",$1":"$2,"-o",$1"_"$2".tar"}'
最后通过|bash运行
可以书写批量导出docker镜像脚本
3)案例03:删除镜像
- 条件:镜像不能在使用中(没有基于这个镜像的容器)
docker image rm === docker rmi
删除镜像
4)案例04:镜像清理用的命令
- 用于清理一些临时镜像,未来我们自定义镜像的时候会有
docker image prune
docker images -a #可以查看系统中所有镜像,包含隐藏镜像
5)案例05:给镜像设置标签
- 给镜像设置一个新的名字
- 应用场景:
- 自定义镜像
- 搭建与使用内部镜像仓库.registry
[root@docker01.oldboylinux.cn ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.22-alpine 652309d09131 2 weeks ago 23.5MB
nginx alpine cc44224bfe20 14 months ago 23.5MB
nginx latest 605c77e624dd 14 months ago 141MB
centos latest 5d0da3dc9764 17 months ago 231MB
[root@docker01.oldboylinux.cn ~]# docker tag nginx:1.22-alpine nginx:1.22-alpine-oldboy
[root@docker01.oldboylinux.cn ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.22-alpine 652309d09131 2weeks ago 23.5MB
nginx 1.22-alpine-oldboy 652309d09131 2weeks ago 23.5MB
nginx alpine cc44224bfe20 14months ago 23.5MB
nginx latest 605c77e624dd 14months ago 141MB
centos latest 5d0da3dc9764 17months ago 231MB
6)案例06:查看镜像详细信息
- 做镜像巡检的时候使用
docker 家目录 /var/lib/docker/
#查看 nginx:alpine镜像的信息,输出的是json格式.
docker image inspect nginx:alpine
7)案例07:自定义镜像
未来讲解dockerfile再说
docker image build == docker build
8)小结
- docker pull/ docker images #docker push 未来再说
- docker save/load
- docker rmi/image prune
- docker tag
- docker image inspect
- docker build #未来自定义镜像
今日总结
- 容器vs虚拟机
- docker rpm在手,天下我有
- docker cs架构
- docker 镜像管理与案例