zoukankan      html  css  js  c++  java
  • Docker获取镜像以及相关指令

    常用命令:
    docker仓库:hub.docker.com
    docker pull 下载镜像,有可能因为镜像名被转移到新得镜像身上,所以可能会出现null得虚悬镜像pull/build
    docker run -it --rm ubuntu:16.04 bash // 以交互的模式运行容器
    docker exec -it ubuntu的容器id bash // 以交互的模式进入容器
    docker run -p 8080:8080 tomcat // 将宿主机的8080端口映射到容器的8080,所以还可以是80:8080 启动tomcat 可以在端口号后边起容器的名字如 docker run -p 80:8080 --name tom1 tomcat
    docker run -p 80:8080 --name tomcat1 -d tomcat // 以守护态运行
    docker container tomcat1 // 删除所有终止的容器
    docker ps
    docker ps -a
    docker rm 容器id
    docker rmi
    docker images
    exit/Ctrl + D 退出容器

    Docker获取镜像

    docker pull ubuntu:16.04 命令中没有给出Docker镜像仓库的地址,因此会从Docker Hub获取镜像。

    显示镜像:docker image ls

    运行
    docker run -it --rm
    ubuntu:16.04
    bash

    运行基于ubuntu:16.04启动一个容器
    -it 以交互的形式运行容器
    命令太长的换行符
    --rm 退出容器自动删除该容器
    退出容器 exit/Ctrl+D

    看正在运行的容器 docker ps
    看所有的容器 docker ps -a

    更新镜像 docker pull ubuntu16.04 即重新拉一次

    镜像体积

    虚悬镜像

    :即镜像既没有仓库名,也没有标签,均为
    原因是由docker pull和docker build时,因为官方镜像维护后,发布新版本,原来的镜像被转义到了新下载的镜像身上,而旧的镜像上的名字则被取消。
    可以用以下命令专门显示这类镜像

    对于Centos/RHEL的用户来说,在没有办法使用UnionFSd的情况下,一定要配置direct-lvm给devicemapper,无论是为了性能、稳定性还是空间利用率。

    docker image rm ubuntu16.04;删容器
    docker rmi 镜像id 删镜像

    Dockerfile
    Dockerfile脚本 用这个脚本来构建、定制进行
    Dockerfile是一个文本文件,内包含一条条的指令,每一条指令构建一层

    docker pull tomcat
    docker images
    docker image ls
    docker run -it
    tomcat
    bash
    此时路径为:/usr/local/tomcat
    ls -al
    自己装的软件必须安装在/usr/local

    cd webapps ll
    cd ROOT/
    ls -al

    echo "hello" > test.txt

    docker run -8080:8080 tomcat

    docker ps
    docker ps -a

    docker rm 容器id

    docker images
    docker run -p 8080:8080 tomcat

    from tomcat为文件第一行
    所有的dockerfile脚本必须有一个基础镜像
    run <命令> <尖括号为必填内容>

    docker run -it --rm tomcat bash
    ls -al 
    cd webapps/ 
    cd ROOT/
    ls -al
    pwd
    

    在/usr/local/docker 下创建一个目录

    mkdir tomcat
    cd tomcat/
    ll
    vi Dockerfile
    FROM tomcat
    RUN echo "Hello Docker" > /usr/local/tomcat/webapps/ROOT/index.html

    cat Dockerfile

    写完脚本开始构建镜像

    docker build -t shop .

    其中. 表示当前目录,镜像的构建需要基于dockerfile当前目录 shop是标签,起的名字

    docker run -it shop bash
    ls -al
    cd webapps/
    ls -al
    cd ROOT/
    ls -al
    cat index.html

    删除ROOT目录所有文件
    vi Dockerfile

    FROM tomcat 
    RUN cd /usr/local/tomcat/webapps/ROOT/
    RUN rm -fr *
    RUN echo "Hello Docker" > /usr/local/tomcat/webapps/ROOT/index.html
    

    报错了,把ROOT目录也删除了,
    docker images

    vi Dockerfile
    
    FROM tomcat 
    WORKDIR cd /usr/local/tomcat/webapps/ROOT/
    RUN rm -fr *
    RUN echo "Hello Docker" > /usr/local/tomcat/webapps/ROOT/index.html
    

    docker run -it --rm shop bash

    ls -al
    docker image prune
    docker rmi imageID

    容器是基于镜像的
    先退出容器
    docker ps
    docker ps -a
    docker ps imageID

    docker build -t mysql .
    寻找Dockfile 构建一个镜像上下文(Context)

    cd /usr/local/docker/
    ll
    rm -fr mysql/
    ll
    cd com
    rm -fr ROOT/
    ll
    cd tomcat/
    HOST OS宿主机上操作docker build -t shop
    将当前目录打包,请求RESTAPI,还带着这个目录的压缩包,
    Docker Server接收Docker build 解压缩,构建镜像

    COPY ./package.json /app/
    这并不是要复制执行docker build 命令所在目录下的package.json,也不是复制DOckerfile所在目录下的package.json,而是复制上下文(context)目录下的package.json。这个命令中的源文件的路径是相对路径

    拷贝index.html到

    FROM tomcat
    COPY index.html /usr/local/tomcat/webapps/ROOT/

    docker build -t shop .

    docker run -it --rm shop bash

    学习要有目的性,以最快的方式完成任务

    部署项目到Docker容器

    1. 拷贝shop.zip -> tomcat/webapps/ROOT/
    2. 修改访问端口号为80

    COPY <源路径>...<目标路径>
    // 源路径指的是上下文路径,即文件在docker server解压后得路径,目标路径指的是镜像内得路径如 /usr/local/tomcat/webapps/ROOT

    vi Dockerfile

    FROM tomcat
    COPY shop.zip /usr/local/tomcat/webapps/ROOT
    RUN unzip shop.zip
    

    WORKDIR 为工作目录,如果目录不存在,WORKDIR会帮你建立目录
    每一个指令都会构建一个分层
    每一个RUN都是启动一个容器,即使失败了,也启动了,会导致直接删除了不了镜像,所以需要先回去把该容器删除再删镜像 正常情况下,--rm 会自动删除

    vi Dockerfile

    FROM tomcat
    WORKDIR /usr/local/tomcat/webapps/ROOT
    RUN rm -fr *
    COPY shop.zip .
    RUN unzip shop.zip
    

    :wq!

    build -t shop .

    解压缩之后还需要一个命令
    vi Dockerfile

    FROM tomcat
    WORKDIR /usr/local/tomcat/webapps/ROOT
    RUN rm -fr *         #删除ROOT目录下所有内容
    COPY shop.zip .
    RUN unzip shop.zip
    RUN rm -fr shop.zip
    WORKDIR /usr/local/tomcat  #切换到镜像本身的工作空间
    

    :wq!

    build -t shop .

    ADD

    ADD指令和COPY的格式和性质基本一致 ADD指令会自动解压缩这个文件到<目标路径>中去

    vi Dockerfile

    FROM tomcat
    WORKDIR /usr/local/tomcat/webapps/ROOT
    RUN rm -fr *         
    ADD shop.tar.gz .
    WORKDIR /usr/local/tomcat
    

    :wq!

    docker build -t shop .
    可以看到他是把整个目录都打包了体积变的越来越大

    docker run -it --rm shop bash

    cd webapps/
    cd ROOT/
    ls -al
    可以看到自动解压缩了,并且原来的tar包也被删除了
    但是某些情况下,如果我们真的是希望复制个压缩文件进去,而不解压缩,这时就不可以使用ADD命令了。

    接下来是修改端口号为80
    docker image prune

    docker run -p 8080:8080 tomcat

    -p 的意思是 port端口

    EXPOSE <端口1> [<端口2>...]
    EXPOSE指令只是一个声明,运行时并不会因为这个声明应用就会开启这个端口的服务。
    在dockerfile中写入这样的声明有两个好处,一个是帮助进行使用者理解这个镜像服务的守护端口,以方便配置映射;另一个好处是在运行时使用随机端口映射时,也就是
    docker run -P时,会自动随机映射EXPOSE的端口

    EXPOSE 8080:8080 暴露端口号

    ** CMD [参数2,参数2...]**
    一个容器就是一个进程,一个程序
    设置脚本时 设置参数的占位符 如$1、$2

    test.sh
    SET PATH=$1

    test.sh /usr/local/tomcat
    其中/usr/local/tomcat就是路径传入的参数
    如传入三个参数 catalina.sh run stop restart成功的话, 则在catalina.sh中是有三个占位符的

    docker build -t 镜像名称 .
    构建实际上是打包本目录文件到服务端去构建然后返回响应内容
    镜像上下文-》指的是打包后到docker server中解压后得目录(而不是宿主机得目录)

  • 相关阅读:
    Linux环境下安装python3
    软件测试类型
    系统测试分类
    测试级别
    测试对象的介绍
    软件测试基本介绍
    简易留言板(还有一些小bug,修复ing...)
    Hosting static website on AWS
    Add a dependency in Android Studio
    Python good tutorials
  • 原文地址:https://www.cnblogs.com/cgy-home/p/11203669.html
Copyright © 2011-2022 走看看