1. 安装docker

参考:docker安装

2. 基础概念

2.1 容器命令

  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
  • docker ps:查看容器相关信息
  • docker logs 容器ID:查看容器的输出
  • docker stop 容器ID:停止容器
  • docker pull 镜像名字:拉取镜像
  • docker restart 容器ID:重启停止的容器
  • docker exec -it 243c32535da7 /bin/bash:进入某个容器
  • docker export 1e560fca3906 > ubuntu.tar:导出容器
  • docker import ubuntu.tar test/ubuntu:将容器导入为镜像
  • docker rm -f 容器ID:删除容器,** 容器必须是停止状态**
    docker container prune:清理掉所有处于终止状态的容器
  • docker run 加上–rm退出容器以后,这个容器就被删除了,方便在临时测试使用。不加–rm 退出容器后,容器只是停止运行,数据任然被保留。
  • docker run -v: 挂载目录,通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
    默认挂载的路径权限为读写。如果指定为只读可以用:ro

docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu64 /bin/bash

2.2 web应用

  • docker run -P training/webapp python app.py:-P将容器内部的网络端口随机映射的主机上 ,-p(小写)是指定端口映射关系

0.0.0.0:32768->5000/tcp:主机的32768端口,容器中为5000

  • docker run -d -p 5001:5000 training/webapp python app.py:主机地址在前,映射到容器中的地址
  • docker port 容器ID:查看容器的端口映射关系
  • docker logs -f 容器ID:像使用tail -f一样来输出容器内部的标准输出
  • docker top 容器ID:查看容器内部运行的进程
  • docker run --name 容器名:为新建的容器制定名字

2.3 镜像命令

  • docker images:列出本地主机上的镜像

  • docker hub地址

  • docker rmi 镜像名:删除镜像

  • 创建镜像

    • 从已经创建的容器中更新镜像,并提交这个镜像
    • 使用Dockerfile指令来创建一个新的镜像
  • 更新镜像

    • 1.用原有的镜像创建一个容器
    • 2.在容器内操作
    • 3.docker commit -m=“has update” -a=“runoob” e218edb10161 runoob/ubuntu:v2
    • 4.使用docker images进行查看
  • 构建镜像

    • docker build -t 目标镜像名字 . :使用当前目录下的Dockerfile创建一个镜像
    • docker tag 镜像ID runoob/centos:dev:设置镜像标签

2.4 仓库管理

  • docker hub地址
  • docker login:登录,可以从docker hub上拉取自己账号下的全部镜像
  • docker logout:退出
  • docker search 关键词:搜索镜像
  • docker pull 镜像名:拉取镜像
  • docker push 镜像名:向docker hub上推送镜像

2.5 Dockerfile

  • FROM:定制的镜像都是基于FROM的镜像
  • RUN:用于执行后面跟着的命令行命令
    • shell格式:RUN 命令(等同于shell命令)
    • exec格式:RUN [“可执行文件”, “参数1”, “参数2”]
      注意: dockerfile的每条指令都会在docker上新建一层,过多的无意义层,会造成镜像过大。
  • docker build -t 目标镜像名 . :创建镜像
  • 上下文路径:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
  • COPY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
    格式
COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。
<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

  • ADD ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。

  • CMD
    • CMD 在docker run时运行
    • RUN 在docker build
  • ENV:设置环境变量
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

以下示例设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用:

  • EXPOSE:声明端口

  • WORKDIR:制定工作目录,只有通过 WORKDIR 创建的目录才会一直存在。

3. 其他场景

3.1 修改以后镜像中的文件

有两种方式:

  1. 修改原文件后,用dockerfile重新构建
  2. 在已有镜像的基础上,新建一个容器,修改文件,docker commit
  3. 或者把源程序,采用挂载的方式(docker run -v)这样修改源文件了,可以马上生效

4. 导出,导入镜像

4.1 导出镜像
docker save -o image.tar image_name

4.2 导入镜像
docker load -i image.tar