时间就是金钱,我的朋友.
Docker — 从入门到实践一文的学习笔记出自 https://www.gitbook.com/book/yeasy/docker_practice/details
对进程进行封装隔离,属于操作系统层面的虚拟化技术.由于隔离的进程独立于宿主和其它的隔离的进程.因此也称其为容器.Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护.使得Docker技术比虚拟机技术更为轻便,快捷.
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟.因此容器要比传统虚拟机更为轻便。
https://www.zhihu.com/question/28300645
Docker 包括三个基本概念
操作系统分为内核和用户空间.对于Linux而言,内核启动后,会挂载文件系统为其提供用户空间支持.而Docker镜像(Image),就相当于是一个文件系统.比如官方镜像ubuntu:14.04就包含了完整的一套Ubuntu 14.04最小系统的root文件系统
Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资 源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境 变量、用户等).镜像不包含任何动态数据,其内容在构建之后也不会被改变.
因为镜像包含操作系统完整的root文件系统,其体积往往是庞大的,因此在Docker设计时,就充分利用UnionFS的技术,将其设计为分层存储的架构.所以严格来说,镜像并非是像一个ISO那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成.镜像构建时,会一层层构建,前一层是后一层的基础.每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层.比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除.在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像.因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉.分层存储的特征还使得镜像的复用、定制变的更为容易.甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像.
搜索镜像
1
docker search nginx
下载镜像
docker pull nginx
列出镜像
docker images
删除本地镜像
删除指定名称镜像
docker rmi nginx
删除所有镜像
docker rmi -f ${docker images}
-f 表示强制删除
新建并启动容器
docker run # 新建并启动一个容器
-d选项 : 表示后台运行 -p选项 : 随机端口映射 -p选项 : 指定端口映射,有以下几种格式
- ip:hostPort:containerPort - ip::containerPort - hostPort:containerPort - containerPort
-network选项 : 指定网络模式,该选项有以下几种可选参数
- network=bridge : 默认选项,表示连接到默认的网桥 - network=host : 容器使用宿主机的网络 - network=configure:NAME_or_ID : 告诉Docker让新建的容器使用已有容器的网络配置 - network=none : 不配做该容器的网络,用户可自定义网络配置
demo:12docker run java /bin/echo 'hello world';docker run -d -p 91:80 nginx; # -d 表示后台运行 -p 宿主机端口:容器端口
12
docker run java /bin/echo 'hello world';docker run -d -p 91:80 nginx; # -d 表示后台运行 -p 宿主机端口:容器端口
列出容器
docker ps
停止容器
docker stop 容器ID
强制停止容器
docker kill 容器ID
启动已停止的容器
docker start 容器ID
重启容器
docker restart 容器ID
进入容器
docker attach 容器ID
删除容器
docker rm 容器ID
Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从 镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库)。https://hub.docker.com/explore/ 有大量的高质量的镜像可以用https://hub.docker.com/explore/ 就类似https://github.com/
docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
示例1docker pull java; # 这样docker就会自动获取java镜像
docker pull java; # 这样docker就会自动获取java镜像
###
在一个空白目录中,建立一个文本文件,并命名为 Dockerfile :1234mkdir mynginx;cd mynginx;touch Dockerfile;vim Dockerfile;
1234
mkdir mynginx;cd mynginx;touch Dockerfile;vim Dockerfile;
内容为12FROM nginxRUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
FROM nginxRUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
运行1docker run -d -p 80:80 nginx:mynginx
docker run -d -p 80:80 nginx:mynginx
然后访问http://localhost:80
none 镜像删除不了的问题
docker ps -a # 显示所有的container,包括未运行的
docker rm docker ps -a -q # 删除所有的container
docker ps -a -q
docker exec -it 容器xx /bin/bash
.