初识docker
dockers的核心思想:隔离,通过隔离机制,可以将服务器性能利用到极致
dockers与虚拟机技术的不同:
传统虚拟机,虚拟出一定硬件,运行一个完整的操作系统,然后在这个系统上安装软件运行,容器内的应用直接运行在宿主主机内核,没有虚拟硬件设备,内容轻便,每个容器之间相互隔离,互不影响
docker是内核级别的虚拟化,做到DevOps(开发,运维)
更快速的交付和部署
更便捷的升级和扩容
跟简单的系统运维
更高效的资源利用
镜像(image):一个模板,可以通过这个模板来创建让其服务
容器(container):利用容器技术独立运行一个或一组应用
仓库(repository):存放镜像
安装docker
官方帮助文档https://docs.docker.com/engine/install/centos/
配置docker的yum源安装启动
[miku@localhost ~]$ sudo yum install yum-utils
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package yum-utils-1.1.31-45.el7.noarch already installed and latest version
Nothing to do
[miku@localhost ~]$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[miku@localhost ~]$ ll /etc/yum.repos.d/docker-ce.repo
-rw-r--r--. 1 root root 2081 Mar 4 15:45 /etc/yum.repos.d/docker-ce.repo
[miku@localhost ~]$ yum makecache fas
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
BaseOS | 3.6 kB 00:00:00
docker-ce-stable | 3.5 kB 00:00:00
(1/3): BaseOS/other_db | 1.3 MB 00:00:00
(2/3): BaseOS/filelists_db | 3.1 MB 00:00:00
(3/3): docker-ce-stable/7/x86_64/other_db | 122 kB 00:00:00
Metadata Cache Created
[miku@localhost ~]$ sudo yum install docker-ce docker-ce-cli containerd.io
[miku@localhost ~]$ sudo systemctl start docker
测试
docker run hello-world #运行docker测试镜像
/var/lib/docker/ docker的默认路径
认识docker的命令
docker version/-v 查看版本信息
docker info 显示版本详细信息
dockers--help 帮助信息
镜像命令
docker images -q -a #查看本地镜像
docker search 镜像 #收索镜像
docker pull 镜像 #下载镜像
docker pull 镜像:tag #指定版本下载,不加tag默认为最新的版本(latest版本)。
docker rmi 镜像名称/镜像id #删除镜像
docker rmi $(docker image -qa) #删除全部本地镜像
容器命令
docker run 【选项】镜像
--name 命名容器
-d 后台运行,在使用-d后台运行时,可能会出现执行命令后台并后台运行容器,而是容器已停止,是因为docker后台运行容器必须要有前台进程,否则会自动停止容器
-it 使用交互式运行容器并进入容器
-p 指定容器端口
主机:主机端口:容器端口
主机端口:容器端口
-P 随机指定端口
-e 环境配置
-v 挂载卷
--net 指定容器网络环境
--ip 指定IP地址
docker ps
-a 列出所有容器
-n=x 列出最近创建的x个容器
-q 只列出容器id
docker rm 容器id删除指定容器
-f 强制删除
docker start
docker stop
docker restart
docker kell
exit 停止并退出容器
crtl+p+q 不停止容器退出
docker logs
-f 实时刷新
-t 显示时间戳
-tail n 显示n条日志
docker top 容器id 显示容器中的进程
docker inspect 显示容器元数据
docker exec -it容器id /bin/bash 进入容器并打开一个新的终端
docke attach 容器id 进入容器当前终端
docker cp 容器id/路径 主机路径 从容器中拷贝文件的主机
docker commit -m="描述信息" -a=“作者” 容器id 目标镜像名
容器数据卷
docker run -v 主机路径:容器内路径
容器内路径挂载至本地,可以使用多个-v挂载多个目录,实现将容器数据同步至本地
docker run -v 容器内路径 匿名挂载
docker run -v 卷名:容器内路径 具名挂载
docker run -v 主机路径:容器内路径 指定路径挂载
在使用-v挂载时在容器内路径后加 :ro或 :rw表示设置卷权限,当ro模式时,只能通过宿主机操作文件,容器内无法操作
Dockerfile
docker build -f dockerile -t 镜像名称 .
注意:命令最后有一个点,点与命令间有i一个空格
镜像名称必须小写
dockerfile指令
FROM #指定基础镜像
MAINTAINER #指定维护者/dockerfile编写者信息(姓名+邮箱)
RUN #构建镜像时需要运行的命令
ADD #添加一些额外的安装包
WORKDIR #指定镜像的工作路径
VOLUME #设置卷,挂载目录
EXPOSE #设置端口映射信息
CMD #指定容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #与CMD命令相似,可追加命令
ONBUILD #当构建一个,dockerfile这个时候就会运行ONBUILD的指定
COPY #与ADD类似,拷贝文件到镜像
ENV #设置环境变量
Docker网络原理
只要安装了dockers就会有一个网卡docker0,为桥接模式,使用evth-pair技术
每启动一个容器,就会的到一个docker分配的ip地址,容器网卡与宿主机网卡成对出现
evth-pair技术,evth-pair就是一对虚拟设备接口,一段连着协议,一段彼此相连,因为这个特性,evth-pair可以充当一个桥梁连接各种虚拟设备
自定义网络
docker network ls 查看docker网络
bridges 桥接模式(默认,自定义网络也是用桥接模式),
none 不配置网络
host 与宿主机公用网络,
container 容器网络联通(用的少,局限性大)
docker network create --driver bridge --subnet 192.168.0.0/16 --getaway 192.168.0.1 mynet
--driver bridge 桥接模式(默认)
--subnet 192.168.0.0/16 子网范围
--getaway 192.168.0.1 网关
docker network inspect 网络名称 查看网络元信息
docker run --name 容器名 --net mynet -P -d 镜像名/id
--net 指定容器使用的网络,不使用--net时默认为bridge(docker0)网络
自定义网络优点,不同的集群可以使用不同的网络,保证了网络安全
网络联通
docker network connect 网络名 容器名
网络联通就是将这个容器放到指定的网络下,一个容器两个ip