视频来源:B站《(2022版)最新、最全、最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:(2022版)一套教程搞定k8s安装到实战 | 汇总_COCOgsta的博客-CSDN博客
FROM:继承基础镜像 MAINTAINER:镜像制作者信息 RUN:用来执行shell命令 EXPOSE:暴露端口号 CMD:启动容器默认执行的命令 ENTRYPOINT:启动容器真正执行的命令 VOLUME:创建挂载点 ENV:配置环境变量 ADD:复制文件到容器(如果是tar包会解压) COPY:复制文件到容器 WORKDIR:设置容器的工作目录 USER:容器使用的用户
举例1:RUN
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile RUN useradd guoliang RUN mkdir /opt/guoliang
[root@k8s-master01 dockerfiles]# docker build -t centos:user . Sending build context to Docker daemon 2.048kB Step 1/5 : FROM centos latest: Pulling from library/centos Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for centos:latest ---> 5d0da3dc9764 Step 2/5 : LABEL maintainer="test dockerfile" ---> Running in 369d1d05266b Removing intermediate container 369d1d05266b ---> 4d416c026780 Step 3/5 : LABEL test=dockerfile ---> Running in 31b078c631bc Removing intermediate container 31b078c631bc ---> 786676f65452 Step 4/5 : RUN useradd guoliang ---> Running in 19e0da577664 Removing intermediate container 19e0da577664 ---> 96a6eca9f8c8 Step 5/5 : RUN mkdir /opt/guoliang ---> Running in 02c0b95ef5be Removing intermediate container 02c0b95ef5be ---> 587879dbddf7 Successfully built 587879dbddf7 Successfully tagged centos:user [root@k8s-master01 dockerfiles]# [root@k8s-master01 dockerfiles]# docker run -it --rm centos:user bash [root@949ac3305ee4 /]# [root@949ac3305ee4 /]# [root@949ac3305ee4 /]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin guoliang:x:1000:1000::/home/guoliang:/bin/bash [root@949ac3305ee4 /]# cd /opt/guoliang/
举例2:CMD
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile RUN useradd guoliang RUN mkdir /opt/guoliang # RUN useradd guoliang && mkdir /opt/guoliang CMD [ "sh","-c","echo 1" ]
[root@k8s-master01 dockerfiles]# docker build -t centos:cmd . Sending build context to Docker daemon 2.048kB Step 1/6 : FROM centos ---> 5d0da3dc9764 Step 2/6 : LABEL maintainer="test dockerfile" ---> Using cache ---> 4d416c026780 Step 3/6 : LABEL test=dockerfile ---> Using cache ---> 786676f65452 Step 4/6 : RUN useradd guoliang ---> Using cache ---> 96a6eca9f8c8 Step 5/6 : RUN mkdir /opt/guoliang ---> Using cache ---> 587879dbddf7 Step 6/6 : CMD [ "sh","-c","echo 1" ] ---> Running in bec60d75f619 Removing intermediate container bec60d75f619 ---> 2c3e184a5a3f Successfully built 2c3e184a5a3f Successfully tagged centos:cmd [root@k8s-master01 dockerfiles]# docker run -it --rm centos:cmd 1 [root@k8s-master01 dockerfiles]#
举例3:CMD传参
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile RUN useradd guoliang RUN mkdir /opt/guoliang # RUN useradd guoliang && mkdir /opt/guoliang ENTRYPOINT ["echo"] CMD [ "sh","-c","echo 1" ]
You have new mail in /var/spool/mail/root [root@k8s-master01 dockerfiles]# docker build -t centos:ep . Sending build context to Docker daemon 2.048kB Step 1/7 : FROM centos ---> 5d0da3dc9764 Step 2/7 : LABEL maintainer="test dockerfile" ---> Using cache ---> 4d416c026780 Step 3/7 : LABEL test=dockerfile ---> Using cache ---> 786676f65452 Step 4/7 : RUN useradd guoliang ---> Using cache ---> 96a6eca9f8c8 Step 5/7 : RUN mkdir /opt/guoliang ---> Using cache ---> 587879dbddf7 Step 6/7 : ENTRYPOINT ["echo"] ---> Running in 2ad94b3af36d Removing intermediate container 2ad94b3af36d ---> b7a973b218f7 Step 7/7 : CMD [ "sh","-c","echo 1" ] ---> Running in 2042a1645fb2 Removing intermediate container 2042a1645fb2 ---> 757cb8c614ea Successfully built 757cb8c614ea Successfully tagged centos:ep [root@k8s-master01 dockerfiles]# docker run -it --rm centos:ep 10 # 会覆盖cmd,并将10作为参数传给ENTRYPOINT 10 [root@k8s-master01 dockerfiles]#
举例3:ENV
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile ENV test_env1 env1 ENV test_env2 env2 RUN useradd guoliang RUN mkdir /opt/guoliang # RUN useradd guoliang && mkdir /opt/guoliang #ENTRYPOINT ["echo"] CMD echo "$test_env1 $test_env2"
[root@k8s-master01 dockerfiles]# docker build -t centos:env . Sending build context to Docker daemon 2.048kB Step 1/8 : FROM centos ---> 5d0da3dc9764 Step 2/8 : LABEL maintainer="test dockerfile" ---> Using cache ---> 4d416c026780 Step 3/8 : LABEL test=dockerfile ---> Using cache ---> 786676f65452 Step 4/8 : ENV test_env1 env1 ---> Using cache ---> c30055ed7393 Step 5/8 : ENV test_env2 env2 ---> Using cache ---> c7f93a7f74b5 Step 6/8 : RUN useradd guoliang ---> Using cache ---> 6c4056e84b28 Step 7/8 : RUN mkdir /opt/guoliang ---> Using cache ---> 1848fe0e89de Step 8/8 : CMD echo "$test_env1 $test_env2" ---> Running in d1ab56774aac Removing intermediate container d1ab56774aac ---> edf3c2746064 Successfully built edf3c2746064 Successfully tagged centos:env [root@k8s-master01 dockerfiles]# docker run -it --rm centos:env env1 env2
举例4:ADD
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile ENV test_env1 env1 ENV test_env2 env2 RUN useradd guoliang RUN mkdir /opt/guoliang # RUN useradd guoliang && mkdir /opt/guoliang #ENTRYPOINT ["echo"] ADD ./index.tar.gz /opt/ CMD echo "$test_env1 $test_env2"
[root@k8s-master01 dockerfiles]# echo 123 > index.html [root@k8s-master01 dockerfiles]# mkdir t [root@k8s-master01 dockerfiles]# tar zcf index.tar.gz index.html t/ [root@k8s-master01 dockerfiles]# ls Dockerfile index.html index.tar.gz t [root@k8s-master01 dockerfiles]# docker build -t centos:add . Sending build context to Docker daemon 4.608kB Step 1/9 : FROM centos ---> 5d0da3dc9764 Step 2/9 : LABEL maintainer="test dockerfile" ---> Using cache ---> 4d416c026780 Step 3/9 : LABEL test=dockerfile ---> Using cache ---> 786676f65452 Step 4/9 : ENV test_env1 env1 ---> Using cache ---> c30055ed7393 Step 5/9 : ENV test_env2 env2 ---> Using cache ---> c7f93a7f74b5 Step 6/9 : RUN useradd guoliang ---> Using cache ---> 6c4056e84b28 Step 7/9 : RUN mkdir /opt/guoliang ---> Using cache ---> 1848fe0e89de Step 8/9 : ADD ./index.tar.gz /opt/ ---> 12a00abfa8bd Step 9/9 : CMD echo "$test_env1 $test_env2" ---> Running in b228f2da731a Removing intermediate container b228f2da731a ---> 8b298ae30bc0 Successfully built 8b298ae30bc0 Successfully tagged centos:add [root@k8s-master01 dockerfiles]# docker run -it --rm centos:add bash [root@7112579dd6e7 /]# cd /opt [root@7112579dd6e7 opt]# ls guoliang index.html t [root@7112579dd6e7 opt]#
举例5:COPY
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile ENV test_env1 env1 ENV test_env2 env2 RUN useradd guoliang RUN mkdir /opt/guoliang # RUN useradd guoliang && mkdir /opt/guoliang #ENTRYPOINT ["echo"] ADD ./index.tar.gz /opt/ COPY ./t /opt/guoliang/ CMD echo "$test_env1 $test_env2"
[root@k8s-master01 dockerfiles]# cd t/ [root@k8s-master01 t]# echo test > test.txt [root@k8s-master01 t]# [root@k8s-master01 t]# cd .. [root@k8s-master01 dockerfiles]# docker build -t centos:copy . Sending build context to Docker daemon 5.632kB Step 1/10 : FROM centos ---> 5d0da3dc9764 Step 2/10 : LABEL maintainer="test dockerfile" ---> Using cache ---> 4d416c026780 Step 3/10 : LABEL test=dockerfile ---> Using cache ---> 786676f65452 Step 4/10 : ENV test_env1 env1 ---> Using cache ---> c30055ed7393 Step 5/10 : ENV test_env2 env2 ---> Using cache ---> c7f93a7f74b5 Step 6/10 : RUN useradd guoliang ---> Using cache ---> 6c4056e84b28 Step 7/10 : RUN mkdir /opt/guoliang ---> Using cache ---> 1848fe0e89de Step 8/10 : ADD ./index.tar.gz /opt/ ---> Using cache ---> 12a00abfa8bd Step 9/10 : COPY ./t /opt/guoliang/ ---> 8f8d6a5a2b7e Step 10/10 : CMD echo "$test_env1 $test_env2" ---> Running in bd0061934b93 Removing intermediate container bd0061934b93 ---> 062dd8e2c609 Successfully built 062dd8e2c609 Successfully tagged centos:copy [root@k8s-master01 dockerfiles]# docker run -it --rm centos:copy bash [root@961085e9e4fc /]# cd /opt/guoliang/ [root@961085e9e4fc guoliang]# ls test.txt # 不会拷贝当前目录,但可以拷贝当前目录的下一层目录,拷贝文件也不会解压
举例6:COPY不会解压
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile ENV test_env1 env1 ENV test_env2 env2 RUN useradd guoliang RUN mkdir /opt/guoliang # RUN useradd guoliang && mkdir /opt/guoliang #ENTRYPOINT ["echo"] ADD ./index.tar.gz /opt/ COPY ./index.tar.gz /opt/guoliang/ CMD echo "$test_env1 $test_env2"
[root@k8s-master01 dockerfiles]# docker build -t centos:copy . Sending build context to Docker daemon 5.632kB Step 1/10 : FROM centos ---> 5d0da3dc9764 Step 2/10 : LABEL maintainer="test dockerfile" ---> Using cache ---> 4d416c026780 Step 3/10 : LABEL test=dockerfile ---> Using cache ---> 786676f65452 Step 4/10 : ENV test_env1 env1 ---> Using cache ---> c30055ed7393 Step 5/10 : ENV test_env2 env2 ---> Using cache ---> c7f93a7f74b5 Step 6/10 : RUN useradd guoliang ---> Using cache ---> 6c4056e84b28 Step 7/10 : RUN mkdir /opt/guoliang ---> Using cache ---> 1848fe0e89de Step 8/10 : ADD ./index.tar.gz /opt/ ---> Using cache ---> 12a00abfa8bd Step 9/10 : COPY ./index.tar.gz /opt/guoliang/ ---> 00d26becacce Step 10/10 : CMD echo "$test_env1 $test_env2" ---> Running in 413cdde90d0e Removing intermediate container 413cdde90d0e ---> bbb0bd13c11c Successfully built bbb0bd13c11c Successfully tagged centos:copy [root@k8s-master01 dockerfiles]# docker run -it --rm centos:copy bash [root@ffb8f53a6ca2 /]# cd /opt/guoliang [root@ffb8f53a6ca2 guoliang]# ls index.tar.gz
举例7:WORKDIR
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile ENV test_env1 env1 ENV test_env2 env2 RUN useradd guoliang RUN mkdir /opt/guoliang # RUN useradd guoliang && mkdir /opt/guoliang #ENTRYPOINT ["echo"] ADD ./index.tar.gz /opt/ COPY ./index.tar.gz /opt/guoliang/ WORKDIR /opt/guoliang CMD pwd; ls
[root@k8s-master01 dockerfiles]# docker build -t centos:workdir . Sending build context to Docker daemon 5.632kB Step 1/11 : FROM centos ---> 5d0da3dc9764 Step 2/11 : LABEL maintainer="test dockerfile" ---> Using cache ---> 4d416c026780 Step 3/11 : LABEL test=dockerfile ---> Using cache ---> 786676f65452 Step 4/11 : ENV test_env1 env1 ---> Using cache ---> c30055ed7393 Step 5/11 : ENV test_env2 env2 ---> Using cache ---> c7f93a7f74b5 Step 6/11 : RUN useradd guoliang ---> Using cache ---> 6c4056e84b28 Step 7/11 : RUN mkdir /opt/guoliang ---> Using cache ---> 1848fe0e89de Step 8/11 : ADD ./index.tar.gz /opt/ ---> Using cache ---> 12a00abfa8bd Step 9/11 : COPY ./index.tar.gz /opt/guoliang/ ---> Using cache ---> 00d26becacce Step 10/11 : WORKDIR /opt/guoliang ---> Running in 4b20d79d9224 Removing intermediate container 4b20d79d9224 ---> 35d0b1963616 Step 11/11 : CMD pwd; ls ---> Running in 99722ead3b2f Removing intermediate container 99722ead3b2f ---> 5d54e7feb994 Successfully built 5d54e7feb994 Successfully tagged centos:workdir [root@k8s-master01 dockerfiles]# [root@k8s-master01 dockerfiles]# [root@k8s-master01 dockerfiles]# docker run -it --rm centos:workdir /opt/guoliang index.tar.gz
举例8:USER
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile ENV test_env1 env1 ENV test_env2 env2 RUN useradd guoliang RUN mkdir /opt/guoliang # RUN useradd guoliang && mkdir /opt/guoliang #ENTRYPOINT ["echo"] ADD ./index.tar.gz /opt/ COPY ./index.tar.gz /opt/guoliang/ WORKDIR /opt/guoliang CMD pwd; ls USER 1000
[root@k8s-master01 dockerfiles]# docker build -t centos:user . Sending build context to Docker daemon 5.632kB Step 1/12 : FROM centos ---> 5d0da3dc9764 Step 2/12 : LABEL maintainer="test dockerfile" ---> Using cache ---> 4d416c026780 Step 3/12 : LABEL test=dockerfile ---> Using cache ---> 786676f65452 Step 4/12 : ENV test_env1 env1 ---> Using cache ---> c30055ed7393 Step 5/12 : ENV test_env2 env2 ---> Using cache ---> c7f93a7f74b5 Step 6/12 : RUN useradd guoliang ---> Using cache ---> 6c4056e84b28 Step 7/12 : RUN mkdir /opt/guoliang ---> Using cache ---> 1848fe0e89de Step 8/12 : ADD ./index.tar.gz /opt/ ---> Using cache ---> 12a00abfa8bd Step 9/12 : COPY ./index.tar.gz /opt/guoliang/ ---> Using cache ---> 00d26becacce Step 10/12 : WORKDIR /opt/guoliang ---> Using cache ---> 35d0b1963616 Step 11/12 : CMD pwd; ls ---> Using cache ---> 5d54e7feb994 Step 12/12 : USER 1000 ---> Running in b67c15afbde6 Removing intermediate container b67c15afbde6 ---> 133143caec08 Successfully built 133143caec08 Successfully tagged centos:user [root@k8s-master01 dockerfiles]# [root@k8s-master01 dockerfiles]# [root@k8s-master01 dockerfiles]# docker run -it --rm centos:user bash [guoliang@48bc5b5db6d3 guoliang]$ whoami guoliang
举例:VOLUME
vi /root/dockerfiles/Dockerfile FROM centos LABEL maintainer="test dockerfile" LABEL test=dockerfile ENV test_env1 env1 ENV test_env2 env2 RUN useradd guoliang RUN mkdir /opt/guoliang # RUN useradd guoliang && mkdir /opt/guoliang #ENTRYPOINT ["echo"] ADD ./index.tar.gz /opt/ COPY ./index.tar.gz /opt/guoliang/ WORKDIR /opt/guoliang CMD pwd; ls #USER 1000 VOLUME /data
[root@k8s-master01 dockerfiles]# docker build -t centos:volume . Sending build context to Docker daemon 5.632kB Step 1/12 : FROM centos ---> 5d0da3dc9764 Step 2/12 : LABEL maintainer="test dockerfile" ---> Using cache ---> 4d416c026780 Step 3/12 : LABEL test=dockerfile ---> Using cache ---> 786676f65452 Step 4/12 : ENV test_env1 env1 ---> Using cache ---> c30055ed7393 Step 5/12 : ENV test_env2 env2 ---> Using cache ---> c7f93a7f74b5 Step 6/12 : RUN useradd guoliang ---> Using cache ---> 6c4056e84b28 Step 7/12 : RUN mkdir /opt/guoliang ---> Using cache ---> 1848fe0e89de Step 8/12 : ADD ./index.tar.gz /opt/ ---> Using cache ---> 12a00abfa8bd Step 9/12 : COPY ./index.tar.gz /opt/guoliang/ ---> Using cache ---> 00d26becacce Step 10/12 : WORKDIR /opt/guoliang ---> Using cache ---> 35d0b1963616 Step 11/12 : CMD pwd; ls ---> Using cache ---> 5d54e7feb994 Step 12/12 : VOLUME /data ---> Running in 3aec92ea0742 Removing intermediate container 3aec92ea0742 ---> 26de69d82003 Successfully built 26de69d82003 Successfully tagged centos:volume [root@k8s-master01 dockerfiles]# [root@k8s-master01 dockerfiles]# docker exec -it --rm centos:volume bash unknown flag: --rm See 'docker exec --help'. [root@k8s-master01 dockerfiles]# docker run -it --rm centos:volume bash [root@621e2e221dde guoliang]# [root@621e2e221dde guoliang]# cd /data [root@621e2e221dde data]# ls [root@621e2e221dde data]# touch 1 #此时在host主机的/var/lib/docker/volumes目录下可以找到创建的文件。如果容器退出,该内容会消失
[root@k8s-master01 ~]# docker run -it -v /root/mysql_data/:/data/ centos:volume bash [root@cdfb2bb79d79 guoliang]# [root@cdfb2bb79d79 guoliang]# cd /data [root@cdfb2bb79d79 data]# touch 123 #此时在host的/root/mysql_data目录下会出现创建的文件,容器退出后该文件内容不会丢失



