Docker&容器指令、镜像指令

1.容器架构

1.1 IAAS PAAS Saas

  1. IAAS平台:基础设施,IDC机房的服务器出租,阿里云,云厂商.云服务器
  2. PAAS平台:服务/运行环境是ok
  3. SAAS平台:服务已经准备好,您直接用,具体产品,processon,wps,亿图.

1.2 什么是容器

  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 查看数据卷空间
posted @ 2024-10-18 15:51  Nolen_H  阅读(34)  评论(0)    收藏  举报