四、Docker镜像与仓库

一、查看删除镜像

Docker Image镜像

       容器的基石

       层叠的只读文件系统

       联合加载

       docker镜像存储地址:/var/lib/docker

       docker info 查看docker信息,也可找到docker镜像存储目录

列出镜像

       docker images [OPTIONS] [REPOSITORY]

       -a, --all=false,显示所有镜像

       -f,--filter=[],显示时的过滤条件

       --no-trunc=false,指定不使用截断的形式显示数据,默认截断镜像唯一ID

       -q,--quiet=false,只显示镜像的唯一ID

       举例:docker images

              docker images -a

              docker images --no-trunc

              docker images -q

              docker images centos

镜像的仓库

       REPOSITORY 仓库

       REGISTRY

镜像标签

       TAG

       ubuntu:14.01

       ubuntu:latest

查看镜像

       docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE…]

       -f,--format=””

举例:docker inspect ubuntu:18.04

删除镜像

       docker rmi [OPTIONS] IMAGE [IMAGE…]

       -f,--force=false,强制删除镜像

       --no-prune=false,保留删除镜像中被打标签的父镜像

       举例:

              docker rmi ubuntu:14.04,根据仓库名和标签删除

              docker rmi 镜像ID,根据镜像ID删除

              docker rmi ubuntu:12.04 ubuntu:prcise,删除多个镜像

              docker rmi $(docker images -q ubuntu),删除所有镜像

 

二、获取和推送镜像

查找镜像

Docker Hub网站查找镜像

需要注册
       https://registry.hub.docker.com

命令行查找镜像

       docker search [OPTIONS] TERM

       --automated=false,只显示自动化构建docker镜像

       --no-trunc=false,指定不使用截断的形式显示数据

       -s,--stars=0,限制显示结果的最低星级

       最多返回25个结果

       举例:docker search ubuntu

              docker search -s 3 ubuntu

拉取镜像

       docker pull [OPTIONS] NAME [:TAG]

       -a,--all-tags=false,下载仓库所有标签镜像

       举例:docker pull ubuntu:14.04

              使用国内镜像下载

              修改docker启动配置文件

             sudo vim /etc/default/docker

             添加:DOCKER_OPTS=" --registry-mirror=http://f1361db2.m.daocloud.io"

             sudo service docker restart,重启docker

             ps -ef | grep docker

      

             ubuntu18.04配置方法

             sudo vim /lib/systemd/system/docker.service

              在[Service]下加入

                     EnvironmentFile=-/etc/default/docker

              修改 ExecStart=/usr/bin/docker daemon -H fd://

              改为 ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS

              重载 sudo systemctl daemon-reload

              重启 sudo service docker restart

              ps -ef | grep docker

 

推送镜像

       docker push NAME [:TAG]

       构建镜像:shuoyu/commit_test1

              docker push shuoyu/commit_test1

构建镜像

       保存对容器的修改,并再次使用

       自定义镜像的能力

       以软件的形式打包并分发服务及其运行环境

       通过docker commit构建镜像

              docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

              -a,--author=””,镜像的作者和联系方式

              -m,--message=“”,记录镜像构建信息

              -p,--pause=true,指示commit可以不暂停正在执行的容器

       举例:

             docker run -it -p 80 --name commit_test ubuntu /bin/bash

              apt-get update

              apt-get install -y nginx

              exit

              docker ps -l

              docker commit -a ‘shuoyu’ -m ‘nginx’ commit_test  shuoyu/commit_test1

              docker images

              docker run -d --name nginx_web1 -p 80 shuoyu/commit_test1 nginx -g "daemon off;"

              docker ps

              crul http://127.0.0.1:port

 

       通过Dockerfile文件构建镜像(docker build)

              docker build [OPTIONS] PATH | URL | -

              --force-rm=false

              --no-cache=false

              --pull=false

              -q,--quiet=false

              --rm=true

              -t,--tag="",镜像名称

       创建第一个Dockerfile

              #First Dockerfile

              FROM ubuntu:14.04

              MAINTAINER shuoyu 0808litong@163.com

              RUN apt-get update

              RUN apt-get install -y nginx

              EXPOSE 80

              举例:

              sudo mkdir dockerfile/df_test1

             cd dockerfile/df_test1

              vim Dockerfile,填入上面的dockerfile内容

              docker build -t=' shuoyu /df_test1' .

              docker images

             docker run -d --name nginx_web3 -p 80 shuoyu/df_test1 nginx -g "deamon off;"

              curl http://127.0.0.1:port

