dcoker基本命令汇总

基础命令

  1. docker版本安装
    docker –version :查看docker安装版本
    docker run -d -p 80:80 –name webserver nginx :运行nginx服务
    docker stop webserver :停止nginx服务器
    docker rm webserver :删除nginx容器
    service docker restart:重启docker服务
    离线镜像安装
    cat ubuntu-14.04-x86_64.tar.gz |docker import - ubuntu:ubuntu14
    获取镜像
    docker pull –help:查看获取镜像的方式
    docker pull [option] [docker registry地址] <仓库名>:<标签> :{option可省略},{docker registry地址一般方式是:<域名/IP>[:端口号],默认是docker hub},{仓库名,默认是library官方镜像}
  2. 启动镜像
    docker run -it –rm ubuntu:14.04 bash :启动里面的bash 并进行交互式操作。
    exit:退出容器
    -i :交互式操作
    -t :终端
    –rm:容器退出后将其删除
    ubuntu:14.04:指定其为基础镜像启动
    bash:放在镜像名后面的是命令,此时希望有个交互式shell,进入容器后可以在shell下操作
  3. 列出镜像
    docker images :列出所有顶层镜像
    没有仓库名没有标签的镜像为:虚悬镜像
    docker images -f dangling=true :显示虚悬镜像
    docker rmi $(docker images -q -f dangling=true) :删除虚悬镜像
    docker images -a :列出所有镜像,包括中间层镜像,中间层镜像:其它镜像依赖的镜像
    docker images ubuntu :列出仓库名为ubuntu的镜像
    docker images ubuntu:14.2
    docker images -f since=registryName:tag :在registryName:tag之后建立的镜像,之前用:before。
    -f :过滤
    如果构建镜像时使用了LABLE,则可以用label来过滤
    docker images -f label=
    特定格式显示查询出的镜像
    docker images -q :把镜像的id列出来
    docker images –format “{{.ID}}:{{.Repository}}” :列出id和仓库名称,以冒号分割
    docker images –format “{{.ID}}\t{{.Repository}}\t{{.Tag}}” :列出id和仓库名称和tag,以空格分割
  4. 定制镜像
    docker run -d -p 80:80 –name webserver nginx :用nginx镜像启动一个容器,命名为webserver,并且映射了80端口
    docker run -d -p 81:80 –name webserver nginx :用nginx镜像启动一个容器,命名为webserver,并且映射了81端口
    docker exec -it webserver bask :docker exec 命令以交互终端的模式进入容器并执行bash命令,也就是获得一个可操作的shell,此时可以改动容器内容(实际修改容器的存储层)
    docker diff webserver :查看容器的具体改动
    docker commit [选项] <容器id或者容器名> [<仓库名>]:[<标签>]。:没使用卷或宿主内存,容器中的修改都存在于容器的存储层,通过commit可以将容器的存储层保存下来成为镜像
    {在原有镜像的基础上加上容器存储层形成新的镜像}
    示例:
    docker commit \
    –author “zhaoning” \
    –message “修改了啥” \
    容器名称 \
    :
    说明:
    –author:指定修改人
    –message:修改内容
    docker history : :查看镜像内的历史记录.{是与:比较}

Dockerfile编写

说明:Dockerfile中每条指令都会构建一层
1. FROM
FROM :制定基础镜像
scratch :表示空白镜像,以空白镜像为基础的镜像,将第一个命令作为第一层开始存在
示例:FROM scratch
2. RUN
RUN执行指令
shell格式:RUN <命令>
exec格式:RUN [“可执行文件”,”参数1”,”参数2”]
多个指令串联:
RUN cmd1 \
&& cmd2 \
$$ cmd3 \
&& cmd4
或者可以在命令中定义变量:
RUN name=”” \
&& cmd1 \
&& cmd2 \
&& cmd3 $name
使用Dockerfile构建镜像
在Dockerfile所在的目录执行如下命令;
docker build -t : .
. :指定镜像构建上下文路径
docker build 实际是在docker引擎进行构建
docker build http://github.xa.com/xa/iM6000s.git#:8.14 :指定了构建所需的git repo,并且指定默认的master分支,构建目录为/8.14/,然后docker会自己去git clone这个项目、切换到指定分支、并进入到指定目录开始构建
docker build http://server/context.tar.gz :docker引擎会下载这个包,自动解压,然后以其作为上下文,开始构建
简单快速构建(从标准输出):
docker build - < Dockerfile

