一、dockerfile应用
通过dockerfile创建⼀个在启动容器时,就可以启动httpd服务的镜像
1、步骤
1.创建⼀个⽬录,⽤于存储Docker file所使⽤的⽂件
2.在此⽬录中创建Docker file⽂件,以及镜像制作所使⽤的⽂件
3.使⽤docker build创建镜像
4.使⽤创建的镜像启动容器(验证)
2.Docker file关键字
1.FORM 指定基础镜像为该镜像的最后修改版本
2.FROM <image :tag>指定基础镜像为该镜像的⼀个tag版本
3.MAINTAINER 指定镜像创建者,企业内部不⽤指定,对外发布也可以不指定
3.RUN 运⾏命令,安装软件
4.CMD 设置container启动时进⾏的操作,如果容器镜像中有这个命名,启动容器时,不要⼿动让容器执⾏其他命令
5.ENTRYPORINT(⼊⼝点)cmd每次只能执⾏⼀个指令, entrypoint可以多⾏执⾏。
6.USER设置容器进程的⼀些⽤户
7.EXPOSE 暴露端⼝ 指定容器需要映射到宿主机的端⼝
8.ENV 设置环境变量 -e
9.ADD 从宿主机src复制⽂件到容器的dest路径
10.volumn 指定挂载点
11.WROKDIR 切换⽬录
12.ONBUILD在⼦镜像中执⾏指令
使用Dockerfile创建httpd镜像
# 停止docker服务
[root@docker ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
# 删除docker文件
[root@docker ~]# rm -rf /var/lib/docker/*
# 启动docker服务
[root@docker ~]# systemctl start docker
# 拉取centos镜像
[root@docker ~]# docker pull centos
# 创建001目录
[root@docker ~]# mkdir 001
# 进到001目录下
[root@docker ~]# cd 001/
# 编辑启动脚本
[root@docker 001]# vim abc.sh
# !/bin/bash
rm -rf /run/httpd/*
exec /sbin/httpd -D FOREGROUND
# 查看创建的脚本
[root@docker 001]# ls
abc.sh
# 编辑index.html文件
[root@docker 001]# echo "httpd server is running" > index.html
[root@docker 001]# ls
abc.sh index.html
# 编辑Dockerfile文件
[root@docker 001]# vim Dockerfile
FROM centos:latest
MAINTAINER "centos httpd server"
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
RUN yum clean all && yum makecache
RUN yum -y install epel-release
RUN yum -y install httpd
ADD abc.sh /abc.sh
ADD index.html /var/www/html/index.html
RUN chmod -v +x /abc.sh
CMD ["/bin/bash","/abc.sh"]
# 初看当前的路径
[root@docker 001]# pwd
/root/httpd0
# 查看创建的文件
[root@docker 001]# ls
abc.sh Dockerfile index.html
# 创建镜像
[root@docker 001]# docker build -t centos:httpd .
# 查看镜像
[root@docker 001]# docker images
# 查看docker文件的变化
[root@docker 001]# ls /var/lib/docker/overlay2/
# 创建容器测试
[root@docker 001]# docker run -d --name c0 centos:httpd
d398df1d2b235ad09068fa3b84b9ad2e0c31c03815982a92882609055a04d9ae
# 查看容器
[root@docker 001]# docker ps --all
# 访问测试
[root@docker 001]# curl 172.17.0.2
httpd server is running
# 容器挂载
[root@docker 001]# docker run -d -v /opt/:/var/www/html/ -p80 --name c1 centos:httpd
cb8c1626ce9a6ea8986c40f0efa4f657192ff7babf9aecd4acbfcc115f7e5d83
[root@docker 001]# ls /opt/
assets containerd favicon.ico index.html
# 写测试内容
[root@docker 001]# echo "adsfadfafwqrdfqdsafdgdfsgda" > /opt/index.html
# 访问测试
[root@docker 001]# curl 172.17.0.2
adsfadfafwqrdfqdsafdgdfsgda
# 查看容器
[root@docker 001]# docker ps -all#浏览器访问
使用Dockerfile创建yum镜像
# 修改Dockerfile文件
[root@docker 001]# vim Dockerfile
FROM centos:latest
MAINTAINER "centos httpd server"
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
RUN yum clean all && yum makecache
RUN yum -y install epel-release
# 运行文件创建镜像
[root@docker 001]# docker build -t centos:yum .
# 查看镜像
[root@docker 001]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd ebbf109944f1 5 minutes ago 338MB
centos yum ee9375ac855c 5 minutes ago 272MB
centos latest 5d0da3dc9764 2 years ago 231MB
# 查看docker磁盘使用情况
[root@docker 002]# du -sh /var/lib/docker/overlay2/
1.1G /var/lib/docker/overlay2/
使用Dockerfile创建nginx镜像
# 创建目录
[root@docker ~]# mkdir 002
# 进到002目录下
[root@docker ~]# cd 002/
# 编辑Dockerfile文件
[root@docker 002]# vim Dockerfile
# 这里使用之前创建的yum镜像
FROM centos:yum
MAINTAINER 维护世界和平
RUN yum -y install nginx
RUN yum -y install epel-release
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
CMD /usr/sbin/nginx
# 运行Dockerfile文件-创建nginx镜像
[root@docker 002]# docker build -t centos:nginx .
# 查看镜像
[root@docker 002]# docker images
# 使用nginx镜像创建容器c1
[root@docker 002]# docker run -d --name nc centos:nginx
34bf6e6f1ecfcb0e1f717385a3553fe058bab65caa4603280951d98976efebe6
# 查看创建的容器
[root@docker 002]# docker ps --all
二、私有仓库
1.安装registry
# 查看安装的镜像
[root@docker ~]# docker images
2.创建容器,映射端⼝,挂载⽂件
# 创建挂载目录
[root@docker ~]# mkdir /regist
# 查看容器--全部删掉
[root@docker ~]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 创建容器,映射端⼝,挂载⽂件
[root@docker ~]# docker run -d --name r1 -v /regist/:/var/lib/registry -p5000:5000 registry:latest
# 查看创建的容器
[root@docker ~]# docker ps --all
# 访问目录页
[root@docker ~]# curl localhost:5000/v2/_catalog
{"repositories":[]}
3.浏览器访问
4.配置pull和push,修改daemon.json文件
[root@docker ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
],
"hosts": [
"tcp://0.0.0.0:2375",
"unix:///var/run/docker.sock"
],
"insecure-registries":[
"http://192.168.2.30:5000"
]
}
5.修改daemon.json文件,重启服务
[root@docker ~]# systemctl restart docker.service
6.启动registry容器
# 查看容器
[root@docker ~]# docker ps --all
# 启动r1容器
[root@docker ~]# docker start r1
r1
# 访问⽬录⻚
[root@docker ~]# curl localhost:5000/v2/_catalog
{"repositories":[]}
7.给yum镜像打标签
# 为要上传的镜像添加标记
[root@docker ~]# docker tag centos:yum 192.168.2.30:5000/centos:yum
# 查看打标签的镜像
[root@docker ~]# docker images
8.将打标签的镜像上传到registry上
[root@docker ~]# docker push 192.168.2.30:5000/centos:yum
The push refers to repository [192.168.2.30:5000/centos]
8c519ad003b5: Pushed
acbca50d3a83: Pushed
75cdf155cf76: Pushed
07d4b334a739: Pushed
74ddd0ec08fa: Pushed
yum: digest: sha256:fa3b19efa5dd7e95f2ea17a3d3ffd2b22ffedc3ddef9af6a69e60239db568a6c size: 1366
9、在主机上进行访问
[root@docker ~]# curl localhost:5000/v2/_catalog
{"repositories":["centos"]}
10.浏览器访问
11、查看regist文件
[root@docker ~]# ls /regist/
docker
[root@docker ~]# cd /regist/docker/
[root@docker docker]# ls
registry
[root@docker docker]# cd registry/
[root@docker registry]# ls
v2
[root@docker registry]# cd v2
[root@docker v2]# ls
blobs repositories
[root@docker v2]# cd repositories/
[root@docker repositories]# ls
centos
[root@docker repositories]# cd centos/
[root@docker centos]# ls
_layers _manifests _uploads
[root@docker centos]# cd _layers/
[root@docker _layers]# ls
sha256
[root@docker _layers]# cd sha256/
[root@docker sha256]# ls
30902bbca4a1d948703fd88d834ddf4dc8db69bb7e787ff18a762b6b4761fe37
46aacd2dd64664a37b01ee3a9f37561ed9b34c5af6661b880ee07a15d5fe8fd6
5a3d9ba04912ac6b1353410a0f18cc206b4920888e3187443abacefe3c9086ab
a1d0c75327776413fa0db9ed3adcdbadedc95a662eb1d360dad82bb913f8a1d1
ca847d29e1079f24cfc92b68cf37d5866060814df67cbdcd83edb16f1dc4fe54
ee9375ac855c3a1f8ec3eb03cee9317c3127e4be47cb3d6f519d9e6921a6a044