回顾:根据镜像创建容器
docker -it --name c0 centos:latest /bin/bash
安装应用
ctrl+p+q
docker export -o centos.tar c0
docker import -m "山不像我走来,我便向山走去" centos.tar centos:httpd
docker commit c0 centos:v2
一、docker file应用
在Docker file中定义所需要执行的指令,使用 docker build创建镜像,过程中会按照dockerfile所定义的内容进行打开临时性容器,把docker file中命令全部执行完成,就得到了一个容器应用镜像,每一行命令都会出现容器,都会使用dockercommit进行提交一个临时性的镜像
注意执行的命令越多,镜像体积越大,所以需要优化镜像
1、Docker file关键字
1.FORM <image> 指定基础镜像为该镜像的最后修改版本
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 在子镜像中执行指令
2、使用docker file创建镜像
(通过dockerfile创建⼀个在启动容器时,就可以启动httpd服务的镜像)
(1)步骤
①创建⼀个⽬录,⽤于存储Docker file所使⽤的⽂件② 在此⽬录中创建Docker file⽂件,以及镜像制作所使⽤的⽂ 件③ 使⽤docker build创建镜像④ 使⽤创建的镜像启动容器(验证)
(2)具体操作
[root@Docker ~]# mkdir 001
[root@Docker ~]# cd 001/[root@Docker httpd0]# vim abc.sh
#!/bin/bash rm -rf /run/*httpd* exec /sbin/httpd -D FOREGROUND
[root@Docker httpd0]# echo "山不向我走来,我便向山走去" > index.html
[root@Docker httpd0]# ls
index.html abc.sh[root@Docker httpd0]# 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 httpd0]# ls
Dockerfile index.html abc.sh[root@Docker httpd0]# docker build -t centos:httpd .
[root@Docker httpd0]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd0 4569c7510416 4 minutes ago 280MB
centos httpd 8c4ea681706e 18 hours ago 280MB
centos latest 5d0da3dc9764 2 years ago 231MB
[root@Docker httpd0]# ls /var/lib/docker/overlay2/
2r56za8uaixgxbbilh75pdtdd
2rpdeqlulp9b7hlx5f86hkvof
6be84eeb89f20e3a01ecb81e31d978dc64a50177463452476ccab40da29a4b30
995db6a0fd46ba18fca60ad04b3d2636f83cda26a9e5e007a1e2f798b0e7cc5e
backingFsBlockDev
eudiuxbdibdsww3fqjijbil3p
l
ofj3mwwdnfl3p44uazvjfd49e
thdnqu77gb3yxizfu5w3el6sa
uaz5woahcolqp9uxt9ttz5gcq
usr98w8jkm1b547i9pcw87wo0
v0i3autzvaq6sfwt68nomsl3r
wq36avrvxy43q2hzh6pxeql5q
[root@Docker httpd0]# docker run -d --name c0 centos:httpd
9fdf6eb1b178ef74d3ab2af48d5f45691fd2f66ef0c5bffddcaea607a179d00c
[root@Docker httpd0]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
245646aad8d6 centos:httpd "/bin/bash /abc.sh" 7 seconds ago Up 6 seconds c0[root@Docker 001]# curl 172.17.0.2
山不向我走来,我便向山走去[root@Docker 001]# docker run -it -d -v /opt/:/var/www/html/ -p80 --name a1 centos:httpd
[root@Docker 001]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a3bba4a766fe centos:httpd "/bin/bash /abc.sh" 33 seconds ago Up 32 seconds 0.0.0.0:32768->80/tcp, :::32768->80/tcp a1
245646aad8d6 centos:httpd "/bin/bash /abc.sh" About a minute ago Up About a minute c0访问192.168.1.11:32768
练习:配置nginx应用镜像
二、创建私有仓库
1、拉取registry
docker pull registry
2、创建挂载目录
mkdir /regist
3、启动容器,映射端口,挂载目录
docker run -d --name r2 -v /regist/:/var/lib/registry -p5000:5000 registry:latest
4、访问仓库
curl http://192.168.1.11:5000/v2/_catalog
5、配置pull和push(修改daemon.json)
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.1.11:5000"
]
}
6、重启docker服务
systemctl restart docker
7、启动registry容器
docker start r2
curl localhost:5000/v2/_catalog
8、打标签并且上传镜像
docker tag centos:httpd 192.168.1.11:5000/centos:httpd
docker push 192.168.1.11:5000/centos:httpd
9、查看
curl localhost:5000/v2/_catalog