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表中添加相应的规则。


浙公网安备 33010602011771号