docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)

docker镜像

制作镜像的过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cDpQCgHP-1600703877273)(../AppData/Roaming/Typora/typora-user-images/image-20200921233109071.png)]

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个目录

数据卷与数据卷容器的区别:

数据卷是与宿主机连接;数据卷容器是容器与容器连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lXCGEqwU-1600703877276)(../AppData/Roaming/Typora/typora-user-images/image-20200921235447372.png)]

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 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 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 0
        TX 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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9HGVGFV-1600703877283)(C:\Users\19437\AppData\Roaming\Typora\typora-user-images\image-20200921092656699.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M7ljUGkK-1600703877286)(C:\Users\19437\AppData\Roaming\Typora\typora-user-images\image-20200921094650498.png)]

数据卷容器

场景:可以通过数据卷容器共享就可以跟新一个容器让其他所有的容器更新

创建数据卷容器

[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"]
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LsckCGfC-1600703877292)(C:\Users\19437\AppData\Roaming\Typora\typora-user-images\image-20200921101154316.png)]

注意:逗号一定要加不然报错

开启服务

[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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NE0lYcZn-1600703877297)(C:\Users\19437\AppData\Roaming\Typora\typora-user-images\image-20200921105429304.png)]

web12

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XNKUChes-1600703877299)(C:\Users\19437\AppData\Roaming\Typora\typora-user-images\image-20200921105435211.png)]

这里172.17.0.4是哪里来的那,其实是docker0网卡,这个网卡充当这网关,网关并分配给容器地址:如web22分配了127.17.0.4

如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LoqGrlT8-1600703877301)(../AppData/Roaming/Typora/typora-user-images/image-20200921112227253.png)]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值