Docker
- 新技术:迫切需要运行环境和os解耦,支持启动即服务镜像
- 容器基础操作
bash
查看docker版本
docker version
查看docker系统信息
docker info
查看container信息
docker ps [options]
列出所有运行中的容器
-a 列出所有容器(含沉睡镜像)
-f [exited=<int>] 列出满足exited=<int>条件的容器;
-l 仅列出最新创建的一个容器
--no-trunc 显示完整的容器ID
-n=4 列出最近创建的4个容器
-q 仅列出容器的ID
-s 显示容器大小
创建容器
docker create [options] image:tag
docker create创建的容器处于停止状态,可以用docker start 命令进行启动
启动、停止和重启一个或多个指定容器
docker start|stop|restart [options] <container> [container...]
-a 待完成
-i 启动一个容器并进入交互模式
-t 10 停止或者重启容器的超时时间(秒),超时后系统将杀死进程
杀死一个或多个指定容器进程
docker kill
docker kill [options] <container> [container...]
-s "KILL" 自定义发送容器的信号
删除一个容器
docker run
docker rm [options] <container> [container...]
docker rm nginx-01 nginx-02 db-01 db-02
sudo docker rm -l /webapp/redis
-f 移除该容器,即使其正在运行
-l 移除容器间的网络连接,而非容器本身
-v 移除与容器关联的空间
进入一个容器
docker attach/docker exec
docker attach <containername>
docker exec -it <containerId> /bin/bash
attach 命令弹出的窗口同步显示,一个阻塞,其他窗口也无法操作
启动容器
docker run
docker run [options] <image> [command] [arg...]
启动一个容器,在其中运行指定命令
-a stdin 指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR 三项
-d 后台运行容器,并返回容器ID
-i 以交互模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输入终端,通常与-i 同时使用
--name="nginx-lb"为容器指定一个名称
--dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致
--dns-search examp.com 指定容器DNS搜索域名,默认和宿主一致
-h "mars" 指定容器的hostname
-e username="ritchie" 设置环境变量
--env-file=[] 从指定文件读入环境变量
--cpuset="0-2" or --cpucet="0,1,2" 绑定容器指定cpu运行
--net="bridge" 指定容器的网络连接类型,支持bridge/host/none container:<name|id>四种类型
其他指令
docker login 登录DockerHub
docker logout 登出DockerHub
docker history <image> 查看指定镜像的构建历史
docker pause|unpause 暂停和恢复指定容器的进程
docker logs <container> 查看指定容器的输入日志
镜像和容器有什么区别?
镜像和容器的唯一区别在于容器的最上面一层是可读可写的。
要点:容器=镜像+可读层
镜像的基础操作
bash
查看镜像
docker images
docker images [options] [name]
列出本地所有镜像,其中[name]对镜像名称进行关键字查询
-a 列出所有镜像 (含过程镜像)
-f 过滤镜像,如:-f ['dangling=true'] 只列出满足dangling=true 条件的镜像;
--no-trunc 可显示完整的镜像ID;
-q 仅列出镜像ID
--tree 以树状结构列出镜像的所有提交历史
查看镜像
检查镜像的详细信息 默认返回JSON格式
docker inspect
docker inspect image:tag
docker inspect imageId
-f 指定返回值的模板文件
删除镜像
docker rmi
docker rmi [options] <image> [image...]
docker rmi nginx:latest postgres:latest
从本地移除一个或多个指定的镜像
-f 强行移除该镜像,即使其正被使用
--no-prune 不移除该镜像的过程镜像,默认移除
搜索镜像
docker search
docker search [options] term
docker search -S 10 django
从Docker Hub中搜索符合条件的镜像。
--automated=false 只列出自动创建类型的镜像
--no-trunc=false 输出信息不截断显示
-s,--stars=3 仅显示评价为指定星级以上的镜像
下载镜像
docker pull
docker pull name[:tag]
docker pull domain[:port]/name[:tag]
从Docker Hub 中拉取或者更新指定镜像
上传镜像
docker push
docker push name[:tag]
docker push domain[:port]/name[:tag]
上传镜像到仓库,默认上传到DockerHub官方仓库
如何给镜像打标签
docker tag
docker tag [name:tag]|[image] newname:tag
给指定的镜像打上新的标签
基于Dockerfile构建镜像
docker build
docker build [options] path | url | -
docker build -t sun/nginx:2.0 - < Dockerfile
以 Dockerfile为模板构建容器。
--force-rm=false 构建失败后,移除中间容器
--no-cache=false 构建过程不适用缓存;
--rm=true 构建成功后移除中间容器
-t sun/nginx:2.0 为创建的容器打上标签
导出镜像
docker save
docker save -o debian.tar [name:tag]|[imageId]
docker save > debian.tar [name:tag]|[imageId]
将指定镜像保存成tar 归档文件,docker load的逆操作。
保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。
-o "debian.tar" 指定保存的镜像归档
导入镜像
docker load
docker load [options]
docker load < debian.tar
docker load -i "debian.tar"
从tar镜像归档中载入镜像,docker save的逆操作
保存后再加载(saved-loader)的镜像不会丢失提交历史和层,可以回滚
-i "debian.tar" 指定载入的镜像归档。
导出镜像 -2
docker export
docker export <container>
docker export nginx-01 > export.tar
将指定的容器保存成tar归档文件,docker import的逆操作
导出后导入(export-imported)的容器会丢失所有的提交历史,无法回滚。
导入镜像 -2
docker import
docker import url | -[repository[:tag]]
cat export.tar | docker import - imported-nginx:latest
docker import http://example.com/export.tar
从归档文件(支持远程文件)创建一个镜像,export 的逆操作,可为导入镜像打上标签。
导出后导入(exported-imported)的容器会丢失所有的提交历史,无法回滚。
如何构建,提交镜像
docker commit
docker commit [options] container [repository[:tag]]
docker commit -a 'bocloud' 4d5d6fd tomcat:8.0
-a,--author="作者信息"
-m,--message="提交信息"
-p,--pause=true 提交时,暂停容器运行
一个简单的Dockerfile
bash
# This dockerfile use the centos image
#VERSION 2 - EDITION 1
#Author:docker_user
#第一行必须指定基于的基础镜像
FROM centos
#维护者信息
MAINTAINER bocloud
#镜像的操作指令
RUN echo "hello docker" >>/etc/apt/firstdocker
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
#容器启动时的执行指令
CMD /user/sbin/nginx
Dockerfile常用指令
bash
FROM <IMAGE[:TAG]> 指定基础镜像
MAINTAINER <NAME> 维护者信息
RUN ["EXECUTABLE","PARAM1","PARAM2"] 当前镜像基础上执行指令
CMD["EXECUTABLE","PARAM1","PARAM2"] 指定启动容器时执行的指令,只能有一条
EXPOSE <PORT>[<PORT>...] 指定Docker宿主机暴露的端口号
ENV <KEY> <VALUE> 指定一个环境变量,后续被RUN命令使用
ADD <SRC> <DEST> 复制指定的SRC到容器中的DEST,相对或绝对路径(文件|目录)
COPY <SRC> <DEST> 复制本地主机的SRC到容器中的DEST,自动创建目标路径
ENTRYPOINT["EXECUTABLE","PARAM1","PARAM2"] 指定启动容器时执行的指令,不可被docker run 覆盖,不可被docker run 覆盖,多个时只有最后一个生效
VOLUME["/DATA"] 创建一个本期或者其他容器的挂载点,数据库,需要保持的数据等
USER daemon 指定运行容器时的用户名或UID 后续的RUN 也会使用指定的用户
WORKDIR PATH 指定配置工作目录
ONBUILD [指令]配置当所创建的镜像为其他新创建镜像的基础镜像时所执行的操作