Docker镜像创建三方法

Docker镜像的创建

操作 法1

基于已有的镜像容器进行创建(UP状态也可以创建 但最好不要)

docker create -it centos:7 /bin/bash

docker commit -m "new" -a "daoke" a5049eb22932 daoke:new

docker images (有镜像)

对应的daoke new 是这个

 

 

操作 法二

基于本地模板创建

debian 7.0拖入

cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:debian

docker images

有debian 版本的

 

法三

法三:基于Dockerfile创建 (从只有centos7的镜像-带有apache的镜像且加载为容器-自动运行apache-展现它的首页)

vim Dockerfile                                 

FROM centos:7                                 

MAINTAINER this is project

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

文件名必须是Dockerfile

基于的基础镜像

维护镜像的用户信息MAINTAINER后随便写

基于centos7系统的容器里 的 RUN+跟新yum源y

因为短暂在容器里所以用RUN 下载apache

暴露80端口(容器的)别人访问不了 需端口映射

加 写默认首页 添加到容器中某位置

启动apache脚本添加到 容器中的根目录下 (先在宿主目录下写好)

给脚本执行权限 (在容器中运行RUN)

(ADD宿主目录添加到容器中 EXPOSE暴露端口 RUN在容器中运行某条命令)

启动容器时自动执行脚本  脚本中写启动apache 启脚本就是启apache 后面就可以启动apache)

 

vim index.html

<h1>ky06</h1>

 

vim run.sh

#!/bin/bash

rm -rf /run/httpd/*

exec /usr/sbin/apachectl -D FOREGROUND

 

删掉所有的容器和镜像

docker stop a5049eb22932                    先停容器(centos7的 其他的已经删了)

docker rm a5049eb22932                      先删容器

docker rmi centos:7                           再删镜像

 

docker build -t httpd:centos .                   生成镜像

(xshell再开一个窗口 创建的过程中docker ps –a 刷新看 每层创建会产生临时容器 上一层创建的东西会包含在下一层中继续执行 关 开 做完后自动销毁)

docker ps -a    无容器

docker images  有镜像   centos7是之前的 httpd是构建后的镜像

 

 

(第一条 centos7中装apapche服务)

 

新镜像运行容器(-d启用守护进程 -p节点上暴露1216端口映射80端口(端口不能冲突))

docker run -d -p 1216:80 httpd:centos

docker ps –a   看看容器

 

 

有端口映射了(监听任意网段地址的1216端口 tcp协议)

用宿主机的浏览器 http://20.0.0.10:1216  访问到容器了(虚拟机上的apache迁移到了容器上了)

 

建立私有账户(因为镜像出来了 想传)

docker pull registry   下一个镜像 做镜像加速用的 私有仓库的端口 5000

vim /etc/docker/daemon.json

{

"insecure-registries":["20.0.0.10:5000"],

"registry-mirrors": ["https://6va2732o.mirror.aliyuncs.com"]

}

一个做私有仓库 一个做加速

systemctl restart docker                 (改了配文 重启)

docker create -it registry /bin/bash        registry镜像创建容器

docker ps –a

docker start 5fbfde1c19ab    docker ps –a(因为-it没加d守护进程 run可以弥补 里有d)

前面宿主机目录挂载到容器目里 互存都有

docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry  (最后rigistry镜像)  -v会自动建目录挂载且端口映射 宿主即目录挂载到tmp目录 哪儿存都有

 

上传(重新定义标签)

docker tag httpd:centos 20.0.0.10:5000/httpd   (改)原本名称 改成地址和端口 /想上传到仓库的名称

docker push 20.0.0.10:5000/httpd              (上传)

获取私有仓库列表

curl -XGET http://20.0.0.10:5000/v2/_catalog           (有 httpd)

 

从私有仓库下载

准备 容器剩httpd容器映射的即可 镜像剩registry因为私有仓库 centos原来就有不管

docker pull 20.0.0.10:5000/httpd    

docker images                           有映射的apche基于centos的镜像  所以删

 

 

裸金属要从私有仓库下载需要在这里要指向仓库的位置

 

 

 

 

 

 

数据卷 (宿主和容器共享)

 

 

 

节点中share目录挂载到cs7容器的tnp中 他俩同步变化(加减数据)

docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash (看图 且自动进容器了)

容器里/data1里有什么内容  裸金属外/www里就有什么同步上传更新删改

 

验证:cd data1/                     (容器里有data1)

echo "this is test" > test.txt

exit

cd /var/www/

ls

test.txt

 

 

 

 

 

 

数据卷容器容器和容器共享)data1关联tmp1 data2关联tmp2

 

关联就两个-v

docker run --name web100 -v /data1 -v /data2 -it centos:7 /bin/bash 数据卷容器

自己是db100

docker run -it --volumes-from web100 --name db1 centos:7 /bin/bash新容器挂载数据卷容器web100 (没有声明用data1 data2用1里面的data1 data2)

自己是db1

作用场景(100个相同网站 容器里数据同步 改一个即可)

端口映射

-P随机端口映射                  (从32768开始)

-p指定端口映射

docker images                   (看镜像)

docker run -d -P 20.0.0.10:5000/httpd     (端口映射)

docker ps -a        (看容器)

 

 docker run -d -P 20.0.0.10:5000/httpd    (再建一个端口映射,就是32769)

 

 

容器互联

docker run -itd -P --name web11 centos:7 /bin/bash (创建并运行容器取名web1,端口号自动映射)

docker ps –a                 (有名叫web11的容器)

 

 

docker run -itd -P --name web22 --link web11:web11 centos:7 /bin/bash   (link:后别名)

docker ps -a  (web22也有了)

 

 

docker exec -it f3965cf8c89e /bin/bash           进入web12

ping web11     (web11的地址就是172.17.0.6)

 

posted @ 2020-11-26 19:02  wqhao  阅读(517)  评论(0编辑  收藏  举报