常用命令

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

命令 解释
docker images 列出本地主机上的镜像链接
docker pull ubuntu:13.10 获取一个镜像
docker search 从 Docker Hub 网站来搜索镜像,这里找Httpd镜像
docker run httpd 运行镜像
docker rmi hello-world 删除使用
apt-get update 容器中执行 更新镜像
docker commit -m=”has update” -a=”zyf” 85a53b90bee4 zyf/ubuntu:v2 docker commit 来提交容器副本 -m: 描述
-a 指定作者 85a53b90bee4 复制容器的容器id
zyf/ubuntu:v2: 指定容器名称/tag标签
docker build -t zyf/centos:6.7 . docker build 构建镜像
-t: 指定创建的目标镜像名称
. : dockerfile文件所在目录也可以绝对路径
docker run -it zyf/centos:6.7 /bin/bash 镜像创建容器
docker tag 860c279d2fec zyf/centos:dev 设置镜像标签
docker tag <镜像id> 用户名称:镜像源/新标签名

构建镜像的dockerfile文件:

  1. 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

docker镜像使用 - 图1from: 定制的镜像都是基于from镜像
run: 用于执行后面跟着的命令。有以下2种格式

  1. #shell 格式: RUN <命令行命令>
  2. #<命令行命令>等同于,在终端操作的shell命令。
  3. #exec 格式: RUN ["可执行文件","参数1","参数2"]
  4. RUN ["./test.php","dev","offline"] #等价于RUN ./test.php dev offline

注意

Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

  1. FROM centos
  2. RUN yum install wget
  3. RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
  4. RUN tar -xvf redis.tar.gz
  5. # 以上执行会创建 3 层镜像。可简化为以下格式:
  6. FROM centos
  7. RUN yum install wget \
  8. && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
  9. && tar -xvf redis.tar.gz

以&&命令符号连接命令,这样执行后,只会创建1层镜像

开始构建镜像

dockerfile文件存放目录下执行

  1. docker build -t 镜像名称:镜像标签 .

注意: . 代表本次执行的上下文路径
上下文路径: 指docker在构建镜像,有时想本机文件,docker build 命令得知这个路径,会将路径下的所有内容打包。[由于docker是c/s运行模式,本机是c,docker引擎是s,我们需要将自己的包提供给引擎]

构建指令详解

其他

[root@iZbp109ewdz83smaysp3awZ ~]# docker images
【镜像的仓库源】 【标签】 【镜像ID】 【创建时间】 【镜像大小】
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4e2eef94cd6b 4 days ago 73.9MB
nginx latest 4bb46517cac3 10 days ago 133MB

docker hub 地址: https://hub.docker.com/

[root@iZbp109ewdz83smaysp3awZ ~]# docker search httpd
【仓库源名称】 【描述】 【点赞数】 【是否官方】 【自动构建】
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP xx 3151 [OK]
centos/httpd-xx Platform forxx 36
centos/httpd 30 [OK]