1、docker的镜像管理

docker image --help

第八节  Docker镜像及容器管理_bash


docker images-->查看当前有哪些镜像

docker image build-->构建镜像这个构建的镜像来自dockerfile文件

docker image history---> 查看镜像的历史分层

docker image import--->导入来容器文件的系统到一个压缩的tar.gz 的文件

docker image inspect--->显示镜像的详细信息

docker image load--->加载镜像来自压缩的tar.gz的文件可以用于镜像迁移

docker image ls--->列出当前的所有镜像

docker image prune--->移除未使用镜像,一般指没有标记或者没有被引用的镜像

docker image pull--->下载一个镜像一般从镜像仓库去下载镜像

docker image push--->上传一个已经打过tag 标记的镜像【一般提交到镜像仓库里面】

docker image rm---> 删掉一个镜像

docker image save--->保存一个或者是多个镜像将其归档到一个文件tar.gz 文件里面

docker image tag--->给镜像打个标记【一般以仓库的FQDN名字开头】


docker pull mysql

docker history mysql

这个分层的下载的

第八节  Docker镜像及容器管理_nginx_02

搜索镜像  docker search   [OPTIONS] 镜像名字

查看官方镜像网址:https://hub.docker.com

第八节  Docker镜像及容器管理_docker_03

第八节  Docker镜像及容器管理_nginx_04


查看mysql镜像的历史信息docker history mysql

第八节  Docker镜像及容器管理_bash_05

查看mysql镜像的详细信息docker inspect mysql

第八节  Docker镜像及容器管理_bash_06

第八节  Docker镜像及容器管理_bash_07

使用镜像开辟容器

docker run -itd --name httpd-lyc-test -p 82:80 myhttpd:v1

docker exec -it 734f3227dd3f  /bin/bash

第八节  Docker镜像及容器管理_bash_08

删掉一个镜像docker rmi registry.cn-hangzhou.aliyuncs.com/liyingchun-images/mynginx:1.26

第八节  Docker镜像及容器管理_docker_09

导出一个镜像

docker image save-o httpd-lyc.tar.gz httpd

第八节  Docker镜像及容器管理_bash_10

导入一个镜像------------

先删除 nginx 镜像

docker rmi nginx:latest

再导入镜像

docker import httpd-lyc.tar.gz httpd:latest

第八节  Docker镜像及容器管理_nginx_11

【说明】
export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
文件大小不同:export导出的镜像文件体积小于save保存的镜像

是否可以对镜像重命名
docker import   可以为镜像指定新名称
docker load      不能对载入的镜像重命名

是否可以同时将多个镜像打包到一个文件中
docker export 不支持
docker save 支持


