Docker 笔记

基础
----------------------------------------------
Docker就是LXC的封装。
container 表示容器实例

----------------------------------------------
常用命令
----------------------------------------------
查看信息
docker info

创建最小Linux系统,连不上远程镜像,使用国内镜像:docker pull index.tenxcloud.com/docker_library/busybox
docker pull busybox

后台运行
sample_job=$(docker run -d index.tenxcloud.com/docker_library/busybox /bin/sh -c "while true; do echo Docker; sleep 1; done")
-d 表示后台运行
-t 分配一个伪终端并绑定到容器的标准输入上。
-i 则让容器的标准输入保持打开,一般-t -i可以同时使用,exit或ctrl+d退出。如docker run -t -i index.tenxcloud.com/docker_library/busybox
-p 映射一个主机端口到容器内部端口,可多次使用,如-p5000:80,访问-p5000就等于容器内的80,不提供主机端口使用IP则是任意分配如:127.0.0.1::5000,最后还可以加上5000/udp
-e 设定任意的环境变量
--name 可以为容器自定义命名
--link 让容器之间安全的进行交互。--link name:alias

 

查看映射的端口
docker port container port

查看这个变量
docker logs $sample_job

获取帮助
docker help

停止sample_job容器
docker stop $sample_job

删除
docker rm $sample_job

重启
docker restart $sample_job

保存为镜像
docker commit $sample_job job1

列表
docker images

搜索
docker search image-name

历史
docker history image-name

推送到registry
docker push image-name

运行情况
docker ps
-a 可以查看终止状态的容器,使用start可以重新启动。

后台守护进程,-d 参数用于运行后台进程。
docker daemon

用dockerfile构建镜像
docker build [options] path | url
--rm=true 构建成功后移除所有中间容器
--no-cache=false 构建不用缓存

attach
与运行中的容器交互,可观察容器进程的运行状况。ctrl+c退出。
docker attach container,container是run返回的那串字符id,不用输入完全

diff
列出发生变化的文件和目录,包含添加、删除、修改
docker diff container

events
打印实时系统事件

import
导入远程、本地文件目录。

export
打包成tar文件

cp
复制文件到指定的路径
docker cp container:path hostpath

login
登录registry服务器
docker login [options] [server]
登录自己主机的registry,如: docker login localhost:8080

inspect
收集容器底层信息。
docker inspect container/image

kill
发送sigkill信号停止容器的主进程。
docker kill [options] container

rmi
删除一个或多个镜像

wait
阻塞容器,直到停止后。

load
从tar文件中载入镜像或仓库到stdin。

save
类似load,保存镜像为tar文件并发送到stdout,如:
docker iamges 获取其中一个imageid
docker save imageid > xxx.tar

----------------------------------------------
dockerfile
----------------------------------------------
使用dockerfile自动化创建镜像,然后用docker build创建。
命令是顺序执行。

不区分大小写,约定为大写
INSTRUCTION argument

来源那个基础镜像,可多次使用
FROM image-name

作者
MAINTAINER author name

可以执行shell语句
RUN command

复制文件指令
ADD source dest

容器默认的执行命令3种形式,只能使用一次,多个只有最后一个生效。
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

容器运行时监听的端口
EXPOSE port

可执行的命令,只允许一个ENTRYPOINT。
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2

run、cmd、ENTRYPOINT命令工作目录
WORKDIR /path/to/dir

环境变量
ENV

运行时设置一个UID,默认是root
USER uid

授权访问从容器内到主机上的目录
VOLUME ['/data']

CMD、ENTRYPOINT 一般用数组语法

----------------------------------------------
Docker Registry
----------------------------------------------
组件是所有仓库(共有和私有)以及工作流的中央Registry。
三个角色index、registry、registry client。


----------------------------------------------
Docker 安全
----------------------------------------------
docker run这个命令后,Docker做了哪些具体的工作呢?
具体如下:
docker run命令初始化。Docker 运行 lxc-start 来执行run命令。
lxc-start 在容器中创建了一组namespace和Control Groups。

namespace是隔离的第一级,容器是相互隔离的,一个容器是看不到其它容器内部运行的进程情况。
每个容器都分配了单独的网络栈,因此一个容器不可能访问另一容器的sockets。
为了支持容器之间的IP通信,您必须指定容器的公网IP端口。

Control Groups是非常重要的组件,具有以下功能:
负责资源核算和限制。提供CPU、内存、I/O和网络相关的指标。避免某种DoS攻击。支持多租户平台。

一些需要注意的地方:
当Docker允许与访客容器目录共享而不限制其访问权限时,Docker Daemon的控制权应该只给授权用户。
REST API支持Unix sockets,从而防止了cross-site-scripting攻击。
REST API的HTTP接口应该在可信网络或者VPN下使用。
在服务器上单独运行Docker时,需要与其它服务隔离。

----------------------------------------------
Docker 综合知识
----------------------------------------------
在docker的主机,会创建一个docker0的虚拟网桥。每个容器会创建类似veth pair的接口。

docker run 中的-p都是通过iptable的nat表中添加相应的规则。

 

posted @ 2017-01-19 16:20  luckc#  阅读(184)  评论(0)    收藏  举报