Docker学习中...(2)Docker的三大组件

Docker学习中…(1)更新完成

Docker的三大组件
镜像 -> image
容器 -> container
仓库 -> repository
镜像
镜像image:(image是只读的)
    >可以使用DockerFile来build出来一个image
    
    >也可以使用docker pull来从Docker Hub上拉取镜像:"docker pull 镜像名:[tag]",tag可以省略默认会取仓库中最新版本,会随仓库中的最新版本变更而变更,生产不可以用,不稳定
        例: sudo docker pull mysql:5.6
            >>如果权限不够需要加sudo,可以使用分组命令将docker分组处理
            sudo groupadd docker
            sudo gpasswd -a 用户名 docker
            运行docker version
                如果不行就重启docker服务: service docker restart
                    还不行就重启系统sudo reboot
    
    >可以使用inspect来获取镜像的详细信息,包括作者、适应架构、各层(layer)的数字摘要,返回的json串,可以使用-f后面加json串中的key来获取value
        命令: 返回所有信息:"docker inspect 镜像名",读取指定key的value:"docker inspect -f{{"参数"}} 镜像名"
            例(所有信息):
                docker inspect lijinlong666/dockerpythontest1
            例(json串中的Size):
                docker inspect -f{{".Size"}} lijinlong666/dockerpythontest1
    
    >可以使用history来查看镜像的各层具体内容
            例:
                docker history lijinlong666/dockerpythontest1
    
    >删除和清理镜像可以使用rmi或者prune命令
    rmi: 删除没有依赖容器的镜像可以使用:"docker rmi 镜像名或id",可以加参数-f来强制忽略依赖来删除数据:"docker rmi -f 镜像名或者id"
    prune: 清理系统遗留下来的临时镜像和一些没有被使用的镜像:"docker image prune 参数"{
        可以加参数: -a:删除所有无用镜像,不止临时镜像
                    -f:强制删除镜像,不需要确认
                    -filter: 删除符合给定过滤器的镜像
        例: docker image prune -f
    }
    >创建镜像: 
        >>基于已有镜像容器创建镜像:
            命令: "docker commit 容器名或容器id 新镜像名(库):版本"
            可以加参数以设置更多信息:
                -a,--author="":作者名->如: "docker commit -a "作者" 容器名或容器id"
                -c,--change=[]:提交的时候执行的Dockerfile指令->如:"CMD、RUN等"
                -m,--message="":提交消息->如:"docker commit -m "消息" 容器名或容器id"
                -p,--pause=true:提交时暂停容器运行
            例: docker commmit -a "lijinlong" -m "测试基于已有镜像创建新镜像" -p cca5386de02e lijinlong666/test:1.0
        >>基于本地模板导入镜像
            命令:
                cat 镜像.tar.gz|docker import - 镜像名
        >>基于Dockerfile来创建镜像
            命令:
                vim Dockerfile
                docker build -t 镜像名 目录->如:docker build -t ljl/text .
    >存出镜像
        将镜像存储为tar文件
        命令: docker save [参数] 输出镜像名 镜像名
            例: docker save -o ubuntu_18.04.tar ubuntu:18.04
        参数有 -o,-output string
    >载入镜像
        将镜像文件导入到镜像库中,导入的镜像与原镜像一致
        docker load [参数] 镜像文件名
        例: "docker load < ubuntu_18.04.tar"或"docker load -i ubuntu_18.04.tar"
        参数有: -i,-input string
    >上传镜像
        >>上传镜像默认上传到Docker Hub上
        >>要上传必须先登录:"docker login"
        >>上传的镜像可以使用:"docker push 用户名/镜像名:版本"
容器
>container(container是可读可写的,因为要运行程序或安装软件)
>是通过image创建的,所以必须有image
>类比与面向对象->image是一个类,container是类的实例化对象
>各自负责的功能: image是负责app的存储和分发的,container是负责运行app的
    
>可以通过docker container ls 来查看运行中的容器
>可以通过docker container ls -a (或: docker ps -a)来查看运行中和运行后终止的容器
>其中command下显示的是运行容器所执行的命令(也就是CMD(运行后就结束))
    
>运行容器:
由于直接使用"docker run 镜像名"执行的容器运行完就直接关闭了,没有交互式的运行。所以可以使用"docker run -it 镜像名 /bin/bash"来交互式的运行容器,并进入容器中。可以使用"ctrl+d"或者"exit"来退出交互式容器
    >>docker run执行容器时有时由于命令无法执行容器会出错直接退出,可以查看错误代码来判断是什么原因,默认情况常见的错误:
        >>>125:Docker daemon执行出错,例如:指定了不支持的Docker命令参数
        >>>126:所指定的命令无法执行,例如:权限出错
        >>>127:容器内命令无法找到
        命令执行出错后会默认返回命令的退出错误码
>进入运行中的容器:docker exec -it 容器id /bin/sh

>创建容器:
    >>"docker [contarner] create -it 镜像名",例:{docker create -it ubuntu:latest}创建出来的容器处于停止状态,可以使用"docker start 容器id",来启动容器 
    >>"docker run 镜像名 要执行的命令",例:{docker run ubuntu /bin/echo 'hello docker'},等同于创建容器后执行。
    