是否包含镜像历史
export导出(import导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录
和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作
而save保存(load加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)

应用场景不同
docker export的应用场景:主要用来制作基础镜像,比如我们从一个ubuntu镜像启动一个容器,然后安装一些软件和进行一些设置后,
使用docker export保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
docker save的应用场景:如果我们的应用是使用 docker-compose.yml编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。
这时就可以使用docker save将用到的镜像打个包,然后拷贝到客户服务器上使用docker load载入。
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

开机自启动(默认是docker启动 容器是不启动的)

docker run  -tid  --name nginx1-test1  -p  8888:80 --restart always nginx:1.26

第八节  Docker镜像及容器管理_docker_12

第八节  Docker镜像及容器管理_docker_13


2、docker的容器管理

docker容器管理命令

docker container 

第八节  Docker镜像及容器管理_nginx_14

docker container attach----进入依附这个容器里面
docker container commit----提交当前正在运行容器到本地镜像
docker container cp----从本机复制一个文件到容器,或者从容器复制一个文件到本机
docker container create---创建一个容器
docker container diff--检查容器里文件结构的更改
docker container exec---以命令行的方式进入这个容器
docker container export---导出这个容器
docker container inspect----列出展示容器的详细信息
docker container kill----杀掉这个容器
docker container logs---查看这个容器运行日志
docker container ls---查看当前正在运行容器
docker container pause---暂停一个或多个容器内的所有进程
docker container port---列出端口映射或容器的特定映射
docker container prune---取出所有停止的容器
docker container rename---从新命名一个容器
docker container restart---重新启动一个或多个容器
docker container rm----删除(移除)一个或多个容器
docker container run----在新容器中运行命令
docker container start-----启动一个或多个停止的容器
docker container stats----显示容器的实时流资源使用统计信息
docker container stop-----停止一个或多个运行容器
docker container top-----显示容器的正在运行的进程
docker container unpause----取消暂停一个或多个容器内的所有流程
docker container update-----更新一个或多个容器的配置
docker container wait----阻止一个或多个容器停止,然后打印退出代码
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
docker ps [OPTIONS]
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

第八节  Docker镜像及容器管理_bash_15

启动已停止运行的容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器
docker kill 容器ID或容器名
删除已停止的容器
docker rm 容器ID

一次性删除多个容器实例
docker rm -f $(docker ps -a -q)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
使用httpd镜像创建一个容器:
docker run    -itd             --name  httpd-test    -p      81:80                    httpd
              【后台运行】                容器名         端口【外部】:【内部】  【使用httpd镜像】

列出运行的容器
docker ps -l

进入一个容器
docker exec -ti   fd39eb602013   /bin/bash
                   【镜像ID】
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

第八节  Docker镜像及容器管理_nginx_16

第八节  Docker镜像及容器管理_docker_17

提交容器成为一个镜像

docker commit -a "wangshili" -m "this is test1" 093abd073378 myhttpd:v1

docker images 

第八节  Docker镜像及容器管理_nginx_18

容器log日志     

docker logs -f  ecbe75649505

第八节  Docker镜像及容器管理_docker_19

导出一个容器

docker container export -o nginx2-test2.tar.gz  421bf6128d13


导入容器

使用 docker import 命令则可将这个镜像文件导入进来

docker import nginx-test.tar mynginx:v1.21


复制一个文件到容器里面

docker container cp anaconda-ks.cfg 30cc9266185e:/

从容器里面复制文件到宿主机

docker container cp 30cc9266185e:/etc  /root


查看容器的映射对外端口:

docker port ecbe75649505


查看当前容器运行的主进程

docker top ecbe75649505


查看容器的是使用的资源

docker stats ecbe75649505  --no-stream

第八节  Docker镜像及容器管理_bash_20

停掉容器的内进程
docker container pause ecbe75649505
启动 容器内进程
docker container unpause ecbe75649505


停止,启动,删除容器
docker container stop ecbe75649505
启动容器
docker container start ecbe75649505
删除容器
docker container rm ecbe75649505
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.


3、产线问题及产线的注意细节

# 容器启动的时候,后面带不带/bin/bash有什么区别,产线里面经常会遇到这种问题
比如跑了nginx 一个带了/bin/bash 一个没带
但是一个能访问页面,一个访问不了
/bin/bash 会覆盖掉 history中cmd的命令,也就是Nginx没有启动
表面上来看其实是一样的没有区别。实际上cmd被覆盖掉了


系统级别容器,如centos 不带这个起不来 /bin/bash
docker run -itd --name centos-test centos
一般系统级别的容器都是自带的/bin/bash 自己启动
有的系统镜像是不自带的,要手动去指定


linxu下面有几个shell?
/bin/sh
/bin/bash  带tab键补全
/usr/bin/sh
/usr/bin/bash


docker stats --no-stream
docker stats 实时更新状态

docker  run -itd --name nginx2 # 容器名称
-p 2030:90
-e flyfish=zhangyya
# 产线上项目的时候,比如Jdbc 会给一个地址、链接,调这个env就可以了  docker exec -it 容器Id env 也可查看到
# 环境变量 可以进入容器echo $flyfish
-h nginx-web #容器内部名称
--restart=always  # 重启策略
nginx


但是往常我们进入容器 很多命令都做不到,原因就是因为我们没有弄到容器的最大权限,在rocky9这个已经不行了,但是在rocky8还是OK的
docker run -itd --name busybox-test busybox
这个命令启动了一个busybox的镜像,但是我们在里面什么都做不了,服务也起不了,因为没有权限


容器的最大shell:
/usr/sbin/init --privileges=true
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
docker-daemon.json各配置详解
 
{
    “api-cors-header”:"", ——————在引擎API中设置CORS标头
    “authorization-plugins”:[], ——————要加载的授权插件
    “bridge”:"", ————将容器附加到网桥
    “cgroup-parent”:"", ——————为所有容器设置父cgroup
    “cluster-store”:"", ——————分布式存储后端的URL
    “cluster-store-opts”:{}, ————————设置集群存储选项(默认map [])
    “cluster-advertise”:"", ————————要通告的地址或接口名称
    “debug”: true, ————————启用调试模式,启用后,可以看到很多的启动信息。默认false
    “default-gateway”:"", ——————容器默认网关IPv4地址
    “default-gateway-v6”:"", ——————容器默认网关IPv6地址
    “default-runtime”:“runc”, ————————容器的默认OCI运行时(默认为“ runc”)
    “default-ulimits”:{}, ——————容器的默认ulimit(默认[]“dns”: [“192.168.1.1”], ——————设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看。
    “dns-opts”: [], ————————容器 /etc/resolv.conf 文件,其他设置
    “dns-search”: [], ————————设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS不仅搜索host,还会搜
    索host.example.com 。 注意:如果不设置, Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。
    “exec-opts”: [], ————————运行时执行选项
    “exec-root”:"", ————————执行状态文件的根目录(默认为’/var/run/docker‘)
    “fixed-cidr”:"", ————————固定IP的IPv4子网
    “fixed-cidr-v6”:"", ————————固定IP的IPv6子网
    “data-root”:"/var/lib/docker", ————-Docker运行时使用的根路径,默认/var/lib/docker
    “group”: “”, ——————UNIX套接字的组(默认为“docker”)
    “hosts”: [], ——————设置容器hosts
    “icc”: false, ——————启用容器间通信(默认为true)
    “ip”:“0.0.0.0”, ————————绑定容器端口时的默认IP(默认0.0.0.0)
    “iptables”: false, ———————启用iptables规则添加(默认为true)
    “ipv6”: false, ——————启用IPv6网络
    “ip-forward”: false, ————————默认true, 启用 net.ipv4.ip_forward ,进入容器后使用 sysctl -a | grepnet.ipv4.ip_forward 查看
    “ip-masq”:false, ——————启用IP伪装(默认为true)
    “labels”:[“nodeName=node-121”], ————————docker主机的标签,很实用的功能,例如定义:–label nodeName=host-121
    “live-restore”: true, ——————在容器仍在运行时启用docker的实时还原
    “log-driver”:"", ——————容器日志的默认驱动程序(默认为“ json-file”)
    “log-level”:"", ——————设置日志记录级别(“调试”,“信息”,“警告”,“错误”,“致命”)(默认为“信息”)
    “max-concurrent-downloads”:3, ——————设置每个请求的最大并发下载量(默认为3)
    “max-concurrent-uploads”:5, ——————设置每次推送的最大同时上传数(默认为5)
    “mtu”: 0, ——————设置容器网络MTU
    “oom-score-adjust”:-500, ——————设置守护程序的oom_score_adj(默认值为-500)
    “pidfile”: “”, ——————Docker守护进程的PID文件
    “raw-logs”: false, ——————全时间戳机制
    “selinux-enabled”: false, ——————默认 false,启用selinux支持
    “storage-driver”:"", ——————要使用的存储驱动程序
    “swarm-default-advertise-addr”:"", ——————设置默认地址或群集广告地址的接口
    “tls”: true, ————————默认 false, 启动TLS认证开关
    “tlscacert”: “”, ——————默认 ~/.docker/ca.pem,通过CA认证过的的certificate文件路径
    “tlscert”: “”, ————————默认 ~/.docker/cert.pem ,TLS的certificate文件路径
    “tlskey”: “”, ————————默认~/.docker/key.pem,TLS的key文件路径
    “tlsverify”: true, ————————默认false,使用TLS并做后台进程与客户端通讯的验证
    “userland-proxy”:false, ——————使用userland代理进行环回流量(默认为true)
    “userns-remap”:"", ————————用户名称空间的用户/组设置
    “bip”:“192.168.88.0/22”, ——————————指定网桥IP
    “registry-mirrors”: ["https://registry.docker-cn.com"], ————————设置镜像加速
    “insecure-registries”: [“”], ———————设置私有仓库地址可以设为http
    “storage-opts”: [
    “overlay2.override_kernel_check=true”,
    “overlay2.size=15G”
    ], ————————存储驱动程序选项
    “log-opts”: {
    “max-file”: “3”,
    “max-size”: “10m”,
    }, ————————容器默认日志驱动程序选项
    “iptables”: false ————————启用iptables规则添加(默认为true)
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.

4、扩展内容

# 三表五链
iptables的概述
iptables 实际上就是一种包过滤型防火墙。 就是通过书写一些接受哪些包,拒绝哪些包的规则,实现数
据包的过滤。这些规则存储在专用的信息包过滤表中,而这些表集成在Linux 内核中。在信息包过滤表
中,规则被分组放在我们所谓的链(chain)中。
iptables的组成
iptables由两部分组成:
(1)framework: netfilter hooks function钩子函数,实现网络过滤器的基本框架
(2)rule utils: iptables 规则管理工具
iptables的三链五表
总体说来,iptables就是由“三表五链”组成。
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

第八节  Docker镜像及容器管理_docker_21

第八节  Docker镜像及容器管理_docker_22