cat Dockerfile|docker build -
从标准输入中读取上下文压缩包进行构建
docker build - < context.tar.gz :直接将其作为上下文进行构建
3. COPY
COPY复制文件
格式:
COPY <源路径> <目标路径>
COPY [“<源路径>”,”<目标路径>”]
说明:
源路径可以有多个,源路径表示构建上下文
目标路径可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用WORKDIR指令来指定),目标路径不需要事先创建,如果缺失会在复制前提前创建好
注意:文件执行权限不会更改,会保留

  1. ADD
    ADD更高级的复制文件
    ADD指令和COPY的格式和性质基本一致,只是多了一些特性
    如果<源路径>为一个tar压缩文件的话,ADD指令将会自动解压缩这个压缩文件到<目标路径>去
    说明:仅需要自动解压缩的功能的时候采用ADD
  2. CMD
    CMD容器启动命令
    shell格式:CMD <命令>
    exec 格式:CMD [“可执行文件”,”参数1”,”参数2”]
    参数列表格式:CMD [“参数1”,”参数2”]。注:用ENTRYPOINT指定后,用CMD指定具体的参数

镜像默认的CMD是/bin/bash

CMD用于指定容器启动主进程,主进程退出,容器相应也会退出
6. ENTRYPOINT
ENTRYPOINT入口点
用处:1、将镜像作为命令行使用
2、容器主进程启动前的初始化工作
docker run 的参数 –entrypoint来指定。容器启动程序变为: “”,CMD的内容变为参数
7. ENV
ENV设置环境变量
1、ENV
2、ENV = =…
后面指令或运行时的应用都可直接使用
使用方式:$keyName
8. ARG
ARG构建参数
格式:ARG <参数名>=<默认值>
与ENV区别是,容器运行时这些环境变量不会存在
在dockerfile中定义默认值、参数名。可以在构建命令docker build –build-arg <参数名>=<值>来覆盖
9. VOLUME
VOLUME定义匿名卷
作用:防止容器运行时向容器的存储层写数据,导致存储层的变化
格式:
VOLUME [“<路径1>”,”<路径2>”,..]
VOLUME <路径>
dockerfile中可以先指定匿名卷
运行时可以覆盖dockerfile中设置的匿名卷,如
docker run -d -v mydata:/data xxxx
在上述命令中使用了mydata这个命名卷挂载到了/data这个位置
10. EXPOSE
EXPOSE声明端口
格式:
EXPOSE <端口1> <端口2> …
声明运行时容器提供服务端口。只是声明,不会开启
docker run -P :使用随机端口映射,会首先随机映射EXPOSE的端口

区别运行时使用:-p <宿主端口>:<容器端口>,-p就是将容器对应的端口服务公开给外界访问,
EXPOSE仅仅是声明容器打算使用什么端口。
11. WORKDIR
WORKDIR指定工作目录/当前目录
以后各层的当前目录被改为指定目录,如果不存在,workdir会建立
格式:
WORKDIR <工作目录路径>
构建镜像时指定的工作目录
如果需要改变以后各层的工作目录的位置,可以使用WORKDIR指令
12. USER
USER指定当前用户
格式:
USER <用户名>
说明:切换的用户必须存在
USER和WORKDIR一样都是改变环境状态并影响以后的层。
13. HEALTCHECK
HEALTCHECK健康检查
0:成功,1:失败,2:保留
例如:
Dockerfile中这样写:
HEALTCHECK –interval=5s –timeout=3s \
CMD curl -fs http://localhost/ || exit 1
解释:
每隔5秒检查一次,健康检查命令超过3S没响应视为失败,并且使用curl -fs http://localhost/ || exit 1
作为健康检查命令。

dosker ps可看状态,health/unhealth
13.ONBUILD
ONBUILD为他人做嫁衣
格式:
ONBUILD <其它指令>
说明:在当前镜像构建时不会被执行,只有当以当前镜像为基础镜像去构建
下一级镜像的时候才会被执行。

其它生成镜像的方法

其它生成镜像的方法、
从rootfs压缩包导入
docker import:
docker import [选项] <文件>||- [<仓库名>[:<标签>]]
说明:压缩包可以是本地文件、远程web文件、标准输入文件

docker save 和 docker load
用于将镜像保存为一个tar文件,然后传输到另一个位置上,再加载进来。
保存镜像:docker save
将alpine镜像保存命令:
docker save alpine |gzip > alpine-latest.tar.gz

将alpine-latest.tar.gz文件复制到另一个机器上,用下面命令加载镜像:
docker load -i alpine-latest.tar.gz

删除本地镜像

删除本地镜像
docker rmi [选项] <镜像1> [<镜像2>….]
说明:<镜像>可以是镜像名,镜像摘要、镜像ID
删除行为分为两类:untagged和deleted
配合docker images -q批量删除
docker rmi (dockerimagesqredis):redisdockerrmi (docker images -q -f before=mongo:3.2):删除所有

容器操作

启动容器
两种方式:1、基于镜像新建一个容器并启动。2、在终止状态的容器重新启动

1、基于镜像新建一个容器并启动
sudo docker run ubuntu:14 /bin/ecgi “ddd” 或
sudo docker run -t -i ubuntu:14 /bin/bash
-t:让docker分配一个伪终端并绑定到标准输入上
-i:让容器的标准输入保持打开
docker创建容器时,docker在后台运行的标准操作包括:
1、检查本地是否有制定运行的镜像,没有则从公共仓库下载
2、利用镜像创建一个容器
3、分配一个文件系统,再镜像只读层外挂载一层可读写层
4、从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
5、从地址池配置一个ip地址给容器
6、执行用户指定的应用程序
7、执行完毕后容器被终止

