docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)
文章目录
- docker镜像
- 制作镜像的过程
- 基于已有镜像创建
- 基于本地模板创建
- 基于Dockerfile创建
- Dockerfile操作指令
- Docker的数据管理
- 数据卷
- docker的网络通信
- 容器互联
- 配置docker
- 基于已有镜像创建实验过程
- 基于本地模板创建实验过程
- 基于基础镜像实验过程
- Docker数据卷
- 验证阶段
- 数据卷容器
- 建立私有仓库
- 删除与恢复
- 端口映射
- 容器互联
docker镜像
制作镜像的过程
Docker镜像的创建
●应用发布的标准格式
●支撑一个Docker容器的运行
Docker镜像的创建方法
●基于已有镜像创建
●基于本地模板创建
●基于Dockerfile创建
基于已有镜像创建
将容器里面运行的程序及运行环境打包生成新的镜像
docker commit[选项]容器ID/名称仓库名称:[标签]
- -m说明信息
- -a作者信息
- -p生成过程中停止容器的运行
基于本地模板创建
- 通过导入操作系统模板文件生成新的镜像
- 使用wget命令导入为本地镜像
wget http://download.openvz.org/template/precreated/debian-7.O-x86-minimal.tar.gz
导入成功后可查看本地镜像信息
docker images lgrep new
基于Dockerfile创建
Dockerfile是由一组指令组成的文件
Dockerfile结构四部分
基础镜像信息
维护者信息
镜像操作指令
容器启动时执行指令
Dockerfile每行支持一条指令,每条指令可携带多个参
数,支持使用以“#“号开头的注释
Dockerfile操作指令
指令 | 含义 |
---|---|
FROM镜像 | 指定新镜像所基于的境像,第一条指令必须为FROM指令,每创建一个镜像就需要—条FROM指令。 |
MAINTAINER名字 | 说明新镜像的维护人信息 |
RUN命令 | 在所基于的镜像上执行命令,并提交到新的镜像中 |
CMD[“要运行的程序“,”参数1,“参数2“] | 指令启动容器时要运行的命令或者脚本,Dockerfile只能有,一条CMD命令,如果指定多条则只能最后一条祧执行 |
EXPOSE端口号 | 指定新镜像加载到Docker时要开启的端口 |
ENV环境变量变量值 | 设置一个环境变量的值,会被后面的RUN使用 |
ADD 源文件/目录目标文件/目录 | 将源文件复制到目标文件,源文件要与Dockerfile位于相同,目录中,或者是一个URL |
COPY 源文件/目录目标文件/目录 | 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中 |
VOLUME[“目录“] | 在容器中创建一个挂载点 |
USER 用户名/UID | 指定运行容器时的用户 |
WORKDIR路径 | 为后续的RUNCMD、ENTRYPOINT指定工作目录 |
ONBUILD命令 | 指定所生成的镜像作为一个基础镜像时所要运行的命令 |
HEALTHCHECK | 健康检查 |
ADD与RUN的区别:
ADD是外部宿主机上某一个文件复制到容器上面
RUN是在容器的路径复制到自己的另一个路径
Docker的数据管理
数据管理操作
方便查看容器内产生的数据
多容器间实现数据共享
两种管理方式
●数据卷
●数据卷容器
数据卷
数据卷是一个提供容器使用的特殊目录
创建数据卷
docker run -d -v /data1-v /data2 --name web
httpd:centos
挂载主机目录作为数据卷
docker run -d -v /var/www:/data1 --name web-1
httpd:centos
-v:提供2个目录
数据卷与数据卷容器的区别:
数据卷是与宿主机连接;数据卷容器是容器与容器连接
docker的网络通信
端口映射
●端口映射机制将容器内的服务提供给外部网络访问
●可随机或指定映射端口范围
docker run -d -P httpd:centos
docker run -d -p 49888:80 httpd:centos
容器互联
●在源容器和接收容器间建立一条网络通信隧道
●使用docker run命令–link选项实现容器间互联通信
实现容器互联
docker run -d -P --name web1 httpd:centos
docker run -d -P --name web2 --link web1:web1
httpd:centos
docker exec -it web2 /bin/bash
ping web1
配置docker
[root@localhost ~]# yum install -y yum-untils device-mapper-persistent-data lvm2
设置阿里云镜像源
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost yum.repos.d]# yum install docker-ce
开启容器
[root@localhost ~]# systemctl start docker.service
镜像加速cd /etc/docker/tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://ctzniuyu.mirror.aliyuncs.com"]
}
EOF[root@localhost docker]# systemctl daemon-reload
[root@localhost docker]# systemctl restart docker
----------------------网页优化-----------[root@localhost docker]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1[root@localhost docker]# sysctl -p
[root@localhost docker]# service network restart
[root@localhost docker]# systemctl restart docker
查看docker是否开启
[root@localhost docker]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:fe:77:f0:77 txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
基于已有镜像创建实验过程
下载镜像
[root@localhost docker]# docker pull centos:7
创建容器
[root@localhost docker]# docker create -it centos:7 /bin/bash
开启容器
[root@localhost docker]# docker start 394a829c69f5
创建镜像
[root@localhost docker]# docker commit -m "new" -a "daoke" 394a829c69f5 daoke:test
查看镜像
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke test 6874a5a17024 About a minute ago 203MB
centos 7 7e6257c9f8d8 5 weeks ago 203MB
基于本地模板创建实验过程
放入模板进去debian-7.0-x86-minimal.tar.gz
[root@localhost opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
基于基础镜像实验过程
创建Dockerfile
[root@localhost opt]# mkdir apache
[root@localhost opt]# cd apache/
[root@localhost apache]# vim Dockerfile (名字不可以改必须是这个)
FROM centos:7
#维护镜像的用户信息
MAINTAINER THIS IS ky03
RUN yum -y update
RUN yum -y install httpd
#开启80端口
EXPOSE 80
#复制网址首页文件
ADD index.html /var/www/html/index.html
#执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器执行脚本
CMD ["/run.sh" ]
编写网址
[root@localhost apache]# vim index.html
<h1>this is 01web </h1>
编写启动命令
[root@localhost apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
生成镜像
[root@localhost apache]# docker build -t httpd:centos .
//映射端口运行容器
docker run -d -p 8080:80 httpd:centos
画图理解
我们映射的是8080给外网可以访问
打开游览去查看
http://192.168.136.88:8080
Docker数据卷
场景:我们要添加一些插件可以直接在/var/www中写入就可以在容器中添加
可以直接把宿主机/var/www文件挂载到容器/data1
[root@localhost ~]# docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
可以看到/var/www已经生成
验证阶段
1和2是相同中终端
开启一台相同的终端(192.168.136.30-1)
[root@176ee193587a /]# cd data1/
[root@176ee193587a data1]# touch abc.txt
[root@176ee193587a data1]# ls
abc.txt
开启一台相同的终端(192.168.136.30-2)
[root@localhost ~]# cd /var/www/
[root@localhost www]# ls
abc.txt
数据卷容器
场景:可以通过数据卷容器共享就可以跟新一个容器让其他所有的容器更新
创建数据卷容器
[root@localhost ~]# docker run --name web100 -v /data1 -v /data2 -it centos:7 /bin/bash
新容器挂载数据卷web100
docker run -it --volumes-from web100 --name web99 centos:7 /bin/bash
查看是否成功
建立私有仓库
下载镜像 (端口号5000)
[root@localhost apache]# docker pull registry
添加私库加速
{"insecure-registries":["192.168.136.30:5000" ],"registry-mirrors": ["https://ctzniuyu.mirror.aliyuncs.com"]
}
注意:逗号一定要加不然报错
开启服务
[root@localhost ~]# systemctl restart docker
查看状态
[root@localhost apache]# systemctl status docker
创建容器
[root@localhost apache]# docker create -it registry /bin/bash
开启容器
[root@localhost ~]# docker start 544bddf8706a
544bddf8706a
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
544bddf8706a registry "/entrypoint.sh /bin…" About a minute ago Exited (127) 34 seconds ago distracted_wu
我们发现还是没有开启
是应为没有添加守护进程
[root@localhost ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
[root@localhost ~]# docker ps -a 查看已经开启
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f17e9bddded registry "/entrypoint.sh /etc…" 20 seconds ago Up 19 seconds
上传仓库
添加nginx镜像
[root@localhost apache]# docker pull nginx
上传到私库
docker tag nginx:latest 192.168.136.30:5000/nginx
显示上传内容(上传没有成功)
[root@localhost ~]# curl -XGET http://192.168.136.30:5000/v2/_catalog
{"repositories":[]}
测试私有库仓库下载
[root@localhost ~]# docker push 192.168.136.30:5000/nginx
显示上传成功
[root@localhost ~]# curl -XGET http://192.168.136.30:5000/v2/_catalog
{"repositories":["nginx"]}
删除与恢复
删除私库
[root@localhost apache]# docker rmi nginx:latest
[root@localhost apache]# docker rmi 192.168.136.30:5000/nginx:latest
上传恢复私库
[root@localhost apache]# docker pull 192.168.136.30:5000/nginx
端口映射
[root@localhost ~]# docker run -d -P 192.168.136.30:5000/nginx
42ebf8922afd4c486947f83d3b71eb5f4460278be6abafbd0af1dd7e6e3bdc84
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42ebf8922afd 192.168.136.30:5000/nginx "/docker-entrypoint.…" 32 seconds ago Up 30 seconds 0.0.0.0:32768->80/tcp affectionate_yalow
容器互联
连接web11和其他通信(创建并运行web1,端口号自动映射)
[root@localhost apache]# docker run -itd -P --name web11 centos:7
进入容器
[root@localhost ~]# docker exec -it 5dc597e17ad5 /bin/bash
在开启一台终端
[root@localhost ~]# docker run -itd -P --name web22 --link web11:web11 centos:7 /bin/bash
进入容器
[root@localhost ~]# docker exec -it a553cf01f492 /bin/bash
web22可以ping同文本11容器可以互通
[root@a553cf01f492 /]# ping web11
PING web11 (172.17.0.4) 56(84) bytes of data.
64 bytes from web11 (172.17.0.4): icmp_seq=1 ttl=64 time=0.099 ms
64 bytes from web11 (172.17.0.4): icmp_seq=2 ttl=64 time=0.252 ms
查看各容器端口
[root@5dc597e17ad5 /]# yum -y install net-tools
web11
web12
这里172.17.0.4是哪里来的那,其实是docker0网卡,这个网卡充当这网关,网关并分配给容器地址:如web22分配了127.17.0.4
如下图:
docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)相关推荐
- docker 查询或获取私有仓库(registry)中的镜像
docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...
- docker 仓库镜像 替换_Docker私有仓库 Registry中的镜像管理
这里主要介绍Registry v2的版本 查看Registry仓库中现有的镜像: # curl -XGET http://10.0.30.6:5000/v2/_catalog # curl -XGET ...
- 模板会有多层镜像_创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建,本博文讲解前两种。基于已有镜像的容器创建该方法是使用docke...
创建镜像的方法有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建,本博文讲解前两种. 基于已有镜像的容器创建 该方法是使用docker commit命令,其命令格式为: d ...
- 配置私有仓库(使用registry镜像搭建一个私有仓库)
在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便:另外有时候只是希望在内部用户之间进行分享,不希望暴露出去.这种情况下,就有必要搭建一个本地 ...
- Docker容器之harbor私有仓库部署与管理
Docker容器之harbor私有仓库部署与管理 前言 一.Harbor概述 二.Harbor的特性 三.Harbor的构成 四.Harbor私有仓库搭建 (1)安装docker-compose (2 ...
- 【Docker】Registry搭建私有仓库、证书认证、用户登录认证
一.Docker Registry工作原理 02_Docker Registry角色 Docker Registry有三个角色,分别是index.registry和registry client. i ...
- docker之搭建gitlab私有仓库服务
简单三步搭建docker之搭建gitlab私有仓库服务 服务配置:1c2g+2g虚拟内存,服务启动大概需要3.x g内存 内存不足可配置虚拟使用--memory=10M --memory-swap=- ...
- springboot项目打镜像推到私有仓库
1. 背景 springboot项目打镜像发布到仓库的大流程有两种: 第一种:本地开发环境 ---> 服务器 ----> 私有镜像仓库 1.1 流程:在本地开发环境打镜像包,并通过doc ...
- docker怎么登出私有仓库
要登出私有仓库,需要使用 docker logout 命令. 命令格式为: docker logout [私有仓库地址] 例如,登出 Docker Hub 的私有仓库: docker logout h ...
最新文章
- Oracle正则表达式匹配中文的问题
- IntelliJ IDEA使用技巧(七)——恢复代码的方法(进阶篇)
- 雅虎公司C#笔试题,看看你能解答多少? [含答案]
- php打印文件目录结构,php和java关于目录树(列出某一目录下文件结构)
- HtmlUnit爬取页面列表链接
- 时间序列相关算法与分析步骤
- c# string总结
- SAP Fiori refreshSecurityToken
- RabbitMQ播放模块! 构架
- java jsp常见问题_jsp和servlet常见问题总结
- HDU---1166---敌兵布阵
- 试点高校网络教育部分公共基础课统一考试计算机应用基础答案,2019年6月试点高校网络教育部分公共基础课统一考试顺利结束...
- Java 和 Python 并列第二、Julia 下滑,揭晓 RedMonk 最新编程语言榜单!
- Eclipse下Java项目转web项目
- 32、[源码]-AOP原理-创建AOP代理
- android file hascode,AndroidStudio集成Lombok
- 计算机网络基础应用课程标准,王建波《计算机网络基础》课程标准.doc
- java web整合开发完全自学手册pdf_《JavaScript完全自学手册》PDF 下载
- java视频教程 设计模式,Gof设计模式视频课程(Java实现)
- 2020下半年软考中级网工答案
热门文章
- 使用 LLVM 实现一个简单编译器
- Python—进程、线程、协程
- 无招胜有招之Java进阶JVM(四)内存模型plus
- javaweb----DAO模型设计
- leetcode 485. 最大连续 1 的个数(Java版)
- 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析
- vb循环 Do While…Loop 语句/Do Until…Loop语句
- 你真的了解java class name吗?
- java并发中的Synchronized关键词
- php 机数,PHP实现自动刷数和“灌水”机