1 Docker 是什么
Docker 是一个开源的应用容器引擎,基于go语言开发,属于操作系统层面的虚拟化技术。
docker可以让开发者打包他们的应用以及依赖包到一个轻量级可移植的轻量级容器中,然后发布到任何装有docker电脑上,docker容器使用沙箱机制,相互指尖不会有任何接口,更重要的是docker 对资源的开销很小
2 Docker 能做什么
Docker 可以解决所有虚拟机能解决的问题,相对于虚拟机对资源的消耗非常小
Docker 和 虚拟机 之间的不同
Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。
说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。
3 为什么要使用 Docker?
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
对比传统虚拟机总结
4 Docker的架构
Docker采用c/s架构,通过docker客户端连接docker服务器 从而管理docker 镜像和容器 ,类似于git架构
Docker hub
5 Docker的基本概念
5.1 镜像(Image)
Docker镜像是一个只读模板,例如一个镜像可以包含完整的Linux系统环境,里面仅仅安装了Apache或用户其他应用程序;镜像可以用来创建Docker容器,每一次使用命令run一个镜像就是创建一个容器;Docker提供了一个很简单的机制来创建或更新现有镜像,用户甚至可以直接从别处下载一个镜像使用
5.2 容器(Container)
Docker利用容器来运行应用;容器是从镜像创建的运行实例,它可以被启动、开始、停止、删除,每个容器都是相互隔离的,保证安全的平台;可以把容器看做是一个简易版的linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序;注意,镜像是只读的,容器在启动的时候创建一层可写层作为最上层
5.3 仓库(Repository)
Docker hub
仓库是集中存放镜像文件的场所,有时候会把仓库注册服务器(Registry)混为一谈,严格说仓库注册服务器存放在多个仓库,每个仓库又包含多个镜像,每个镜像有不同的标签(tag);仓库分为公开仓库和私有仓库,最大的公开仓库是Docker Hub,用户可以在本地网络创建私有仓库;用户可以通过push将镜像上传到公开或私有仓库,或者通过pull从公开或私有仓库下载镜像
6 Centos7 安装 Docker
1 运行 yum install docker
2 docker version 查看 docker 是否安装成功 ,docker info 也可以
Service docker start
systemctl start docker
7 Docker基本操作
下载镜像
docker pull images_name
查看本地仓库的镜像
docker images
REPOSITORY 镜像的名字
TAG 镜像的版本
IMAGE_ID 镜像id
。。。。。。
删除镜像
docker rmi images_name
docker rmi images_id
创建容器
语法 :
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
实例
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
用法
docker run --name "newubuntu" -p 8085:80 -e MYSQL_ROOT_PASSWORD=123456 -it bd3d4369aebc /bin/bash
docker pull mysql:5.7
启动容器
cyt_mysql
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name cyt_mysql mysql:5.7
查看容器
dockers ps 查看所有运行中容器
docker ps -a 查看所有容器
停止容器
docker stop contianer_name
docker stop contianer_id
启动容器
docker run -d -p 3304:3306 -e MYSQL_ROOT_PASSWORD=123456 --name cyt_mysql mysql:5.7
docker start contianer_name
docker start contianer_id
删除容器
docker rm contianer_name
docker rm contianer_id
*注意删除的容器 必须已经停止运行
获取容器的日志
docker logs contianer_name
docker logs contianer_id
进入容器
docker exec -i -t contianer_name /bin/bash
退出容器
请按Ctrl+P+Q进行退出容器
查看容器信息
命令
docker inpsect image_name
docker inpsect image_id
8 Docker 数据卷
8.1 基本介绍
数据卷是一个可供一个或多个容器使用的特殊目录,可以提供很多有用的特性:
- 数据卷可以在容器之间共享和使用
- 对数据卷的修改会立刻生效
- 对数据卷的更新,不会影响镜像
- 数据卷默认会一直存在,即使容器被删除
数据卷容器其实就是一个普通的容器,只是专门用来提供数据卷,供其他的容器挂载。推荐优先使用数据卷容器。
8.2 数据卷操作
事例:
docker run --name "unbuntu1" -p 8087:80 -v /usr/docker/unbuntu:/data/docker -it bd3d4369aebc /bin/bash
9 制作docker 镜像
命令
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
*注意: 容器必须先停止 运行
事例 :docker commit -a "lhd" -m "mylnmpy" b1451358c48c lnmp7:v2
10 其他
把容器容器保存成tar包
docker export [OPTIONS] CONTAINER
OPTIONS说明:
-o :将输入内容写到文件。
使用事例:
docker export -o rabbitmq.tar mqext
把镜像保存成tar包
docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
-o :输出到的文件
使用事例 :
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
导入镜像包
docker load -i spring-boot-docker.tar
从归档文件中创建镜像
语法
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
OPTIONS说明:
-c :应用docker 指令创建镜像
-m :提交时的说明文字;
实例
docker import my_ubuntu_v3.tar runoob/ubuntu:v4
docker save和docker export的区别
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
上传镜像到阿里云
https://blog.csdn.net/qq_34924407/article/details/80493006
发布本地Docker镜像到阿里云的Docker Hub
在使用Docker时,有时需要制作自己的Docker镜像,这些镜像可以保存到不同的Docker Hub中,包括Docker官方的和国内的一些Hub,比如阿里云。同时,也可以使用阿里云的Docker Hub来加速镜像的拉取速度。
安装Docker
参考官方文档:https://docs.docker.com/
配置镜像加速器
1.登录阿里云,进入容器镜像服务-镜像加速器:https://cr.console.aliyun.com/#/accelerator
2.复制专属加速器地址
3.打开Docker-Preference-Daemon,在Registry mirrors中添加复制的地址
创建命名空间
点击命名空间管理,创建命名空间。命名空间是一组仓库的集合,应以公司、组织或团队等命名,不建议使用系统名称进行命名。
https://cr.console.aliyun.com/#/namespace/index
创建镜像仓库
点击镜像列表右上角的创建镜像仓库,一个镜像仓库是一组镜像的集合。
https://cr.console.aliyun.com/#/imageList
发布镜像
点击镜像仓库管理,有详细的操作流程,大致步骤如下。
1.推送镜像
$ sudo docker login --username=[阿里云账号] registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/[namespace]/[repository]:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/[namespace]/[repository]:[镜像版本号]
其中[namespace],[repository],[ImageId],[镜像版本号]请你根据自己的镜像信息进行填写。
lsof命令
查看 80 端口被哪个进程 占用
lsof -i:80
容器中:
MySQL端口号3304 密码123456
PHP-fpm:9001
Nginx:81