docker

docker的几个术语

  • 镜像image
  • 容齐container
  • docker client
  • docker daemon  : 接受客户端请求,实现功能并返回结果
  • registry : 仓库

docker 常用命令

container操作 

  • run 创建一个新的容器并运行一个命令
    • docker run -it 10.10.1.44:8580/library/centos:7   /bin/bash  : 以交互式进入启动容器,并执行/bin/bash
    • docker run -itd  10.10.1.44:8580/library/centos:7   : 以后台运行模式启动容器 
  • ps 查看容器列表  
    • docker ps -a 查看所有容器,包括已经挂掉的容器
    • docker ps -aq  查看所有容器,只要第一列数据      
  • 停止容器 : docker stop  容器
  • 重启容器 : docker restart 容器
  • 删除容器 : docker rm 容器
  • 进入一个后台运行的容器 :
    • docker attach 3e
    • docker exec -it 3e /bin/bash
      • 推荐使用exec进入后台运行的容器,此中方式进入 exit退出终端不会导致容器的终止,而attach进入容器exit退出终端会导致容器结束  
  • 从容器创建一个新的镜像: docker。 commit   -a '  zj.com'    -m   'my hello world'    60945e446bf3(容器id):v1[版本号] 
    • a 指定作者; m 镜像描述信息;
  • 从宿主机向容器内拷贝文件 :
    • docker cp  ./test  容器id:/tmp/      ; 将宿主机的test文件复制到容器的tmp文件下
    • docker cp  ./test  容器id:/tmp/text    ;将宿主机的test文件复制到容器tmp文件夹下并重命名为text
  • 查看容器日志 :
    • docker logs 容器id
    • docker logs --since '2019-11-11' --tail 7 3e9f9f501d5a  ; 查看自从规定日期开始的7条日志
  • 导入和导出容器
    • docker export 容器id > my.tar   ; 将容器到出为本地文件
    • cat my.tar | docker import - hello:v1  ; 将本地文件导入为镜像
  • 运行一个web应用
    • 载入镜像 : docker pull training/webapp
    • 运行镜像 : docker run -d -P training/webapp  python app.py
      • -d 后台运行
      • -P 将容器内所有用到的端口映射到主机上
    • 查看web应用容器 : docker ps   ;
      • 此时会看到这里多了端口信息 0.0.0.0:32769->5000/tcp
      • docker 开放了5000端口,映射到主机32679上
    • 使用-p参数设置不一样的端口
      • docker run -d -p 5000:5000 training/webapp python app.py
    • 快速查看网络端口映射
      • docker port 容器id或者容器名字
    • 查看web应用程序日志
      • docker logs -f 容器id
      • f参数: 同tail -f
    • 查看容器内部的进程 : docker top 容器
    • 检查web应用程序
      • docker inspect 容器;  返回一个json格式,记录者docker容器的配置和状态信息

镜像操作

