1.使用dockerfile创建应用镜像
在Docker file中定义所需要执⾏的指令,使⽤ docker build创建
镜 像,过程中会按照dockerfile所定义的内容进⾏打开临时性容
器,把 docker file中命令全部执⾏完成,就得到了⼀个容器应⽤镜
像,每⼀⾏命令都会出现容器,都会使⽤docker commit进⾏提
交⼀个临时性的镜像 。
注意执⾏的命令越多,镜像体积越⼤,所以需要优化镜像
Docker file关键字
1.FORM 指定基础镜像为该镜像的最后修改版本
2.FROM < images: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.dockerfile应用
通过dockerfile创建⼀个在启动容器时,就可以启动httpd服务的
镜像 。
# 1.创建⽬录 mkdir test # 2.跳转到⽬录中 cd test/ # 3.编辑启动脚本 vim abc.sh cat abc.sh #!/bin/bah rm -rf /run/httpd/* exec /sbin/httpd -D FOREGROUND # 4.编辑index.html⽂件 echo "httpd server is running" > index.html # 5.编辑Dockerfile 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"] # 6.创建镜像 docker build -t centos:httpd . # 7.查看镜像 [root@docker001 test]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE centos httpd a488bc9f4cfb About a minute ago 352MB # 9.创建容器测试 [root@docker001 test]#docker run -d --name c0 centos:httpd [root@docker001 test]# docker ps --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c245d9f9f3e0 centos:httpd "/bin/bash /start.sh" 21 seconds ago Up 20 seconds 80/tcp c0 # 10.查看ip地址 [root@docker001 test]# docker inspect c0 # 访问测试 curl 172.17.0.2
测试挂载其他项⽬
[root@docker001 test]# docker run -d -v /opt:/var/www/html --name c1 centos:httpd [root@docker001 test]# echo "yjj" > /opt/index.html [root@docker001 test]# curl 172.17.0.3 yum -y install yum-plugin-ovl
3.容器镜像在dockerhost中的保存位置
docker info Server: Containers: 2 #容器数量 Running: 2 #正在运⾏的容器 Paused: 0 Stopped: 0 Images: 3 Server Version: 26.1.4 Storage Driver: overlay2 # 存储驱动
tree -L 2 /var/lib/docker/ /var/lib/docker/
查看系统内核
uname -r
查看⽂件系统
df -i
新建⼀个⽂件之后 可⽤的节点减少⼀个
touch 123.txt df -i
创建软连接之后,节点减少⼀个
ln -s 123.txt 123.lk df -i
在启动docker服务后会新建/var/lib/docker
[root@docker001 ~]# systemctl start docker.service [root@docker001 ~]# ls /var/lib/docker buildkit containers engine-id image network overlay2 plugins runtimes swarm tmp volumes [root@docker001 ~]# ls /var/lib/docker/overlay2/ backingFsBlockDev
拉取⼀个新镜像之后,就会在overlay2⽂件夹中保存新的⽂件
[root@docker001 ~]# docker pull centos [root@docker001 ~]# ls /var/lib/docker/overlay2/ backingFsBlockDev
查看⽂件保存位置
[root@docker001 ce54a04e45edb448429f2f7adb8a8a1d23379e300f8e7c1a98 beb4512d932c34]# ls [root@docker001 ce54a04e45edb448429f2f7adb8a8a1d23379e300f8e7c1a98 beb4512d932c34]# ls diff/
创建容器后出现2个新的⽂件夹
[root@docker001 ~]# docker run -it --name c0 centos:latest /bin/bash [root@docker001 ~]# ls /var/lib/docker/overlay2/ backingFsBlockDev
查看容器⽬录
[root@docker001 ~]# cd /var/lib/docker/overlay2/e291e027242e013f682fe631b 83e89a90f9ba68fa1af92fda2fe4d9094f7b7eb [root@docker001 e291e027242e013f682fe631b83e89a90f9ba68fa1af92fda2 fe4d9094f7b7eb]# ls [root@docker001 e291e027242e013f682fe631b83e89a90f9ba68fa1af92fda2 fe4d9094f7b7eb]# cat lower fe4d9094f7b7eb]# ls merged/
查看容器⽬录
[root@docker001 ~]# cd /var/lib/docker/overlay2/e291e027242e013f682fe631b 83e89a90f9ba68fa1af92fda2fe4d9094f7b7eb [root@docker001 e291e027242e013f682fe631b83e89a90f9ba68fa1af92fda2 fe4d9094f7b7eb]# ls [root@docker001 e291e027242e013f682fe631b83e89a90f9ba68fa1af92fda2 fe4d9094f7b7eb]# cat lower [root@docker001 e291e027242e013f682fe631b83e89a90f9ba68fa1af92fda2 fe4d9094f7b7eb]# ls merged/
在外⾯使⽤exec创建⼀个⽂件
docker exec 4c7f dd ls /var/lib/docker/overlay2/e291e027242e013f682fe631b 83e89a90f9ba68fa1af92fda2fe4d9094f7b7eb/merged/
容器保存镜像和数据
查看容器挂载
容器被移除以后,这个⽂件就会被删除,stop不会删除
ls /var/lib/docker/overlay2/ docker stop c0 ls /var/lib/docker/overlay2/ docker rm c0 ls /var/lib/docker/overlay2/
4.私有仓库
创建私有仓库,在企业中分享项⽬
# 安装仓库镜像 docker pull registry #查看新安装的镜像 docker images # 创建挂载的⽬录 mkdir /opt/dockeregistry # 创建容器,映射端⼝,挂载⽂件 docker run -d --name c1 p5000:5000 -v /opt/dockeregistry/:/var/lib/registry registry:latest docker ps # 访问⽬录⻚ curl http://10.1.1.50:5000/v2/_catalog {"repositories":[]} # 创建仓库 vim /etc/docker/daemon.json { "insecure-registries":[ "http://10.1.1.50:5000" ], "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" ] } # 重启docker服务 systemctl restart docker # 查看镜像 # 为要上传的镜像添加标记 docker tag centos:latest 10.1.1.50:5000/centos:v0 docker images docker push 10.1.1.50:5000/centos:v0
1.拉取registry
docker pull registry
2.创建挂载⽬录
mkdir /regist
3.启动容器,映射端⼝,挂载⽬录
docker run -d --name c0 -v /regist/:/var/lib/rigistry/ -p5000:5000 registry:latest
4.访问仓库
curl http://192.168.71.50:5000/v2/_catelog
5.配置pull和push,修改daemon.json
vim /etc/docker/daemon.json { ....., "insecure-registries":[ "http://192.168.71.50:5000" ] }
6.修改了配置⽂件,重启docker服务
systemctl restart docker
7.启动registry容器
docker start r1 curl localhost:5000/v2/_catalog