1、docker介绍和传统虚拟机的比较
2、架构图
3、安装docker
4、镜像
5、容器
在计算机中虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器,网络,内存及存储等,予以抽象转化后呈现出来,打破实体结构间不可分割的障碍,使用户可以比原本的状态更好的方式使用这些资源。
docker的项目目标是实现轻量级的操作系统虚拟化解决方案。docker的基础是linux容器(LXC)等技术。
go语言实现,开源,很多人用
docker-ce免费,docker-ee收费
通过go语言对lxc技术得一个封装
上手快,简单
1,容器是在操作系统层面上实现虚拟化,直接复用本地的操作系统,而传统的方式是在硬件方面实现的。
2、与传统虚拟机相比,docker的优势体现在启动速度快,占用体积小。
镜像运行起来就是容器(真正的执行单位)
类--->实例
镜像就是一堆文件
从远程仓库拉取pull
我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。
所以Docker容器就是:
一个镜像格式;
一些列标准操作;
一个执行环境。
Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。
1 windows安装(不建议你装)http://get.daocloud.io/
# 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
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
USTC是老牌的linux镜像提供服务者,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
编辑该文件
vi /etc/docker/daemon.json
在文件中输入如下内容
{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
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
镜像是docker的一个可执行文件,其中包括运行应用程序所需得所有代码内容,依赖库,环境变量和配置文件等。通过镜像可以创建一个或多个容器。
一堆文件通过docker跑起来,就是容器。假设centos7镜像跑起来,那么容器就相当于宿主机上跑了一个centos7虚拟机。
docker search 镜像名称
#作用:
下载远程仓库(如Docker Hub)中的镜像
#命令格式:
docker pull [镜像名称]
#命令演示:
$ docker pull ubuntu
$ docker pull nginx
#注释:
#获取的镜像在哪里?
#/var/lib/docker 目录下
docker images
docker iamge ls
默认使用latest标记信息
作用:对本地镜像的NAME、TAG进行重命名,并新产生一个命名后镜像
作用:将本地一个或多个镜像删除
#命令格式:
docker rmi [命令参数][镜像ID]
docker rmi [命令参数][镜像名称]:[镜像版本]
docker image rm [命令参数][镜像]
#命令演示:
$docker rmi 3fa822599e10
$docker rmi mysql:latest
#注意:
如果一个image_id存在多个名称,那么应该使用 名称:版本 的格式删除镜像
#命令参数(OPTIONS):
-f , --force 强制删除
将已经下载好的镜像导出到本地,以备后用。
作用:将本地的一个或多个镜像打包成本地的tar文件
作用:将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命令修改镜像文件的权限
docker history 镜像名称:镜像版本
docker history 镜像ID
作用:查看本地一个或多个镜像的详细信息
docker image 命令参数 镜像名称:镜像版本
docker inspect 命令参数 镜像ID
docker容器技术是指Docker是由go语言写的程序运行的“容器”。docker则实现了应用程序级别的隔离,他改变了我们基本的开发,操作单元,由直接操作虚拟主机转换到操作程序运行的“容器”中来。
docker ps
docker rm 容器ID/容器名字
通过centos:centos7镜像,创建一个名为mycentos的容器,并把它运行起来。
docker run -dt --name=mycentos centos:centos7
docker stop 容器id/容器名字
docker start 容器名字/容器id\
docker create --name=xxx redis
docker start xxx
-创建并启动(run)
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
--name :为创建的容器命名。如果不写,会自动分配一个名字(英文人名)
-v:表示目录映射关系(前者是宿主机目录,后者是容器目录,映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
docker run -it --name=myredis redis
# 注意,docker run 镜像 如果本地没有,会先pull,再run
第一种:docker exec -it 容器id /bin/bash
docker exec 容器id ls
exec真正的作用是在容器内执行命令
第二种:ssh连接(容器内部装ssh服务端)
exit
从宿主机拷贝到容器内部
docker cp pjq.txt 容器id:/home
从容器内部拷贝到宿主机
docker cp 容器id:/home/pjq.txt /app
docker run -di --name=mycentos -v /home/pjq:/home centos:centos7
一旦挂载,以后宿主机目录内更改,同样影响容器内部。
docker run -di -p 6377:6379 redis:latest
docker inspect f81
# 查看ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
# 在容器内部署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