2、在终止状态的容器重新启动
docker start

后台运行
-d参数
docker run -d <>:<> cmd

结果不会输出到宿主机上面,可以通过docker logs查看
docker logs [container ID or NAMES]
说明:-d参数启动后会返回一个唯一的id,也可以通过docker ps查看容器信息

终止容器
docker stop
docker pa -a :可以查看终止状态的容器
docker restart:运行状态容器终止并启动

进入容器
使用-d参数时,容器启动后会进入后台。有时候需要进入容器操作,方式包括:
docker attach或nsenter
docker attach NAMES :缺点:多个终端进入同一容器会互相影响

导出和导入容器
导出容器
docker export CONTAILER ID > *.tar
以上命令将导出容器快照到本地文件
导入容器快照
可以使用docker import 从容器快照文件中再导入为镜像
cat *.tar|docker import - test/ubuntu:v1.0
注:docker load和docker import的区别
docker import导入容器快照到本地镜像库,将丢弃所有的历史纪录和元数据信息
docker load导入镜像存储文件到本地镜像库,镜像存储文件保存完整,体积较大。
从容器快照导入可以重新指定标签等元数据信息

删除容器
docker rm NAME
要删除运行中的容器,可以添加-f参数。
清理所有处于终止状态的容器
docker rm $(docker pa -a -q)
默认docker rm 不会删除运行中的容器

数据卷

数据卷
docker run -d -P –name web -v /webapp training/webapp python app.py
-v:标记来创建一个数据卷并挂载到容器里,多次使用可以挂载多个。
删除数据卷:
数据卷生命周期独立于容器,容器删除不会导致数据卷删除。可以使用如下命令,删除容器时
伴随着删除数据卷:docker rm -v

挂载主机目录到容器中:
docker run -d -P –name web -v /home/test:/home/test:ro ubuntu:ubuntu14 /bin/sh -c “while true;do ls /home/test;
sleep 1;done”
ro:只读权限
查看数据卷的具体信息:
docker inspect NAMES
挂载一个本地主机文件作为数据卷:
docker run –rm -it -v ~./bash_history:/.bash_history ubuntu /bin/bash
这样就可以记录在容器中输入过的命令了

数据卷容器
用处:数据需要在容器之间共享
说明:数据卷容器就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。
创建一个名为dbdata的数据卷容器:
docker run -d -v /dbdata –name dbdata ubuntu:ubuntu14 echo xxxxx
在其它容器中使用–volumes-from来挂载dbdata容器中的数据卷
docker run -d –volumes-from dbdata –name db1 ubuntu:ubuntu14
docker run -d –volumes-from dbdata –name db2 ubuntu:ubuntu14
也可以级联挂载
docker run -d –volumes-from db1 –name db3 ubuntu:ubuntu14

利用数据卷对其中的数据进行备份、恢复、迁移
备份:
docker run –volumes-from dbdata -v $(pwd):/backup ubuntu:ubuntu14 tar cvf /backup/backup.tar /dbdata
恢复:
略。。。

Docker中的网络功能

Docker中的网络功能
查看容器动态打印信息:
docker logs -f 532a593b3d48
docker run -P/-p
-P:随机指派一个映射端口
-p:需要手动指派,可以多次使用绑定多个端口
指派格式:
ip:hostPort:containerPort 映射到指定地址的指定端口
ip::containerPort 映射到指定地址的任意端口
hostPort:containerPort 映射接口绑定的所有地址

查看映射端口配置
docker port NAMES port

docker inspect 可以获取所有的变量

容器互联
docker run 的时候添加–rm标记,容器终止就会被删除。注意:–rm和-d不可同时使用
使用–link参数可以让容器之间安全的进行交互
docker run -d -P –name web –link db:db ubuntu:ubuntu14 /bin/bash
–link参数的格式为–link name:alias,其中name是要链接的容器的名称,alias是这个链接的别名
docker通过2种方式为容器公开链接信息
1、环境变量
docker run –rm –name web2 –link db:db ubuntu:ubuntu14 env
说明:以D开头的环境变量都是提供web容器链接db容器使用的
2、更新父容器的/etc/hosts文件
docker run -it –rm –link db:db ubuntu:ubuntu14 /bin/bash
cat /etc/hosts
172.17.0.2 db 7c2a10fa4748
172.17.0.4 893a64075c7d
说明:
有两个hosts,第一个是db容器的ip和主机名,第二个是wen容器的ip,它以id作为他的主机名

用户可以链接多个父容器到子容器上,比如可以链接多个web到db容器上

高级网络配置

你可能感兴趣的:(docker)