>删除容器: docker rm 容器id或容器名
    >>批量删除容器: 
        docker container ls -aq可以显示除所有容器的id,效果和"docker container ls -a| awk {'print$1'}显示第一列是一样的
        直接使用: docker rm $(docker container ls -aq)
        如果有启动也有启动后的容器,我们要删除启动后的容器可以使用:
        docker rm $(docker container ls -f "status=exited" -q)
    >>删除指定容器:docker rm 容器id或容器名
        >>>删除时可以挂载的参数:
            -f 是否强行终止并删除一个运行中的容器,默认为false
            -l 删除容器的连接,但保留容器
            -v 删除容器挂载的数据卷
            如: docker rm -f 容器id
    >>删除所有容器:docker rm $(docker ps -aq)

>显示运行中的容器: docker ps,加-a可以显示执行完的container,加-q可以显示第一行id

>查看容器运行日志:
    docker logs 容器id
    
>暂停容器:
    docker pause 容器id
    暂停后启动容器: docker unpause 容器id
    
>终止容器:
    docker stop 容器id
    终止后可以重新启动: docker start 容器id
    重启容器[先停止,然后启动]: docker restart 容器id
    
>容器的导入导出[可对容器导出后进行迁移然后导入]:
    >>导出:
        docker export [-o 导出文件名.tar] 容器id
            -o 可以用来指定导出后的文件名
    >>导入:
        docker import 镜像文件名 - 仓库名/镜像名:[tag]

>查看容器
    >>>查看容器具体信息:"docker inspect 容器id"(会以json格式返回包括容器id、创建时间、路径、状态、镜像、配置等在内的各项信息)
    >>>查看容器内进程:"docker top 容器id"(和在linux系统中top类似)
    >>>查看统计信息:"docker stats 容器id"(会显示cpu、内存、存储、网络等情况的统计信息)
        >>>>参数:
            -a 输出所有容器统计信息,默认仅在运行中的容器
            -no-stream 不持续输出,默认会自动更新持续实时结果
            -no-trunc 不截断输出信息

>从容器中复制文件到本地
    >>docker cp 本地 容器
    >>docker cp 容器 本地
    
>查看容器的文件系统变更
    >>docker diff 容器名或容器id
    
>查看容器端口所映射的主机端口
    >>docker port 容器名或容器id
    
>更新容器配置
    >>docker update 参数 容器名或容器id
    >>>参数查看: docker update --help
    >>>例:docker update --blkio-weight 100 容器名
[生产环境状态下,为提高可用性和安全性,要为容器配置合理的资源来管理容器的消耗。还要指定合适的容器重启策略,来自动重启退出的容器。还可以使用HXPorxy等辅助工具来实现负载均衡,自动切换故障的容器。]
Docker仓库
>概述:
    >>注册服务器(Registry)是存放仓库的地方(注册服务器可以存在多个仓库),
      仓库(Repository)是存放镜像的地方(仓库可以存放多个镜像)。
    >>例:一个仓库地址
        private-registry.com/repositoryname
        private-registry.com是注册服务器
        repositoryname是仓库名
        
>Docker Hub公共镜像市场(官方)
    >>地址:hub.docker.com
        登录平台注册,然后可以在linux服务器上使用"docker login"来进行登录。
        退出登录可以使用"docker logout"。
        登录后本地会自动创建.docker/config.json文件,用来存放用户的认证信息。
        登录成功后就从Docker Hub上可以上传镜像了
    
    >>查询镜像
        docker search 镜像名
        一般官方的为不带仓库的,非官方的带仓库名
        centos  官方
        lijinlong666/centos 非官方
    
    >>拉去镜像
        docker pull 镜像名:标签[不加标签默认latest]
    
    >>自动创建镜像(自动更新)
        自动更新是Docker Hub提供的自动化服务,主要解决的是代码项目发生变化后自动重新构建镜像,可以通过用户给定的一个目标网站(目前只支持GitHub和BitBuchet)。
>第三方镜像市场(阿里云、腾讯云、网易云等)
    >>阿里云:https://dev.aliyun.com/search.html
        
>搭建本地私有仓库
    >>待补充
练习
自己通过Dockerfile创建一个练习docker image
>   创建一个hello.c文件(其他文件可以,但需要环境存在)
>>  yum install -y gcc  #c语言需要的环境
    yum install -y glibc-static #c语言需要的环境
    vim hello.c
    #include<stdio.h>
    int main()
    {
        printf("docker demo1");
    }

>   将写好的c语言文件编译成可执行文件
>>  gcc -static hello.c -o hello

>   编写Dockerfile
>>  FROM scratch    #不依赖其他
    ADD hello /     #add到hello的根目录下 
    CMD ["/hello"]  #根目录下的hello

>   build Dockerfile
>>  docker build -t lijinlong666/hello .

>   查看docker image
>>  docker images

>   运行image
>>  docker run lijinlong666/hello

容器: 
构建自己的Docker镜像
例: 
    通过pull下来的镜像,进行交互式运行后在其中修改后(比如:yum install -y vim),然后commit出一个镜像
    (假设我们有一个centos的镜像)
    docker run -it centos   #交互式运行centos镜像
    yum install -y vim      #安装vim
    exit                    #退出镜像
    docker ps -a            #查看容器(包含已运行)
    docker commit 容器names 新镜像名    #commit一个容器到新镜像
    docker images           #查看所有镜像
例: 
    通过Dockerfile来构建镜像
    vim Dockerfile          #创建编写Dockerfile
        FROM centos         #依赖centos
        RUN yum install -y vim  #安装vun
    docker build -t lijinlong666/centos-vim .   #通过build新镜像
    docker images           #查看所有镜像
Docker网络
列举当前机器上有那些网络:
    docker network ls
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值