今日内容
1、docker介绍和传统虚拟机的比较
2、架构图
3、安装docker
4、镜像
5、容器
内容详细
1、docker介绍和传统虚拟机的比较
1.1什么是虚拟化
在计算机中虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器,网络,内存及存储等,予以抽象转化后呈现出来,打破实体结构间不可分割的障碍,使用户可以比原本的状态更好的方式使用这些资源。
1.2什么是docker
docker的项目目标是实现轻量级的操作系统虚拟化解决方案。docker的基础是linux容器(LXC)等技术。
go语言实现,开源,很多人用
docker-ce免费,docker-ee收费
通过go语言对lxc技术得一个封装
上手快,简单
1.3docker和虚拟机的比较
1,容器是在操作系统层面上实现虚拟化,直接复用本地的操作系统,而传统的方式是在硬件方面实现的。
2、与传统虚拟机相比,docker的优势体现在启动速度快,占用体积小。
1.4docker是一个客户端-服务端(c/s)的架构体系(mysql和redis都是cs架构)
1.5镜像(image)和容器(container)
镜像运行起来就是容器(真正的执行单位)
类--->实例
1.6镜像从哪里来?
镜像就是一堆文件
从远程仓库拉取pull
2、架构图
我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。
所以Docker容器就是:
一个镜像格式;
一些列标准操作;
一个执行环境。
Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。
3、docker安装
3.1windows安装
1 windows安装(不建议你装)http://get.daocloud.io/
3.2ubantu(乌班图)安装
# 0 卸载
sudo apt-get remove docker docker-engine docker.io containerd runc
# 1 安装必要工具
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 2 安装GPG证书
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#换成阿里云
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 2 写入软件源信息
#官方
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#换成阿里云
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"# 3 更新并安装docker-ce
sudo apt-get -y install docker-ce
# 4 开启docker服务
systemctl status docker
3.3centos安装必须7.0以上
6.8安装docker,自行搜索,升级内核版本
docker是在linux3.1以上内核中写出来的,在乌班图下开发的,docker的新特性,乌班图先看到,
官方建议docker运行在centos7 以上的系统
安装
1.更新yum
yum update
2.安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置yum源为阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装
yum install docker-ce
5.安装后查看docker版本
docker -v
6.卸载docker
第一种方式:
remove docker docker-common docker-selinux docker-engin
rm -rf /var/lib/docker
第二种方式:
yum list installed |grep docker
rpm -qa |grep docker
yum -y remove docker版本文件包
rpm -qa |grep docker
rm -rf /var/lib/docker
rm -rf /etc/docker
3.4设置ustc的镜像
USTC是老牌的linux镜像提供服务者,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
编辑该文件
vi /etc/docker/daemon.json
在文件中输入如下内容
{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
3.5docker的启动与停止
systemctl 命令是系统服务管理器命令
docker的基本命令格式:
启动docker
systemctl start docker
停止docker
systemctl stop docker
查看docker状态
sysytemctl status docker
重启docker
systemctl restart docker
开机启动
systemctl enable docker
查看docker概要信息
docker info
查看docker帮助文档
docker --help
4、镜像操作
4.1docker镜像是什么?
镜像是docker的一个可执行文件,其中包括运行应用程序所需得所有代码内容,依赖库,环境变量和配置文件等。通过镜像可以创建一个或多个容器。
一堆文件通过docker跑起来,就是容器。假设centos7镜像跑起来,那么容器就相当于宿主机上跑了一个centos7虚拟机。
4.2搜索镜像
docker search 镜像名称
- $ docker search ubuntu
- #NAME:名称
- #DESCRIPTION:基本功能描述
- #STARS:下载次数
- #OFFICIAL:官方
- #AUTOMATED:自动的运行
4.3获取镜像
#作用:
下载远程仓库(如Docker Hub)中的镜像
#命令格式:
docker pull [镜像名称]
#命令演示:
$ docker pull ubuntu
$ docker pull nginx
#注释:
#获取的镜像在哪里?
#/var/lib/docker 目录下
4.4查看镜像
docker images
docker iamge ls
- #命令演示:
- $ docker images
- #镜像的ID唯一标识了镜像,如果ID相同,说明是同一镜像。TAG信息来区分不同发行版本,如果不指定具体标记,
默认使用latest标记信息
- #docker images -a 列出所有的本地的images(包括已删除的镜像记录)
- #REPOSITORY:镜像的名称
- #TAG :镜像的版本标签
- #IMAGE ID:镜像id
- #CREATED:镜像是什么时候创建的
- #SIZE:大小
4.5镜像重命名
作用:对本地镜像的NAME、TAG进行重命名,并新产生一个命名后镜像
- #命令格式:
- docker tag [老镜像名称]:[老镜像版本][新镜像名称]:[新镜像版本]
- #命令演示:
- $ docker tag nginx:latest panda-nginx:v1.0
4.6删除镜像
作用:将本地一个或多个镜像删除
#命令格式:
docker rmi [命令参数][镜像ID]
docker rmi [命令参数][镜像名称]:[镜像版本]
docker image rm [命令参数][镜像]
#命令演示:
$docker rmi 3fa822599e10
$docker rmi mysql:latest
#注意:
如果一个image_id存在多个名称,那么应该使用 名称:版本 的格式删除镜像
#命令参数(OPTIONS):
-f , --force 强制删除
4.7导出镜像
将已经下载好的镜像导出到本地,以备后用。
作用:将本地的一个或多个镜像打包成本地的tar文件
- #命令格式:
- docker save [命令参数][导出镜像名称][本地镜像镜像]
- #命令参数(OPTIONS):
- -o, --output string 指定写入的文件名和路径
- #导出镜像
- :~$ docker save -o nginx.tar nginx
4.8导入镜像
作用:将save命令打包的镜像导入到本地镜像库中
#导入镜像命令格式:
$ docker load [命令参数][被导入镜像压缩文件的名称]
$ docker load < [被导入镜像压缩文件的名称]
$ docker load --input [被导入镜像压缩文件的名称]
#命令参数(OPTIONS):
-i, --input string 指定要打入的文件,如没有指定,默认是STDIN
#为了更好的演示效果,我们先将nginx的镜像删除掉
docker rmi nginx:v1.0 docker rmi nginx
#导入镜像文件:
$ docker load < nginx.tar
#注意:
如果发现导入的时候没有权限需要使用chmod命令修改镜像文件的权限
4.9查看镜像历史
docker history 镜像名称:镜像版本
docker history 镜像ID
4.10 镜像详细信息
作用:查看本地一个或多个镜像的详细信息
docker image 命令参数 镜像名称:镜像版本
docker inspect 命令参数 镜像ID
- #查看镜像详细信息:
- $ docker inspect nginx
4.10 总结
5、容器
5.1docker容器技术
docker容器技术是指Docker是由go语言写的程序运行的“容器”。docker则实现了应用程序级别的隔离,他改变了我们基本的开发,操作单元,由直接操作虚拟主机转换到操作程序运行的“容器”中来。
5.1查看容器
docker ps
- 作用
- 显示docker容器列表
- #命令格式:
- docker ps
- #命令演示:
- $ docker ps
- #CONTAINER ID 容器ID
- #IMAGE 基于那个镜像
- #COMMAND 运行镜像使用了哪些命令?
- #CREATED多久前创建时间
- #STATUS 开启还是关闭
- #PORTS端口号
- #NAMES容器名称默认是随机的
- #注意:
- 管理docker容器可以通过名称,也可以通过ID
- ps是显示正在运行的容器, -a是显示所有运行过的容器,包括已经不运行的容器
5.2删除容器
docker rm 容器ID/容器名字
5.3启动并运行容器
通过centos:centos7镜像,创建一个名为mycentos的容器,并把它运行起来。
docker run -dt --name=mycentos centos:centos7
5.4停止容器
docker stop 容器id/容器名字
5.5启动容器
docker start 容器名字/容器id\
5.6容器的创建和启动
docker create --name=xxx redis
docker start xxx
5.7创建并启动
-创建并启动(run)
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
--name :为创建的容器命名。如果不写,会自动分配一个名字(英文人名)
-v:表示目录映射关系(前者是宿主机目录,后者是容器目录,映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
docker run -it --name=myredis redis
# 注意,docker run 镜像 如果本地没有,会先pull,再run
5.8进入容器的几种方式
第一种:docker exec -it 容器id /bin/bash
docker exec 容器id ls
exec真正的作用是在容器内执行命令
第二种:ssh连接(容器内部装ssh服务端)
5.9退出
exit
6、文件拷贝
从宿主机拷贝到容器内部
docker cp pjq.txt 容器id:/home
从容器内部拷贝到宿主机
docker cp 容器id:/home/pjq.txt /app
7、目录挂载
docker run -di --name=mycentos -v /home/pjq:/home centos:centos7
一旦挂载,以后宿主机目录内更改,同样影响容器内部。
8、端口映射
docker run -di -p 6377:6379 redis:latest
9、 查看容器详细信息
docker inspect f81
# 查看ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
10、应用部署
# 在容器内部署mysql
# -e表示环境变量
docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# 官方提供的
docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 在容器内部署redis
docker run -di -p 6377:6379 redis:latest
# 在容器内部署nginx
docker run -di --name=mynginx -p 8080:80 nginx