Dockerfile指令

       注释(#开始)和指令(大写指令名开始)

FROM指令

       FROM <image>

       FROM <image>:<tag>

       说明:已经存在的镜像,基础镜像,必须是第一条非注释指令

MAINTAINER指令

       MAINTAINER <name>

       指定镜像的作者信息,包含镜像的所有者和联系信息

RUN指令

       指定当前镜像中运行的命令

       RUN <command>(shell模式)

              /bin/sh -c command

       RUN [ "executable" , "params1" , "params2"](exec模式)

              RUN ["/bin/sh", "-c", "echo hello"]

EXPOSE指令

       EXPOSE <port> [<port>…]

       指定运行该镜像的容器使用的端口

       运行容器是还需指定端口

       docker run =p 80 -d shuoyu/df_test1 nginx -g "deamon off;"

       举例:

              #First Dockerfile

              FROM ubuntu:14.04

              MAINTAINER shuoyu 0808litong@163.com

              RUN apt-get update && apt-get install -y nginx

              EXPOSE 80

CMD指令

       提供容器运行的默认命令,RUN指令是在容器构建过程中运行,CMD指令是在容器运行时运行,使用docker run启动一个容器运行时,如果指定了容器运行时的命令,CMD指令命令会被覆盖不会执行。

       CMD [ "executable" , "param1" , "param2"](exec模式)

       CMD command param1 param2(shell模式)

       CMD [ "param1" , "param2"](作为ENTRYPOINT指令的默认参数)

       举例:

              #First Dockerfile

              FROM ubuntu:14.04

              MAINTAINER shuoyu 0808litong@163.com

              RUN apt-get update

              RUN apt-get install -y nginx

              EXPOSE 80

              CMD ["/usr/sbin/nginx", "-g", "deamon off;"]

       构建镜像

              docker build -t="shuoyu/df_test3" .

       运行容器

              docker run -p 80 --name cmd_test1 -d shuoyu/df_test3

       查看

              docker ps

              docker top cmd_test1

       运行容器

              docker run -p 80 --name cmd_test2 -d shuoyu/df_test3 /bin/bash

       查看(CMD命令被覆盖)

              docker ps

ENTRYPOINT指令

       与CMD比较类似,但不会被docker run命令覆盖,如果要覆盖,须在docker run --entrypoint指定。

       ENTRYPOINT [ "executable" , "param1" , "param2"](exec模式)

       ENTRYPOINT command param1 param2(shell模式)

       举例

              #First Dockerfile

              FROM ubuntu:14.04

              MAINTAINER shuoyu 0808litong@163.com

              RUN apt-get update

              RUN apt-get install -y nginx

              EXPOSE 80

              ENTRYPOINT ["/usr/sbin/nginx", "-g", "deamon off;"]

       与CMD组合使用

              #First Dockerfile

              FROM ubuntu:14.04

              MAINTAINER shuoyu 0808litong@163.com

              RUN apt-get update

              RUN apt-get install -y nginx

              EXPOSE 80

              ENTRYPOINT ["/usr/sbin/nginx"]

              CMD ["-h"]

       运行容器

              docker run -p 90 -d --name ep_test2 shuoyu/df_test5 -g "deamon off;"

ADD指令

       将文件或目录复制到使用dockerfile构建的镜像中,和COPY类型

       ADD <src> …<dest>

       ADD ["<src>" …"<dest>"](适用于文件路径中有空格的情况)

       举例:

              本地页面替换nginx中的默认页面,index.html和dockerfile在同一个目录下

              #First Dockerfile

              FROM ubuntu:14.04

              MAINTAINER shuoyu 0808litong@163.com

              RUN apt-get update

              RUN apt-get install -y nginx

              COPY index.html /usr/share/nginx/html/

              EXPOSE 80

              ENTRYPOINT ["/usr/sbin/nginx", "-g", "deamon off;"]

运行容器

       docker run -d -p 80 --name cp_test shuoyu/df_test6

       docker ps -l

       curl http://127.0.0.1:port

COPY指令

       将文件或目录复制到使用dockerfile构建的镜像中

       COPY <src> …<dest>

       COPY ["<src>" …"<dest>"](适用于文件路径中有空格的情况)

       ADD和COPY对比

       ADD包含类似tar的解压功能

       单纯复制文件,Docker推荐使用COPY

VOLUME指令

       用来向基于镜像创建的容器添加卷,一个卷是可以存在一个或多个容器的特定目录,该目录可以绕过联合文件系统,并提供如共享数据或对数据持久化功能。

       VOLUME ["/data"]

WORKDIR指令

       从镜像创建一个新容器时,在新容器内部设置工作目录,ENTRYPOINT或CMD指定的命令都会在目录下执行。在构建中为后续的指令制定工作目录。通常会使用绝对路径,如果使用的相对路径,工作路径会一直传递下去。

       WORKDIR /path/to/workdir

       路径传递实例:

       WORKDIR /a

       WORKDIR b

       WORKDIR c

       RUN pwd

       /a/b/c

ENV指令

       用来设置环境变量,与WORKDIR类型,也可以作用于构建过程中,运行过程中同样有效。

       ENV <key><value>

       ENV <key>=<value>…

USER指令

       USER deamon

       镜像会以什么样的用户去运行,如果不指定USER用户,默认会使用root用户。

       USER nginx:基于该镜像启动的容器,就会以nginx用户的身份来运行

       其它使用方式

       USER user                    USER uid

       USER user:group          USER uid:gid

       USER user:gid              USER uid:group

ONBUILD指令

       镜像触发器

       当一个镜像被其他镜像作为基础镜像时执行

       会在构建过程中插入指令

       ONBUILD [INSTRUCTION]

       举例:

              #First Dockerfile

              FROM ubuntu:14.04

              MAINTAINER shuoyu 0808litong@163.com

              RUN apt-get update

              RUN apt-get install -y nginx

              ONBUILD COPY index.html /usr/share/nginx/html/

              EXPOSE 80

              ENTRYPOINT ["/usr/sbin/nginx", "-g", "deamon off;"]

构建镜像

       docker build -t="shuoyu/df_test7" .

       运行容器(发现并没执行ONBUILD中的命令,ONBUILD指定的命令并不会在本次镜像中构建)

       docker run -p 80 -d --name ob_test1 shuoyu/df_test7

       docker ps

       curl http://127.0.0.01:port

基于该镜像构建新镜像

       FROM shuoyu/df_test7

       MAINTAINER shuoyu 0808litong@163.com

       EXPOSE 80

       ENTRYPOINT ["/usr/sbin/nginx", "-g", "deamon off;"]

       docker build -t="shuoyu/df_test8" .

运行新容器

       docker run -p 80 -d --name ob_test2 shuoyu/df_test8

       docker ps -l

       curl http://127.0.0.01:port

Dockerfile构建过程

       从基础镜像运行一个容器

       执行一条指令,对容器做出修改

       执行类似docker commit的操作,提交一个新的镜像层

       再基于刚提交的镜像运行一个新容器

       执行Dockerfile中的下一条指令,直至所有指令执行完毕

      

       使用中间层镜像进行调试

              查找错误

              构建缓存

              不使用缓存

              docker build --no-cache

   查看镜像的构建过程

          docker history [image]

          举例:docker history shuoyu/df_test1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值