Docker简介
- Docker是一个新的容器化的技术,容器有效的将单个操作系统管理的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求。
- Docker 容器本质上是宿主机上的一个进程。Docker 通过 namespace 实现了资源隔离,通过 cgroups 实现了资源的限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。
- Docker有五个命名空间:进程、网络、挂载、宿主和共享内存,为了隔离有问题的应用,Docker运用Namespace将进程隔离,为进程或进程组创建已隔离的运行空间,为进程提供不同的命名空间视图。这样,每一个隔离出来的进程组,对外就表现为一个container(容器)。
两个应用之间的环境是环境是完全隔离的,建立通信机制来互相调用。容器的创建和停止都十分快速(秒级),容器自身对资源的需求十分有限,远比虚拟机本身占用的资源少。
镜像和容器
- Image: 镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
- Container:容器是镜像的运行时实例 - 实际执行时镜像会在内存中变成什么。默认情况下,它完全独立于主机环境运行,仅在配置为访问主机文件和端口的情况下才执行此操作。
容器可以获取本机访问,每个容器都在独立进程中运行,占用的内存不超过任何其他可执行文件。
Doker的使用
启动和放入启动项
#centos7.0版本
systemctl start docker
systemctl enable docker
#兼容老版本
service docker start
chkconfig docker on
查看docker信息
docker version # 查看docker版本
docker info # 显示docker系统的信息
image操作
docker search [镜像] #搜索镜像
docker pull [镜像] #下载镜像
docker run -p 4000:80 username/repository:tag #从远程镜像仓库中拉取并运行镜像
sudo docker pull ubuntu:12.04 等同于
docker pull registry.hub.docker.com/ubuntu:12.04
docker push [镜像] #发布镜像
docker rmi [镜像] #删除镜像
docker images #查看本地镜像(列目录)
docker images -q #只显示镜像ID
docker history [镜像] #历史镜像
docker tag [镜像] username/repository:tag #标记镜像
docker rmi $(docker images -q) #删除所有停止的镜像
docker rmi -f $(docker images -q) #强制删除所有的镜像
容器操作
#创建容器
docker run [镜像] /bin/echo hello world #输出hello world
docker run -i -t [镜像] /bin/bash #交互式进入容器 #-i: 以交互模式运行容器 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
docker run [镜像] apt-get install -y app_name #在容器安装新的程序
docker exec -it kali /bin/bash #进入容器
docker run -it -d kali #启动容器,后台运行 #-d: 后台运行容器,并返回容器ID;
docker run -it -p 53:53 kali #启动容器的时候可以映射端口 #-p: 端口映射,格式为:主机(宿主)端口:容器端口
#数据卷
docker run -it -v /data:/data kali #共享目录,本机和容器共享data目录 #-v 挂载宿主机目录 宿主机目录:容器目录
docker run -it -v /data:/data:ro kali #只读共享目录,本机和容器共享data目录(容器只读)
docker run -it -v /data --name web1 kali #虚拟机web1创建共享目录
docker run -it --volumes-from web1 --name web2 kali #共享web1的目录(不需要通过本机共享)
#1、数据卷虚拟机开启或者关闭对共享无影响
#2、数据卷虚拟机多次作为共享目录,也可以做共享
#3、数据卷多次挂在,有重复名字,则以最后一个--volumes-from的为最后结果
#4、如果已经挂在数据卷的容器,删除数据卷对其无影响
#查看容器
docker ps #列出当前运行的容器
docker ps -a #列出所有的容器
docker ps -l #列出最近一次启动的容器
docker ps -a -q #查看所有的容器ID
#容器操作
docker inspect [容器名字]/ID #显示容器信息
docker start [容器名字]/ID #启动容器
docker stop [容器名字]/ID #停止容器
docker kill [容器名字]/ID #杀死容器
docker restart [容器名字]/ID #重新启动容器
docker attach [容器名字]/ID #进入容器
docker logs [容器名字]/ID #查看容器日志
docker diff [容器名字]/ID #查看容器修改操作
docker top [容器名字]/ID #显示容器进程信息
docker cp ID:/path to_path #从容器中拷贝数据到本地
docker cp [容器名字]:/path to_path #从容器中拷贝数据到本地
#删除容器
docker rm [容器]/ID #删除容器
docker rm $(docker ps -a -q) #删除所有停止的容器
docker rm -f $(docker ps -a -q) #强制删除所有的容器
网络
docker是分为客户端和服务端两部分。
#重启
systemctl daemon-reload
systemctl restart docker.service
#Docker开启远程访问
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock #tcp 是远程连接,unix 是本地socket 链接
#连接方式
unix:///var/run/docker.sock docker默认的客户端与守护进程链接的方式
tcp://host:port
fd://socketfd
#同时监听多个socket
dockerd -H unix:///var/run/docker.sock -H tcp://127.0.0.1:2376 -H tcp://127.0.0.1:2377
docker客户端使用dockerinfo默认访问的是本地Server。可以修改环境变量DOCKER_HOST改变默认连接。
export DOCKER_HOST="tcp://127.0.0.1:2375"
#Docker远程连接
docker -H 192.168.1.1:2376 images