文章目录

  • 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创建,基于本地模板创建,端口映射,容器互联)相关推荐

  1. docker 查询或获取私有仓库(registry)中的镜像

    docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...

  2. docker 仓库镜像 替换_Docker私有仓库 Registry中的镜像管理

    这里主要介绍Registry v2的版本 查看Registry仓库中现有的镜像: # curl -XGET http://10.0.30.6:5000/v2/_catalog # curl -XGET ...

  3. 模板会有多层镜像_创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建,本博文讲解前两种。基于已有镜像的容器创建该方法是使用docke...

    创建镜像的方法有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建,本博文讲解前两种. 基于已有镜像的容器创建 该方法是使用docker commit命令,其命令格式为: d ...

  4. 配置私有仓库(使用registry镜像搭建一个私有仓库)

    在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便:另外有时候只是希望在内部用户之间进行分享,不希望暴露出去.这种情况下,就有必要搭建一个本地 ...

  5. Docker容器之harbor私有仓库部署与管理

    Docker容器之harbor私有仓库部署与管理 前言 一.Harbor概述 二.Harbor的特性 三.Harbor的构成 四.Harbor私有仓库搭建 (1)安装docker-compose (2 ...

  6. 【Docker】Registry搭建私有仓库、证书认证、用户登录认证

    一.Docker Registry工作原理 02_Docker Registry角色 Docker Registry有三个角色,分别是index.registry和registry client. i ...

  7. docker之搭建gitlab私有仓库服务

    简单三步搭建docker之搭建gitlab私有仓库服务 服务配置:1c2g+2g虚拟内存,服务启动大概需要3.x g内存 内存不足可配置虚拟使用--memory=10M --memory-swap=- ...

  8. springboot项目打镜像推到私有仓库

    1. 背景 springboot项目打镜像发布到仓库的大流程有两种: 第一种:本地开发环境 ---> 服务器 ---->  私有镜像仓库 1.1 流程:在本地开发环境打镜像包,并通过doc ...

  9. docker怎么登出私有仓库

    要登出私有仓库,需要使用 docker logout 命令. 命令格式为: docker logout [私有仓库地址] 例如,登出 Docker Hub 的私有仓库: docker logout h ...

最新文章

  1. Oracle正则表达式匹配中文的问题
  2. IntelliJ IDEA使用技巧(七)——恢复代码的方法(进阶篇)
  3. 雅虎公司C#笔试题,看看你能解答多少? [含答案]
  4. php打印文件目录结构,php和java关于目录树(列出某一目录下文件结构)
  5. HtmlUnit爬取页面列表链接
  6. 时间序列相关算法与分析步骤
  7. c# string总结
  8. SAP Fiori refreshSecurityToken
  9. RabbitMQ播放模块! 构架
  10. java jsp常见问题_jsp和servlet常见问题总结
  11. HDU---1166---敌兵布阵
  12. 试点高校网络教育部分公共基础课统一考试计算机应用基础答案,2019年6月试点高校网络教育部分公共基础课统一考试顺利结束...
  13. Java 和 Python 并列第二、Julia 下滑,揭晓 RedMonk 最新编程语言榜单!
  14. Eclipse下Java项目转web项目
  15. 32、[源码]-AOP原理-创建AOP代理
  16. android file hascode,AndroidStudio集成Lombok
  17. 计算机网络基础应用课程标准,王建波《计算机网络基础》课程标准.doc
  18. java web整合开发完全自学手册pdf_《JavaScript完全自学手册》PDF 下载
  19. java视频教程 设计模式,Gof设计模式视频课程(Java实现)
  20. 2020下半年软考中级网工答案

热门文章

  1. 使用 LLVM 实现一个简单编译器
  2. Python—进程、线程、协程
  3. 无招胜有招之Java进阶JVM(四)内存模型plus
  4. javaweb----DAO模型设计
  5. leetcode 485. 最大连续 1 的个数(Java版)
  6. 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析
  7. vb循环 Do While…Loop 语句/Do Until…Loop语句
  8. 你真的了解java class name吗?
  9. java并发中的Synchronized关键词
  10. php 机数,PHP实现自动刷数和“灌水”机