Docker是一个容器化平台,它以容器的形式将你的应用程序及所有的依赖项打包在一起,以确保你的应用程序在任何环境中无缝运行。
Docker镜像是Docker容器的源代码,Docker镜像用于闯将容器,使用Build命令创建镜像。
Docker容器包括应用程序及所有的依赖项,作为操作系统的独立进程运行。
四种状态:运行、已停止、重新启动、已退出。
指令
备注
FROM
指定基础镜像
LABEL
功能为镜像指定标签
RUN
运行指定命令
CMD
容器启动时要运行的命令
COPY和ADD的区别时COPY的SRC只能是本地文件,其他用法一致。
命令
备注
docker pull
拉去或更新指定的镜像
docker push
将镜像推送到远程仓库
docker rm
删除容器
docker rmi
删除镜像
docker images
列出所有镜像
docker ps
列出所有容器
Docker run -d -p --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx
当镜像用作另一个镜像构建的基础时,ONBUILD指令像镜像添加将在稍后执行的触发指令。如果要构建将用作构建其他镜像的基础的镜像(例如,可以使用特定于用户的配置自定义的应用程序构建环境或守护程序),这将非常有用。
Docker Swarm是docker的本地群集。它将docker主机池转变为单个虚拟docker主机。Docjer Swarm提供标准的docker API,任何已经与docker守护进程通信的工具都可以使用Swarm透明地扩展到多个主机。
可以使用sudo docker rmi $(sudo docker images -q -f danging=true)命令
使用sudo docker run IMAGE env
于docker相关的本地资源存在/var/lib/docker/目录下,其中container目录存放容器信息,graph目录存放镜像信息,aufs目录下存放具体的镜像底层文件。
整体原则上,尽量保持镜像功能的明确和内容的精简,要点包括:
容器退出后会处于终止(exited)状态,此时可以通过docker ps -a查看,其中数据不会丢失,还可以通过docker start来启动,只要删除容器才会清除数据。
docker kill $(sudo docker ps -q)
docker rm$(sudo docker ps -a -q)
按Ctrl+p,后按Ctrl+q,如果按Ctrl+c会使容器内的应用进程终止,进而会使容器终止。
使用docker logs,后面跟容器的名称或者ID信息
创建镜像时dockerfile要指定正确的EXPOSE的端口,容器启动时指定PublishAllport=true
一般不推荐在用以容器内运行多个应用进程,如果有类似需求,可以用过额外的进程管理机制,比如supervisord来管理所运行的进程。
在使用docker create命令创建容器或使用docker run 创建并运行容器的时候,可以使用-c|-spu-shares[=0]参数来调整同期使用SPU的权重,使用-m|-memory参数来调整容器使用内存的大小。
首先,仓库事存放一组关联镜像的集合,比如同一个应用的不同版本的镜像,注册服务器时存放实际的镜像的地方,注册索引则负责维护用户的账号、权限、搜索、标签等管理。注册服务器利用注册索引来实现认证等管理。
Docker自1.3.0版本往后以来,加强了对镜像安全性的验证,需要手动添加对非官方仓库的信任。DOCKER_ORTS=”-insecure-registry dl.dockerpool.com:5000”重启docker服务。
Ubuntu系统下Docker的配置文件是/etc/default/docker,CentOS系统配置文件存放在/etc/sysconfig/docker。
Docker的默认存放位置是/var/lib/docker,如果希望将docker的本地文件存储到其他分区,可以使用Linux软连接的方式来做。
LXC利用Linux上相关技术实现容器,docker则在如下的几个方面进行了改进:
容器特性
备注
移植性
通过抽象容器配置,容器可以实现一个平台移植到另一个平台
镜像系统
基于AUFS的镜像系统为容器的分发带来了很多的便利,通是共同的镜像层只需要存储一份,实现高效率的存储
版本管理
类似于GIT的版本管理理念,用户可以更方便的创建、管理镜像文件
仓库系统
仓库系统大大降低了镜像的分发和管理的成本
周边工具
各种现有的工具(配置管理、云平台)对docker的支持,以及基于docker的pass、Cl等系统,让docker的应用更加方便和多样
两者的定位完全不同
Docker不是虚拟机,而是进程隔离,对于资源的消耗很少,单一开发环境下Vagrant是虚拟机上的封装,虚拟机本身会消耗资源.
停止docker服务,将整个docker存储文件复制到另外一太宿主机上,然后调整另外一台宿主机的配置即可。
查看容器进程ID,比如1234
Sudo docker inspect --format=’{{. State.pid}}’ $container_id 1234
到proc目录下,把对应的网络名字空间文字链接到/var/run/netns,然后通过正常的系统命令查看操作容器的名字空间