Docker应用场景
1 web应用的自动化打包,发布
2 自动化测试和持续集成,发布
3 服务环境中部署和调整数据库或其他后台应用
4 从头编译或扩展现有OpenSHit或CLoud Foundr平台来搭建自己的PaaS环境
Docker架构
镜像(相当于一个root文件系统)
容器(镜像运行时的实体,就像OOP中的类和实例一样,容器可以创建,启动,停止,删除,暂停)
仓库(代码控制中心,保存镜像,1个Registry可以包含多个仓库,1个仓库可以包含多个标签,一个标签代表一个镜像,通常用标签标识不同的版本.通常用<仓库名>:<标签>来指定相应版本的镜像,无标签表示latest)
使用c/s架构,远程API管理和创建Docker容器
镜像,容器,客户端(运行控制主机的命令或API的工具),主机(实际执行Docker守护进程的物理或虚拟机),仓库
docker命令
守护进程查看 systemctl status docker
镜像查看 docker image Is
容器查看 docker ps
仓库配置和查看 cat /etc/docker/daemon.json
docker pull
docker run -i -t -d image imageCommand
-i 交互式操作
-t 终端
-d 后台运行
-P:将容器内部使用的网络端口随机映射到我们使用的主机上
-p 参数来设置不一样的端口
--rm:容器退出时自动清理容器内部的文件系统。
-h HOSTNAME 或者 --hostname=HOSTNAME 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts
--dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名
--dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com
eg docker run -d -p 127.0.0.1:8080:7979/udp training/webapp python app.py
docker ps
docker start contanierid
docker stop contanierid
docker restart contanierid
docker attach contanierid
docker exec -it containerid
//linux 下使用的命令
docker export containerid > exportname.tar
cat importContainer.tar | docker import - test/importContianer:tag
docker import url/directory
//windows 下使适用的命令
docker container export containerid -o exportConaitner.tar
docker image import importContainer.tar res/conrainer:version
//
docker rm -f containerid//删除容器时必须是停止状态
docker port containerid/name
docker logs -f containerid//日志
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出
docker top containerid/name //进程
docker inspect cid/cname //docker底层信息的字符串
docker search image//搜索镜像
docker rmi imagename //删除镜像
docker commit -m="descroption text" -a="auther" imageid regitry/imagename:version//提交镜像
//构建镜像
docker build -t (要创建的目标镜像名) path(Dockerfile所在的目录)
docker tag cid imageName:tag
docker network create -d bridge test-net//创建一个docker网络
-d 指定docker网络类型,bridge,overlay(用于 Swarm mode)
docker network ls
docker tag r1/image1:tag1 r2/image2:tag2
//使用镜像ubuntu:15.10创建一个name为test1的容器 并连接到test-net网络
docker run -itd --name test1 --network test-net ubuntu:15.10 /bin/bash
//linux 命令
apt-get update
apt install iputils-ping
//docker命令
查看dns
docker run -it --rm ubuntu cat etc/resolv.conf
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu//只在指定容器设置dns
docker login
docker logout
//docker 镜像构建命令
FROM nginx //基于nginx构建
RUN <命令行命令> //用于执行后面跟着的命令行,每个RUN都会在docker上新建一层
//RUN 命令行命令
//RUN 可执行文件 参数1 参数2
COPY hom* /mydir/
COPY [--chown=<user>:<group>] ["满足 Go 的 filepath.Match 规则的通配符表达式",... "<容器内的路径>"]
ADD //与COPY相似 ,但会将tar压缩文件的gzip,bzip,xz格式自动解压
CMD //为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束了。类似RUN 但CMD是在docker run时运行 ;RUN 是在docker build运行,可被docker run的参数所覆盖 ,Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效,
ENTRYPOINT //类似CMD命令,不会被docker run的参数覆盖,但会被--entrypoint 选项覆盖 如ENV果存在多个 ENTRYPOINT 指令,仅最后一个生效
ENV //环境变量 增加到镜像中的键值对 eg NODE_VERSION=1.0.1 在容器中可用$NODE_VERSION访问
ARG //与ENV一样 但只能在Dockerfile中访问 构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。
VOLUME //容器内的挂在路径 启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
WORKDIR //容器内部的工作目录
EXPOSE //镜像服务的守护端口
USER //执行后续命令的用户和用户组
*HEALTHCHECK //用于指定某个程序或者指令来监控 docker 容器服务的运行状态
*ONBUILD //延迟构建命令的执行。Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像中不执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令
*LABEL //用来给镜像添加一些元数据 eg LABEL org.opencontainers.image.authors="runoob"
docker-machine create