当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从镜像仓库中下载,默认是从docker hub公共镜像源下载

  • 运行一个镜像:
    • docker run -t -i centos:v1 /bin/bash
    • -i 交互式操作
    • -t 终端
    • centos 镜像名, v1版本号
    • /bin/bash 放在镜像名后边的是命令,这里我们想要有个交互式的shell,因此使用/bin/bash
  • 获取一个新的镜像
    • docker pull centos7
  • 查找镜像
    • 我们可以从docker hub网站搜索镜像, 网址为 https://hub.docker.com
    • docker search 命令来搜索镜像
  • 拖拽镜像
    • docker pull ansible/centos7-ansible
  • 删除镜像
    • docker rmi hello-world
  • 创建镜像
    • 从已经创建的镜像中修改,并提交这个镜像
    • 使用dockerfile指令来创建一个镜像
  • 更新镜像
    • 使用镜像来创建一个容器 docker run -it ansible/centos7-ansible
    • 在容器中安装python3.6 yum install python36
    • 完成后 exit退出容器
    • 此时 ps -a 可以查看我们修改后的容器
    • 通过 docker commit 提交副本     docker commit -m '描述信息'  -a  '镜像作者'   镜像id    py36:v1(镜像名)
  • 构建镜像
    • docker build
    • dockerfile详解
      • docker通过读取dockefile中的指令自动生成镜像
      • dockerfile基本结构
        • 基础镜像信息
        • 维护者信息
        • 镜像操作指令
        • 容器启动时的指令
        • # 为docker中的复制
      • FROM 指定基础镜像,必须为第一个指令
        • FROM  image
        • FROM  image:tag
        • FROM  image@digest
        • tag 和 digest 参数是可选的,如果不写,则默认选择最新的镜像
      • MAINTAINER   维护者信息
        • MAINTAINER zj
        • MAINTAINER  zj@163.com
      • RUN  构造镜像时执行的命令
        • 用于在镜像容器中执行命令,有两种方式
        • shell执行: run command
        • exec执行: run ['executable', 'param1', 'param2']
      • ADD 将本地文件添加到容器中,tar文件会被自动解压, 网络文件不会被解压,可以访问网络资源,类似wget
        • ADD home*  /mydir/     添加所有包含home的文件到mydir
        • ADD hom?.txt  /mydir/  ?代表一个字符
        • ADD test relative/   将test 添加到 workdir/relative/下
        • ADD test /absolute/   将test添加到 absolute/下
      • COPY  功能类似于ADD, 但是不能用来解压tar文件,也不能用来访问网络文件
      • CMD 构建容器后调用, 也就是在容器启动时调用
        • CMD ['executable' , 'param1', 'param2']
        • CMD ['param1', 'param2']   设置了ENTRTPOINT 则执行entrypoint并添加参数
        • CMD command param1  param2  ; 执行shell内置命令
      • ENTRYPOINT 与cmd类似,只不过docker run执行的命令不会覆盖entrypoint , 而docker run指定的所有参数,都会作为参数传递给entrypoint
      • ENV 设置环境变量
        • ENV myname zj
        • ENV mycat=cat
      • EXPOSE 指定与外界交互的端口
        • EXPOSE 80 443
        • EXPOSE 8080
        • EXPOSE并不会让容器的端口访问到主机,要使其访问,需要在docker run容器的时候通过 -p参数来发布这些端口
      • WORKDIR 工作目录,类似于cd命令
        • WORKDIR /a  此时工作目录在/a   
        • WORKDIR b   此时工作目录在 /a/b
        • WORKDIR c   此时工作目录在 /a/b/c
        • 通过workdir指定工作目录后,所有的run,cmd,entrypoint命令都会在工作目录执行,在使用docker run命令来运行容器的时候,可以通过-w参数来创建所需目录
    •   

       dockerfile示例                                                                            

    • # This my first nginx Dockerfile
      # Version 1.0
      
      # Base images 基础镜像
      FROM centos
      
      #MAINTAINER 维护者信息
      MAINTAINER tianfeiyu 
      
      #ENV 设置环境变量
      ENV PATH /usr/local/nginx/sbin:$PATH
      
      #ADD  文件放在当前目录下,拷过去会自动解压
      ADD nginx-1.8.0.tar.gz /usr/local/  
      ADD epel-release-latest-7.noarch.rpm /usr/local/  
      
      #RUN 执行以下命令 
      RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
      RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
      RUN useradd -s /sbin/nologin -M www
      
      #WORKDIR 相当于cd
      WORKDIR /usr/local/nginx-1.8.0 
      
      RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
      
      RUN echo "daemon off;" >> /etc/nginx.conf
      
      #EXPOSE 映射端口
      EXPOSE 80
      
      #CMD 运行以下命令
      CMD ["nginx"]

dokcerfile示例

FROM py36:v1
MAINTAINER zj.com
ADD huancai /home/huancai
WORKDIR /home/huancai
ADD static /home/huancai/static
ENTRYPOINT pip3 install -r require.txt
ENTRYPOINT /bin/bash

 docker build -t huancai:v1 .

docker run --net=host -v /home/static:/home/huancai/static  huancai:v1  /bin/bash   设置网络和文件挂载

         

原文地址:https://www.cnblogs.com/zhangjian0092/p/11846858.html