• docker学习


    docker常用命令

    容器操作命令

    查看容器状态

    查看正在运行的容器

    docker ps -a
    
    • 1

    在这里插入图片描述
    第一列容器id,停止容器会用到
    第二列IMAGE是这个容器所使用的镜像
    第三列COMMAND是这个容器启动时附带的命令
    第四列CREATED是代表这个容器什么时候创建的
    第五列代表这个容器的状态,up就是运行,Exited退出
    第六列PORTS代表这个容器使用的网络端口,一般web服务器会用到,上面几个例子中都没用到端口

    启动容器

    docker run ubuntu:latest /bin/echo "hello world"
    
    • 1

    run的意思是使用ubuntu的latest版本镜像创建一个新容器,然后运行/bin/echo这个程序,打印hello world
    在这里插入图片描述
    当然也可以直接执行docker run ubuntu:latest就会什么也不做自动退出

    docker run -itd --name ubuntuTest ubuntu:latest /bin/bash
    
    • 1

    也可以写成

    docker run -i -t -d --name ubuntuTest ubuntu:latest /bin/bash
    
    • 1

    -i:交互式操作,因为我们启动容器后运行了/bin/bash所以需要交互
    -t: 显示一个终端,如果启动了/bin/bash,但是没有用-t参数,输出将会不可见,就会是下面这个效果
    -d: 将容器后台运行,如果不指定-d,则当前终端退出,docker容器就会自动退出
    –name: 指定当前容器的名字,也可以不写,主要在一个镜像版本启动了多个的时候可能需要指定吧

    没有使用-t的效果
    在这里插入图片描述

    启动已经停止的容器

    docker start b750bbbcfd88 
    
    • 1

    b750bbbcfd88是容器ID,用docker ps -a命令可以看到

    docker start和run的区别,run会使用镜像创建一个新容器,start会用之前创建的容器来运行。
    举个例子,现在要用docker启动一个web服务器实例,指定了端口8080,如果现在需要使用这个镜像启动另一个web服务器实例,不能指定端口8080了,所以就需要使用docker run命令。重新指定一个端口号来启动。

    重启正在运行的容器

    重启一个正在运行的容器,可能这个容器发生了内存溢出,或者cpu满了

    docker restart <容器 ID>
    
    • 1

    进入容器

    在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入

    docker attach b750bbbcfd88
    或者
    docker exec b750bbbcfd88
    
    • 1
    • 2
    • 3

    b750bbbcfd88是容器ID,用docker ps -a命令可以看到
    exec和attach的区别就是,使用attach进入容器退出后,容器会停止运行,exec不会停止运行

    停止容器

    docker stop b750bbbcfd88
    
    • 1

    b750bbbcfd88是容器ID,用docker ps -a命令可以看到

    容器导出

    docker export 1e560fca3906 > ubuntu.tar
    
    • 1

    上面的命令会将容器快照导入ununtu.tar文件中

    容器导入

    从导出的快照文件中导入

    cat ubuntu.tar | docker import - ubuntu:v1
    
    • 1

    从网络中导入

    docker import http://example.com/exampleimage.tgz example/imagerepo
    
    • 1

    容器删除

    删除单个容器

    docker rm -f 1e560fca3906
    
    • 1

    删除所有处于终止状态的容器

    docker container prune
    
    • 1

    容器内状态查看

    查看容器标准输入输出日志

    docker logs 1e560fca3906
    
    • 1

    查看容器内运行的进程

    docker top 1e560fca3906
    
    • 1

    查看容器配置信息

    docker inspect 1e560fca3906
    
    • 1

    容器重命名

    docker rm name1 name2
    
    • 1

    镜像操作命令

    images查看本机镜像列表

    docker images
    
    • 1

    pull从远程镜像仓库中下载一个新的镜像到本地

    docker pull ubuntu:13.10
    
    • 1

    search搜索镜像

    docker search httpd
    
    • 1

    rmi删除镜像

    docker rmi httpd
    
    • 1

    更新镜像

    当我们的镜像版本比较老时,可以进行更新
    首先使用镜像创建一个容器,并启动一个命令行

    docker run -t -i webapp:v1 /bin/bash
    
    • 1

    如果镜像中包含了node服务
    可以使用npm install 进行更新。
    更新完成之后在命令行中使用exit停止容器

    然后使用commit来提交容器副本,-m是本次更新的描述信息,-a是author的意思。e218edb10161是刚才停止的那个容器ID,webapp:v2是新的镜像名称

    docker commit -m="更新了node.js版本" -a="bugggget" e218edb10161 webapp:v2
    
    • 1

    构建镜像

    构建镜像需要创建一个Dockerfile文件,然后在这个文件中指定镜像中需要包含的内容。
    如果我们需要构建一个镜像,包含Nginx,redis
    可以在Dockerfile中写入如下内容

    FROM nginx
    LABEL image.authors="bugggget"
    
    ENV BUILD_DESC 镜像开始构建,这是一个本地构建的nginx镜像
    ENV RUN_DESC 容器启动
    
    RUN echo $BUILD_DESC > /usr/share/nginx/html/index.html \
    && RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz
    
    COPY ./ /usr/tom/tmp
    
    VOLUME ["/mnt","/user/test"]
    
    CMD echo $RUN_DESC 
    
    ENTRYPOINT ["nginx", "-c", "/etc/nginx/nginx.conf"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    注意/usr/share/nginx/html/index.html是在容器内的路径,不是当前主机上的路径,一般不要去修改他
    FROM:docker镜像是分层的,FROM是这个镜像的基础镜像

    LABEL:添加镜像的一些描述信息

    ENV:定义的环境变量,Dockerfile和容器运行时都可以使用$来引用这个变量

    RUN:只有在build时才会运行,每次运行RUN命令的时候都会新增一层镜像。所以为了减少分层次数,上面使用了&&符号来连接

    COPY:将相对当前Dockerfile上下文的文件复制到容器中对应的目录下,如果对应的目录不存在则会创建。这里是把本机上当前目录下所有文件都复制到了容器中的/usr/tom/tmp目录下(copy注意了,src尽量写当前路径,desc应该是绝对路径)

    VOLUME:设置文件挂载点,也就是将当前主机中的/mnt目录和容器中/user/test这个目录关联起来,后续/user/test中的任何变动都会同步到主机的/mnt目录下。可以用于日志文件保存,防止容器关闭导致日志文件流失。也可以在运行时使用-v来指定挂载点 -v /mnt:/usr/test

    CMD:每次容器启动时都会执行的命令或者脚本,如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。如果命令带了参数,可以通过在docker run时修改cmd的参数

    ENTRYPOINT:功能和CMD类似,但是参数不可变

    RUN和CMD,ENTRYPOINT的区别
    RUN表示在构建过程中执行的命令,如果RUN命令失败,那么镜像就会创建失败。所以一定不要在RUN中写程序启动的命令

    CMD和ENTRYPOINT表示在运行过程中执行的命令,在build过程中不会被执行

    Dockerfile文件编写完成之后,执行build命令

    docker build -t nginxtest:v1 .
    
    • 1

    nginxtest:v1是镜像的名称和版本
    .是构建时需要打包的路径,相当于构建上下文。这行命令会把当前目录下的所有文件都打包到镜像中。所以镜像中不要放没有用的文件

    docker授权命令

    sudo groupadd docker     #添加docker用户组
    sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
    newgrp docker     #更新用户组
    docker ps    #测试docker命令是否可以使用sudo正常使用
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    计网课设-发送TCP数据包
    《TCP/IP网络编程》阅读笔记--Socket类型及协议设置
    SQL练习 2022/7/2
    用Python实现报表自动化详解
    记账的三个阶段
    SQL语句操作数据库
    postgres数据迁移
    C++中类的友元函数和友元类详解
    GIT使用(踩坑)
    Espresso Test 3: Fragment Test
  • 原文地址:https://blog.csdn.net/Bugggget/article/details/126438234