美文网首页
Docker常用命令

Docker常用命令

作者: learninginto | 来源:发表于2020-10-17 21:27 被阅读0次

    Docker是一个开源的应用容器引擎,基于Go语言,遵从Apache2.0协议开源。让开发者可以打包他们的应用以及以来包到一个可移植的镜像中,然后发布到任何Linux或Windows上,也可以实现虚拟化。

    为什么要使用Docker?

    它可以消除协作编码时“在我的机器上可以正常工作”的问题。

    构建镜像

    构建镜像有docker comomitdocker build、Dockerfile文件两种方式,我们不推荐使用docker commit命令,而应该使用更灵活、更强大的Dockerfile来构建Docker镜像。

    • 创建Docker Hub账号

    受限需要注册一个账号,并在注册后通过收到的邮件来激活

    • 登录
    docker login 域名
    Username:lxc
    Password:
    Email:learninginto@163.com
    Login Succeeded
    

    该命令会完成登录到Docker Hub的工作,并将认证信息保存起来以供后面使用。

    个人认证信息会保存到$HOME/.dockercfg文件中

    • 创建第一个Dockerfile

    创建一个包含简单Web服务器的Docker镜像,之后使用docker build命令基于该Dockerfile中的指令构建一个新的镜像

    mkdir static_web
    cd static_web
    touch Dockerfile
    

    我们创建了一个名为static_web的目录来保存Dockerfile,这个目录就是我们的构建环境,在Docker中称该环境为上下文。

    Docker会在构建镜像时将上下文中的文件和目录上传到Docker守护进程,这样就能直接访问在镜像中存储的任何代码、文件或其他数据。

    # Version:0.0.1 这是一条注释,以#开头
    FROM ubunto:14.04
    MAINTAINER lxc "learninginto@163.com"
    RUN apt-get update
    RUN apt-get install -y nginx
    RUN echo 'Hi, I am in your container' \
        >/user/share/nginx/html/index.html
    EXPOSE 80
    

    该Dockerfile由一系列指令和参数组成。每条指令,如FROM,都必须为大写字母,且后面要跟随一个参数,FROM指令指定一个已经存在的镜像(基础镜像),后续指令都将基于该镜像进行。指令的执行会按照从上到下的顺序,所以应该合理地安排指令的顺序。

    最后,设置了EXPOSE指令,告诉Docker该容器内的应用程序将会使用容器的指定端口。可以指定多个EXPOSE指令来向外部公开多个端口。

    基于Dockerfile构建新镜像
    cd static_web
    docker build -t="lxc/static_web" .
    

    通过指定-t为新镜像设置仓库和名称,lxc为仓库名,static_web为镜像名。

    也可以在构建镜像的过程中设置一个标签:"镜像名:标签"

    docker build -t="lxc/static_web:v1" .
    

    如果没有制定任何标签,Docker将会自动为镜像设置一个lastest标签。
    上面命令行最后的“.”告诉Docker到本地目录去找Dockerfile文件,也可以指定一个Git仓库的源地址来指定Dockerfile的位置

    docker build -t="lxc/static_web:v1" \ git@github.com:lxc/docker-static_web
    

    再回到docker build过程,可以看到构建上下文已经上传到了Docker守护进程

    Send build context to Docker damon 2.56kB
    

    如果在构建上下文的根目录下存在以。dockerignore命名的文件,那么该文件的内容会被按行分割,非常像.gitignore文件,用来设置哪些文件不会被上传到构建上下文中。

    • 指令失败会怎样

    假设在第四步中将软件包的名字弄错了,比如写成了ngin,最终在操作结果会停留在第四步,提示:

    Unable to locate package ngin
    

    可以用docker run 命令从目前为止已经成功的最后一步创建一个容器。

    docker run -t -i 9942423ld4 /bin/bash
    

    这时在容器中可以再次运行apt-get install -y ngin,并指定正确的包名,直到解决问题,退出容器,使用正确的包名修改Dockerfile文件,之后再尝试进行构建。

    打包完之后,提示successfully

    再查看刚刚打包的镜像是否存在,若镜像没有更改可能不会生成新的镜像

    查看所有的镜像
    docker images
    

    本地镜像都保存在Docker宿主机的/var/lib/docker目录下

    • 查看镜像构建过程
    docker history 22342sd432 
    
    • 将镜像push到远程
    docker push docker-hub.cloud.top/vdfw3/center-web:latest
    
    • 查看已经运行的容器
    docker ps
    
    • 查找镜像

    在Docker Hub上查找所有带有puppet的镜像

    docker search puppet
    
    • 进入docker容器
    docker exec -ti 557571d5655c sh
    
    • 删除docker镜像
    docker rmi "id"
    

    可以通过下面的技巧,一次删除所有容器

    docker rm `docker ps -a -q`
    

    上面的docker ps命令会列出当前全部容器,-a列出所有(all)容器,而-q标示只需要返回容器的ID,这样我们就得到了容器的列表,传给docker rm命令,从而达到删除所有容器的目的。

    • 拉取镜像
     docker pull docker-hub.cloud.top/vdfw/nginx:1.16.1-alpine
    
    • 修改权限

    进入到文件目录外层

    chmod -r 777 文件名
    
    • 查看日志报错信息
    docker-compose logs -f "名称"
    docker logs "id"
    
    • 重启docker进程
    //进入相应目录
    docker-compose up -d
    docker-compose restart "名称"
    //对应docker-compose.yml中的名称
    

    相关文章

      网友评论

          本文标题:Docker常用命令

          本文链接:https://www.haomeiwen.com/subject/jrgfmktx.html