容器架构上
- [1. 容器架构](#1. 容器架构)
-
- [1.1 什么是==容器==](#1.1 什么是==容器==)
- [1.2 容器 vs 虚拟机(化) :star::star:](#1.2 容器 vs 虚拟机(化) :star::star:)
- [1.3 Docker极速上手指南](#1.3 Docker极速上手指南)
-
- 1)使用rpm包安装docker
- 2) docker下载镜像加速的配置 docker下载镜像加速的配置)
- 3) 载入镜像大礼包(老师资料包中有) 载入镜像大礼包(老师资料包中有))
- [1.4 Docker使用案例](#1.4 Docker使用案例)
-
- [1) 案例01::star::star::star::star::star:启动nginx:1.24镜像并通过宿主机8848端口访问](#1) 案例01::star::star::star::star::star:启动nginx:1.24镜像并通过宿主机8848端口访问)
- [2) 案例02: :star:docker run背后原理](#2) 案例02: :star:docker run背后原理)
- [3) 案例03::star::star::star::star::star:查看容器](#3) 案例03::star::star::star::star::star:查看容器)
- 4)案例04::star::star::star::star::star:删除容器
- 5) 案例05:启动数据库容器 案例05:启动数据库容器)
- 6) 案例06: :star::star::star::star::star:进入运行中的容器 案例06: :star::star::star::star::star:进入运行中的容器)
- 7) 案例07: 容器的自启动 案例07: 容器的自启动)
- 8)案例08:查看镜像
- 9) 案例09:拉取镜像 案例09:拉取镜像)
- 10)案例10:删除镜像案例10:删除镜像)
- 11)案例11:启动系统镜像
- [12) 小结](#12) 小结)
- [1.5 Docker初步自定义镜像:案例12](#1.5 Docker初步自定义镜像:案例12)
-
- 1)启动ngx容器
- 2) 连接到容器中 连接到容器中)
- 3)进行测试
- 4)保存镜像
- 5)根据新的镜像创建容器并测试
1. 容器架构
1.1 什么是容器
- 容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止.
- 细致:容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理,相当于一个mini的操作系统.
1.2 容器 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.3 Docker极速上手指南
Linux内核: 3.10以上. 如果旧的内核需要升级内核才能使用.
- 安装docker环境,docker-ce(开源) docker-ee(企业版)
docker环境 | ip | 配置 |
---|---|---|
oldboy-docker | 10.0.0.62/172.16.1.62 | 2c4G(至少1c2G) |
1)使用rpm包安装docker
-
解压oldboyedu_docker_24_rpms.tar.gz(老师资料包中):
tar xf oldboyedu_docker_24_rpms.tar.gz
-
进入目录并安装rpm包
shcd docker_24_rpms/ yum localinstall -y *.rpm
-
检查是否安装成功
shrpm -qa |grep docker docker-compose-plugin-2.19.1-1.el7.x86_64 docker-ce-cli-24.0.4-1.el7.x86_64 docker-buildx-plugin-0.11.1-1.el7.x86_64 docker-ce-rootless-extras-24.0.4-1.el7.x86_64 docker-ce-24.0.4-1.el7.x86_64
- 【后面工作中可以用】配置docker源(用于安装docker)
sh
#1.安装相关依赖.
sudo yum install -y yum-utils
#2.下载官方的docker yum源文件
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#3.替换yum源地址
sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
#4.安装docker-ce
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#5.启动
systemctl enable --now docker
#6.检查
docker version 检查
2) docker下载镜像加速的配置
我们使用docker的时候需要下载很多docker的镜像.为了加速下载,需要配置docker加速.
-
docker下载镜像加速
阿里云,腾讯云有加速用的地址.
-
阿里云为例,说明如何获取加速用的地址
-
创建目录:
sudo mkdir -p /etc/docker
-
修改配置docker下载镜像的加速地址(/etc/docker/daemon.json docker服务端的配置文件.)
shsudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://bjjtv7cs.mirror.aliyuncs.com"] } EOF
-
开机自启动与重启
shsudo systemctl daemon-reload sudo systemctl restart docker sudo systemctl enable docker
3) 载入镜像大礼包(老师资料包中有)
sh
#解压大礼包的oldboyedu_useful_docker_images_v2.tar.gz
tar xf oldboyedu_useful_docker_images_v2.tar.gz
#批量导入
cd oldboyedu_useful_docker_images/
for n in `ls` ;
do
docker load -i $n
done
1.4 Docker使用案例
1) 案例01:⭐️⭐️⭐️⭐️⭐️启动nginx:1.24镜像并通过宿主机8848端口访问
- 使用本地已有的镜像(nginx:1.24),如果没有则从远程下载。
- 运行镜像(进程,容器)
- 设置访问的端口8848(宿主机)访问容器中的80端口。
- 浏览器访问10.0.0.62:8848 访问容器的80端口。
sh
docker run -d -p 8848:80 --name nginx_v1 nginx:1.24
6f34a5df3a4049423c18ca606bbd3ae05caca4b111804d7aee598c842bd3056d
ss -lntup|grep 8848
tcp LISTEN 0 128 *:8848 *:* users:(("docker-proxy",pid=3680,fd=4))
tcp LISTEN 0 128 [::]:8848 [::]:* users:(("docker-proxy",pid=3686,fd=4))
- 浏览器访问:http://10.0.0.62:8848
-
命令与参数
命令 作用 docker run 运行容器 -d 后台运行 -- name 指定名字,容器名字不能冲突。如果不指定就会随机分配名字 - p 端口映射 宿主机端口,指定用容器和宿主机的端口进行关联
2) 案例02: ⭐️docker run背后原理
3) 案例03:⭐️⭐️⭐️⭐️⭐️查看容器
sh
docker ps #只显示运行中的容器。
docker ps -a #查看所有状态的容器关闭,退出,。。。。
- 启动mysql:8.0-debian
sh
#1 启动mysql 8.0容器
docker run -d --name mysql_8.0 -p 13306:3306 mysql:8.0-debian
7d2dc00806dd9ea73638c8ff49a333c408a50c0eab2435b424f5763a102f73ae
#2 查看运行中容器,发现没有mysql-8.0容器
docker ps |grep mysql
#3. 查看所有状态的容器 发现mysql-8.0是exit退出状态。
docker ps -a
4)案例04:⭐️⭐️⭐️⭐️⭐️删除容器
sh
docker rm 容器名字或id #删除已经关闭,退出,非运行容器。
docker rm -f #强制删除,删除运行中的容器。
docker rm -f mysql_8.0
5) 案例05:启动数据库容器
- 数据库容器需要额外的参数(变量)。
- 需要通过-e参数设置MYSQL_ROOT_PASSWORD
sh
#1. 启动数据库容器
docker run -d -p 13306:3306 --name mysql_8.0_v2 -e MYSQL_ROOT_PASSWORD=1 mysql:8.0-debian
#2. 检查容器状态
docker ps |grep mysql
#3. 如果没有则通过ps -a 查看
docker ps -a |grep mysql
6) 案例06: ⭐️⭐️⭐️⭐️⭐️进入运行中的容器
- 温馨提示:进入到运行中的容器。
sh
#连接进入mysql容器
docker exec -it mysql_8.0_v2 /bin/bash
#连接进入nginx容器
docker exec -it nginx_v1 /bin/bash
可以修改首页文件然后访问测试。
连接后可以执行:
du -sh /
和cat /etc/os-release
查看一些容器信息。
- 小结:
- 核心掌握如何进入运行中的容器。
- exec
- -it 交互模式分配终端(命令行)
- /bin/bash进不去可以改为/bin/sh
7) 案例07: 容器的自启动
sh
重启docker服务后容器都是退出状态(关闭)
通过docker start 一个一个启动容器。
docker start nginx_v3
docker run 的时候加上--restart=always,设置容器什么时候自动运行。
docker run -d -p 8850:80 --restart=always --name nginx_v4 nginx:1.24
通过systemctl restart docker 测试
8)案例08:查看镜像
sh
docker images === docker image ls
9) 案例09:拉取镜像
- 从镜像仓库中下载镜像。
sh
docker pull nginx:alpine
docker images |grep nginx
nginx 1.24 b6c621311b44 5 weeks ago 142MB
nginx 1.24-alpine 55ba84d7d539 8 weeks ago 41.1MB
nginx alpine cc44224bfe20 19 months ago 23.5MB
nginx latest 605c77e624dd 19 months ago 141MB
10)案例10:删除镜像
sh
docker rmi openjdk:10
注意要把名字和后边的数字连起来
11)案例11:启动系统镜像
sh
#1.
docker run -itd --name centos_7_v1 centos:7
#2.
docker ps |grep centos
加上-it即可。
12) 小结
docker镜像操作 | 指令 |
---|---|
查看 | docker images |
下载 | docker pull |
删除 | docker rmi(如果镜像有对应的容器,则无法删除。 |
Docker容器操作 | 指令 | 参数 |
---|---|---|
启动容器 | docker run | -d -p --name --restart -e -itd |
查看容器 | docker ps | -a |
删除容器 | docker rm | -f |
进入容器 | docker exec | -it xxx /bin/bash或/bin/sh |
1.5 Docker初步自定义镜像:案例12
目标:我们找到的镜像无法直接瞒足我们的需求。
解决:自定义镜像。
- 任务目标:nginx镜像包含bird代码,小鸟飞飞代码,选择nginx:1.24。bird.zip
1)启动ngx容器
sh
#1.启动
docker run -d -p 8080:80 --name bird_v1 nginx:1.24
#2.检查
docker ps |grep bird
2) 连接到容器中
-
窗口1:链接到容器中
shdocker exec -it bird_v1 /bin/bash
-
窗口2
-
发送bird目录下面的代码到容器中的站的目录 /usr/share/nginx/html/
shunzip bird.zip cd bird/
-
- 上传,把宿主机中的文件上传到容器中:
docker cp . bird_v1:/usr/share/nginx/html/
#上传:docker cp 宿主机目录或文件 容器名:容器路径 ※※※※※
#下载:docker cp 容器名:容器路径 宿主机目录或文件
3)进行测试
- http://10.0.0.62:8080/
- 测试成功表示:
- nginx服务是ok.
- nginx+代码也是ok.
4)保存镜像
- 把已经的容器保存成镜像。
- 把容器保存成镜像
- 语法:
docker commit 容器名字 分类:名字版本
- 保存:
docker commit bird_v1 oldboydiy:lidao_bird_v1
- 语法:
- 检查是否有镜像:
docker images |grep lidao
5)根据新的镜像创建容器并测试
sh
docker run -d -p 8081:80 --name diy_bird_v1 oldboydiy:lidao_bird_v1