1.容器架构
1.1 IAAS PAAS Saas
- IAAS平台:基础设施,IDC机房的服务器出租,阿里云,云厂商.云服务器
- PAAS平台:服务/运行环境是ok
- SAAS平台:服务已经准备好,您直接用,具体产品,processon,wps,亿图.
1.2 什么是容器
- 容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止.
- 细致:容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理,相 当于一个mini的系统.
2.Docker
2.1 安装docker
1.#安装前先卸载操作系统默认安装的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc
2.#安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
#添加 Docker 官方 GPG key (可能国内现在访问会存在问题)
#curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
3.阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#添加 apt 源:
#Docker官方源
#echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新源
sudo apt update
sudo apt-get update
5.#更新源
sudo apt update/sudo apt-get update
6.#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
7.#查看Docker版本
sudo docker version
8.#查看Docker运行状态
sudo systemctl status docker
9.#安装命令补全工具
sudo apt-get install bash-completion
10.开启nat转发
#注意事项: 此处使用到了docker -p端口映射公共,需要使用iptables的
#nat功能,需要开启系统的内核转发功能.
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
net.ipv4.ip_forward = 1
2.2 Docker-runc升级 【做之前先查看当前的runc版本】
升级runc #CVE-2024-21626 docker runc漏洞 影响范围是runc v1.0.0 -- v1.1.11之间
[root@docker03 ~]# docker ps -qa |xargs docker stop
[root@docker03 ~]# systemctl stop docker
[root@docker03 ~]# tar xf docker-27.0.3.tgz
[root@docker03 ~]# ll docker
总用量 194132
-rwxr-xr-x 1 1000 1000 39161856 6月 29 08:05 containerd
-rwxr-xr-x 1 1000 1000 12496896 6月 29 08:05 containerd-shim-runc-v2
-rwxr-xr-x 1 1000 1000 19361792 6月 29 08:05 ctr
-rwxr-xr-x 1 1000 1000 38498840 6月 29 08:05 docker
-rwxr-xr-x 1 1000 1000 71298872 6月 29 08:05 dockerd
-rwxr-xr-x 1 1000 1000 708448 6月 29 08:05 docker-init
-rwxr-xr-x 1 1000 1000 1979949 6月 29 08:05 docker-proxy
-rwxr-xr-x 1 1000 1000 15275560 6月 29 08:05 runc
[root@docker03 ~]# chown root.root docker/*
[root@docker03 ~]# mv /bin/runc /bin/runc-bak-1.1.5
[root@docker03 ~]# mv docker/runc /bin/runc
[root@docker03 ~]# /bin/runc --version
runc version 1.1.13
commit: v1.1.13-0-g58aa920
spec: 1.0.2-dev
go: go1.21.11
libseccomp: 2.5.4
[root@docker03 ~]# systemctl start docker
3.Docker 镜像&容器命令
3.1 镜像命令
docker search 搜索镜像, 优先选官方,stars数量多
docker pull 拉取镜像(下载镜像),注意版本
docker pull nginx === docker pull nginx:latest 最新版
docker pull nginx 下载ngx最新版本 docker pull nginx:latest
docker push 推送镜像(上传镜像)
docker SL大法
docker load 导入镜像
例子: docker load -i docker_nginx.tar.gz
docker save 导出镜像
例子: docker save centos:7 -o docker_centos7.tar.gz
镜像名
docker images =docker image ls 查看镜像列表
docker rmi 删除镜像
#jq镜像过滤信息 该命令需要yum install -y jq 安装使用
docker inspect 查看镜像详细信息
docker inspect mysql:8.0-debian | jq .[].ContainerConfig.Env | jq .[0]
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
结果中最外面是: [] 所以先用jq .[]进入到 []中 .ContainerConfig 进入到Con..fig中 .ENV 进入到ENV中 .[0] 显示数组0的内容
[ #数据为列表形式
[0]
[1]
[2]
]
结果中{} 可以用jq .ContainerConfig形式取出,对于缩进的需要先访问上级然后继续访问.
docker export 容器名字 -o export.tar #把容器保存为镜像压缩包和save用法一样区别是save是保存镜像、export保存容器
docker import export.tar #导入镜像
docker tag #给镜像打标签
3.2 容器指令
1.docker ps 查看容器列表(默认查看运行中的容器) -a 查看所有容器
2.
docker run 创建并运行容器
docker run -d -p 80:80 --name ngx_v1 nginx:1.24
docker run -d 后台运行 -p 映射 宿主机:容器 --name 给容器指定名字,容器不同. 镜像
经常用于镜像检测
docker run -it --name 容器名 镜像名:tag /bin/bash 提供终端
docker run -d --name 容器名 镜像名:tag tail -f /dev/null 后台持续运行
#显示用户只能通过宿主机的某个网卡连接这个端口.
docker run -d -p 172.16.1.81:80:80 --name ngx_v1 nginx:1.24
docker create name创建容器
docker start name启动容器
3.分配容器终端
docker -itd --name centos_back centos:7 /bin/bash
-itd 容器后台运行同时进入容器(分配终端),可以用于让没有服务系统镜像后台运行.
4.停止容器
docker stop name停止容器
docker restart name重启容器
docker kill name强制停止容器
5.删除容器
docker rm 删除容器
批量删除所有容器 docker rm -f `docker ps -a -q`
docker exec 进入正在运行的容器(分配一个新终端)
例子: docker exec -it 容器id/容器名字/bin/bash(/bin/sh)
docker attach 进入正在运行的容器(使用相同的终端),偷偷离开的快捷键ctrl +p,ctrl +q
6.查看容器日志
docker logs name
7.commit 把容器生成镜像
docker commit ngx_bird_v1 web:ngx_bird_v1
容器名字 镜像名字
8.限制最大使用的内存50MB,最多使用1个cpu核心.
docker run -d -p 89:80 --name "ngx_1.24_limit" -m 50MB --cpus 1 nginx:1.24-alpine-new
docker update -m 50m --memory-swap 100m ngx_1.24_alpine_v2 #update动态修改容器的配置
9.查看容器状态
docker stats/docker top
10.docker cp 传输文件到容器里
docker cp index.html ngx_1.24_alpine:/usr/share/nginx/html/
11.创建数据库容器持久化
11.1 创建容器名指定持久化目录挂载
docker run -d -p 3306:3306 --name db_8.0_v2 --restart always -v /app/data/db80/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=1 mysql:8.0-debian
删除该容器再创建后连接进入容器发现建立的库还在
11.2 创建数据卷空间
docker volume create mysql_data
#可以先创建或者再运行容器的时候直接映射到容器里,因为数据卷空间或者目录不存在是运行容器,会直接创建挂在空间或目录
运行容器 数据卷空间:容器挂载目录 #数据均空间或者目录不存在
docker run -d -e MYSQL_ROOT_PASSWORD=1 -v mysql_data:/var/lib/mysql --name mysql_8.0_v1 mysql:8.0-debian
docker volume ls 查看数据卷空间