部署 docker 常用命令笔记

lifei1245 · 2017年10月25日 · 667 次阅读
本帖已被设为精华帖!

一 : 容器的使用

  • docker 服务开启 sudo service docker start
  • 容器内运行一个应用程序 docker run ubuntu /bin/echo “hello world” 在 ubuntu镜像中输出helloworld (如果本地有对应地镜像,则会用本地镜像,如果没有,将会从仓库自动下载对应镜像执行指令)
  • 运行容器交互 docker run -i -t ubuntu /bin/bash 与ubuntu镜像交互 -t在新容器制定一个终端 -i 允许你对容器内的标准输入进行交互
  • 容器启动 docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done",docker 后台启动(-d)一个ubuntu的容器,容器不断输出helloworld 返回一长传字符串 为容器地id 过后可以通过 docker ps 查看运行中的容器 找到容器的id和name 并通过docker logs id(or name)查看输出的hello world
  • 容器停止 docker stop id(or name)
  • 运行一个web应用 docker run -d -P -p 5000:5000 training/webapp python app.py -d 让容器在后台运行 -P 将容器使用地网络端口映射到我们使用的主机上面
  • 查看容器内部运行的进程 docker top id(or name)
  • docker inspect id (or name)查看一个容器的底层信息 返回容器地详细信息的一个json
  • docker stop id(or name)停止一个容器 docker rm id(or name)删除一个容器(必须处于停止状态)
  • 进入容器交互 docker attach id

二:镜像的使用

  • 查看docker镜像 docker images (本地镜像列表)
  • 一个镜像可能会有多个标签 例如ubuntu 有14.04 15.04等多个tag 如果要使用指定的tag版本 docker run ubuntu:15.04 /bin/echo “hello world” 不指定地话会使用latest的版本
  • 获取一个新的镜像 例如docker pull ubuntu:13.10
  • 搜索镜像 可以到docker hub 搜索 也可以使用docker search 命令 例如 docker search httpd
  • 拖取镜像 docker pull httpd
  • 创建一个新的镜像
    1. 从以及创建地容器中更新,并且提交这个改动后的镜像
    2. 使用Dockerfike指令来创建一个新的镜像
  • 更新镜像
    1. 使用镜像创建一个容器 docker run -t -i ubuntu:15.10 /bin/bash
    2. 在容器的交互里使用apt-get update 更新 之后输入exit退出容器
    3. 使用commit提交更新后的镜像 docker commit -m="has update" -a="root" name(or id) root/ubuntu:v2 -m 此次提交地描述信息 -a 指定镜像作者 id 容器id root/ubuntu:v2 指定要创建的目标镜像名 更新完后可以通过docker images来查看本地提交地新镜像 root/ubuntu:v2 并且可以用 docker run -t -i root/ubuntu:v2 /bin/bash来使用我们刚才更新地镜像创建一个容器 并且开启新容器地交互
  • 构建镜像 命令为docker build
    1. 创建一个Dockerfile 写好创建规则
    2. 创建镜像 docker build -t root/ubuntu:0.0 .XXX -t 指定要创建地目标镜像名 .XXX Dockerfile 文件的所在目录 可以制定Dockerfile的绝对路径 创建成功后通过docker images 查看
  • 设置镜像标签 docker tag id root/centos:dev 用户名称、镜像源名(repository name)和新的标签名(tag)

三: 容器的链接

  • 网络端口映射 创建一个python应用的容器 docker run -d -P training/webapp python app.py -p 5000:5000 -p是容器内部端口绑定到指定的主机端口。-P是容器内部端口随机映射到 主机的高端口。 另外,我们可以指定容器绑定的网络地址,比如绑定127.0.0.1。 例如 docker run -d -p 127.0.0.1:5001:5002 training/webapp python app.py 这样我们就可以通过访问本地地5001端口来访问容器地5002端口
  • 我们可以通过--name来指定容器的名字 docker run -d -P --name lifei training/webapp python app.py 这样创建地容器名字就不是系统随机指定的了

Dockerfile 编写规范

  • 虽然指令忽略大小写,但建议用大写 所有格式均为 指令+空格加参数
  • MAINTAINER 用来指定维护者的姓名和联系方式
  • FROM <image>/<image>:<tag> 设置基本的镜像,为后续的命令使用 应写在最顶部 例如 FROM ubuntu
  • RUN 这个会在上面from地镜像里执行命令,然后提交结果 提交后的镜像会在后面继续使用 RUN <command> (这个命令运行一个shell中 - '/bin/sh -c')或者RUN ["executable", "param1", "param2"] 这个RUN命令相当于在外面执行 docker run image_name command
  • CMD and ENTRYPOINT ,设置在容器启动时执行命令,ENTRYPOINT:表示镜像在初始化时需要执行的命令,不可被重写覆盖,CMD: 表示镜像运行默认参数 ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效! 需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,需切记!
  • USER 比如指定 memcached 的运行用户,可以使用上面的 ENTRYPOINT or CMD来实现: ENTRYPOINT ["memcached", "-u", "daemon"] 有更好的实现方式 ENTRYPOINT ["memcached"] USER daemon
  • EXPOSE 命令可以设置一个端口在运行的镜像中暴露在外,在docker使用--link来链接两容器时会用到相关端口
  • ENV 设置环境变更 使用此dockerfile生成的image新建container,可以通过 docker inspect CONTAINER ID
    看到这个环境变量 也可以通过在docker run时设置或修改环境变量
  • ADD 从src复制文件到containerdest路径: ADD <src> <dest> <src> 是相对被构建的源目录的相对路径,可以是文件或目录的路径, 也可以是一个远程的文件url <dest>container中的绝对路径
  • VOLUME 创建一个挂载点用于共享目录 如VOLUME ["/data"] docker run -it -v /home/lifei/PyProjects:/src/PyProjects -p 5000:5000 lifei/ubuntu:0.1 /bin/bash src为挂载点, 本地的PyProjects就挂载到docker 的PyProjects上 而共享目录
  • WORKDIR WORKDIR /path/to/workdir 配置RUN,CMD, ENTRYPOINT 命令设置当前工作路径 可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令 例如 WORKDIR /a WORKDIR b WORKDIR c RUN pwd 其实是在 /a/b/c 下执行 pwd
共收到 0 条回复
es6china 将本帖设为了精华贴 10月26日 11:29
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册