docker的管理【镜像的生成(基于已有镜像、基于本地模板、基于dockerfile工具)】

docker的管理

一、dockerfile的认识

1、镜像dockerfile生成注意事项:

【1】dockerfile中的每个指令都会创建一个新的镜像层
【2】镜像层将被缓存和复用
【3】当dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存会失效
【4】某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效
【5】镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像依然会包含该文件

2、Dockerfile脚本分为四层【从下往上】
CMD ["./run.sh"]      文件格式为:json
VOLUME /data          文件格式为:json
ADD run.sh /            
FROM centos:7

——————————————————————————

二、镜像的创建

应用发布的标准格式,支撑一个docker容器的运行,创建的三种方法:

1、基于已有镜像创建

将容器里面运行的程序以及运行环境打包生成新的镜像

docker commit [选项] 容器ID/名称  仓库名称:[标签]
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行
docker create -it centos /bin/bash
docker commit -m "new" -a "boke" c83aee844 boke:test
docker images | grep boke
2、基于本地模板创建
【1】使用wget命令导入为本地镜像
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
【2】通过导入操作系统模板文件生成新的镜像
cat debian-7.0-x86-minimal.tar.gz |docker import - boke:new
【3】导入成功后可查看本地镜像信息
docker images | grep new
3、基于dockerfile创建

dockerfile是由一组指令组成的文件,dockerfile结构有四部分
1】基础镜像信息
2】维护者信息
3】镜像操作指令
4】容器启动时执行指令
dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释,dockerfile操作指令【注意,每条指令要大写】

FROM 镜像:指定新镜像所基于的镜像,第一条指令必须是from,每创建一个镜像就需要一条from指令

MAINTAINER 名字:说明镜像的维护人信息

RUN:在做基于的镜像上执行命令,并提交新的镜像中

CMD ["要运行的程序","参数1","参数2"]:指令启动容器时要运行的命令或脚本,dockerfile只能有
一条cmd命令,如果指定多条则只能最后一条被执行

ENTRYPOINT类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,
而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。但是, 如果运行 docker run 时使
用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
格式:
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
假设已通过 Dockerfile 构建了 nginx:test 镜像:
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 
1、不传参运行
$ docker run  nginx:test
容器内会默认运行以下命令,启动主进程。
nginx -c /etc/nginx/nginx.conf
2、传参运行
$ docker run  nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)
nginx -c /etc/nginx/new.conf
        
EXPOSE 端口号:指定新镜像加载到docker时要开启的端口号,内端口

ENV 环境变量 变量值:设置一个环境变量值,会被后面的run使用

ADD 源文件/目录 目标文件/目录:将宿主机的源文件复制到容器中的目标文件

COPY 源文件/目录 目标文件/目录:将容器中的源文件复制到容器中的目标文件

VOLUME [ "目录" ]:在容器中创建一个挂载点

USER 用户名/uid:指定运行时的用户

WORKDIR 路径:为后续的run、cmd、entrypoint指定工作目录

ONBUILD 命令:指定所生成的镜像为一个基础镜像时所要运行的命令

HEALTHCHECK:健康检查
【1】安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
【2】设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
【3】安装docker并设置为开机自启动
systemctl stop firewalld
setenforce 0
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
【4】镜像加速

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://730ykxsw.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
【5】网络优化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
service network restart
systemctl restart docker
【6】创建基础镜像
docker create -it centos:7 /bin/bash
docker start dockerID
【7】创建容器dockerfile站点
mkdir apache
cd apache
vim Dockerfile
#基于的基础镜像
FROM centos:7
MAINTAINER this is test
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
#相对路径位于当前目录,镜像当中的路径为绝对路径
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

//每执行一条指定会创建一个临时容器,这条指定完成之后会删除这个临时容器

【8】创建web站点
vim index.html
this is test
【9】创建启动脚本
vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
【10】生成镜像
docker build -t httpd:centos . 【注意点:"."】 
【11】新镜像运行容器【使用p指定端口,而P随机映射端口】
docker run -d -p 1216:80【前面为外端口】 httpd:centos
【12】测试在宿主机上面访问192.168.60.10:1216

在这里插入图片描述
——————————————————————————————————

三、docker的数据管理

数据管理操作,方便查看容器内产生的数据,多容器之间实现数据共享,两种管理方式;

【1】数据卷

宿主机与容器之间共享数据,想给容器中添加东西,直接在宿主机中添加
1】创建数据卷

docker run -d -v /data1 -v /data2 --name web -it httpd:centos /bin/bash

2】挂载主机目录作为数据卷

docker run -d -v /var/www:/data1 --name web1 -it httpd:centos /bin/bash
【2】数据卷容器

1】容器与容器之间共享数据,想更新某一服务只需更新一个容器

docker run --name web11 -v /data1 -v /data2 -it httpd:centos /bin/bash

2】新容器挂载数据卷容器

docker run -it --volumes-from web11 --name web11-1 -it httpd:centos /bin/bash

———————————————————————————————————————

四、私有仓库建立

【1】修改registries文件
docker pull registry【创建私有仓库的前提,5000端口号】
vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.60.10:5000"],
...............
}
systemctl restart docker
【2】创建registry容器
docker create -it registry /bin/bash
docker start registry
docker ps -a
【3】启动持续运行registry容器

//宿主机的/data/registry自动创建挂载容器中的/tmp/registry

docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry【镜像名】
【4】修改镜像的标签

//更改标记为192.168.60.100:5000/nginx

docker pull nginx
docker tag nginx:latest 192.168.60.10:5000/nginx
【5】上传镜像
docker push 192.168.60.10:5000/nginx
【6】获取私有仓库的列表【查看日志文件】
curl -XGET http://192.168.60.10:5000/v2/_catalog

//测试私有仓库的下载
docker pull 192.168.60.10:5000/nginx

————————————————————————

五、容器互联

【1】创建并运行容器取名web1,端口号自动映射
docker run -itd -P --name web1 centos /bin/bash
【2】创建并运行容器取名web2,连接web1和其通信
docker run -itd -P  --name web2 --link web1:web1 centos /bin/bash
【3】进web2容器ping web1容器
docker exec -it 81db4c07e4dd /bin/bash
ping web1

在这里插入图片描述

六、故障问题解决方案

【问题1】在查看仓库列表的时页面无法打开

在这里插入图片描述
分析:出现报错信息404,说明服务器无法正常提供信息,或是服务器无法回应,且不知道原因所返回的页面。所以上传镜像没有成功或者上传的镜像是无效的或者容器没有使用。

【解决方案】

检查镜像,容器是否正常
在这里插入图片描述

[root@localhost ~]# docker ps -a

在这里插入图片描述
在创建registry容器之后开启容器【这个步骤很容易忘记】

docker create -it registry /bin/bash
docker start registry
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值