Docker概述
Docker概述
Docker 解决了:开发与线上环境统一、更便捷的升级和扩容、更高效的利用计算资源
Docker 应用之间互相隔离,内核级别的虚拟化
容器
容器不是虚拟出一个完整的操作系统,每个容器之间互相隔离
基本组成
1.client
2.Docker_host
3.Registry
- 镜像(image)
是一个模板,通过模板来创建容器服务 - 容器(container)
独立运行一个或者一组应用,通过镜像创建,提供基础系统需求
action:启动停止 - 仓库(repository)
存放镜像
工作机制
Docker是一个Client-Server结构系统,Docker的守护进程运行在主机上,通过Socket从客户端访问。
DocekerServer接收DockerClient的指令,就会执行这个命令
Docker安装
系统:macOS 10.15
下载地址
直接安装
配置国内源
{
"experimental": false,
"debug": true,
"registry-mirrors": [
"https://你的ID.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com"
],
“data-root":"/home/docker" #修改镜像存储位置
}
测试运行hello-world
docker run hello-world
查看镜像
docker images
Docker命令
- 镜像命令
docker images # 查看所有镜像 docker search #查找镜像 docker pull #下载镜像 docker rmi -f <容器id> #删除镜像根据ID docker rmi -f $(docker images -aq) #删除所有镜像
- 容器命令
- 新建容器并启动
docker run [可选参数] # # 参数说明 --name="区分作用" --d 后台运行 后台运行,必须要有前台进程 --it 使用交互方式,进入容器查看内容 查看容器内容(centos docker run --it centos/bin/bash)退出停止:exit ctrl+p+q 退出不停止 --p 暴露端口,宿主机端口:容器内部端口(8080:8080),可加IP --net 指定网络,默认是bridge # 例如: docker run -d --name nginx80 -p 8080:80 nginx --rm 用来测试用完即删除 -e 环境配置 内存ES_JAVA_OPTS="Xms64m -Xmx512m"
- 列出所有运行的容器
docker ps docker ps -a #列出所有的容器
- 删除容器
docker rm 容器id docker rm -f $(docker ps -aq) #删除所有镜像
- 启动和停止容器
docker start 容器id docker restart 容器id docker stop 容器id docker kill 容器id
-
查看日志
docker logs -f -t --tail 10 容器id
-
查看容器进程信息
docker top 容器ID
-
进入当前正在运行的容器
docker exec -it 容器ID bashShell #开启一个新的窗口 docker attach 容器ID #进入当前正在运行的命令行
- 从容器内拷贝文件
docker cp 容器id:容器内路径 外主机 路径
- 查看命令
docker version # 显示docker版本信息 docker info # 显示系统信息 docker stats #查看CPU 状态 docker history 容器ID # 查看构建过程
- 查看容器元数据信息
docker inspect 容器ID
- 查看容器卷
docker volume ls docker volume inspect 卷名 #具体信息(挂载主机位置)/var/lib/docker/卷名/_data # 具名挂载 docker run -d -v 自定义卷名:容器目录
- 查看网络
docker network ls #查看所有网络 docker network inspect 网络ID # 具体网络信息
Docker可视化
- portainer
Docker图形化管理工具!提供一个后台面板docker run -d -p 8080:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
- Rancher(CI\CD)
Docker镜像
镜像是一种轻量级、可执行的软件包。打包软件环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
UnionFS(联合文件系统)
是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作具体的应用镜像。
特性:一次同时加载多个文件系统,从外部只能看到一个文件系统,联合加载会把各层文件叠加起来。
分层结构
所有Docker镜像都起始于一个基础镜像层,当进行修改或增加新内容时,就会在当前镜像层(基础层)之上,创建新的镜像层。比如基于centos创建一个镜像,产生基础层,在镜像中添加Python包,就会在基础层上创建一个新的镜像层,继续添加Django,又会增加新的镜像层。
特点:镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!这层叫容器层,下面都是镜像层
commit镜像
# 类似于git
docker commit 提交容器成为一个新的副本。
-m="提交的描述信息" -a=”作者“ 容器ID 目标镜像名:[TAG]
容器数据卷
数据和容器分离,数据持久化、同步操作,容器间数据共享,将宿主机机目录挂载到容器内。容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
使用数据卷
docker run -it -v 主机目录:容器内目录 #指定路径挂载
-v 容器内路径 # 匿名挂载
# 具名挂载
-v 自定义卷名:容器目录
# 权限
-v 路径:ro/rw #只读(只能通过宿主机改变,容器内部无法改变)/读写(默认)
数据卷容器
容器间数据同步
例子:三个容器,两个MySQL容器,通过数据卷容器同步数据,删除数据卷容器,数据还在
docker run -it --name docker01 --volumes-from 数据卷容器(docker03)
DockerFile
用来构建docker镜像的构建文件,命令参数脚本
通过命令可以生成镜像
DockerImage:通过DockerFile构建生成镜像
Docker容器:容器就是镜像运行起来提供服务
- 构建步骤:
1.编写一个dockerfile文件
2.docker build 构建一个镜像
3.docker run 运行镜像
4.docker push 发布一个镜像(发布到仓库)
# 构建
docker build -f dockerfile文件路径 -t 生成镜像名(不能以/开头):版本 .(当前目录下生成镜像)
- DockerFile编写:
1.每个保留关键字(指令)都是必须是大写字母
2.执行从上到下
3.#表示注释
4.每个指令都会创建提交一个新的镜像层,并提交 - 指令说明:
FROM #基础镜像
MAINTAINER #镜像作者,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤,如添加Tomcat
WORKDIR #镜像工作目录
VOLUME # 挂载目录
EXPOSE #暴露端口
CMD #指定这个容器启动的时候运行的命令,只有最后一个会生效
ENTRYPOINT #指定这个容器启动的时候运行命令,追加命令
ONBUILD #当构建一个被继承DockerFile这个时候会运行这个命令,触发指令
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量!
压缩镜像
docker save #压缩
docker load #解压
Docker网络原理
Docker0
每启动一个docker容器,Docker就会给docker容器分配一个ip,只要安装了docker,就会有一个网卡docker0,使用桥接模式,使用evth-pair技术。Docker中的所有网络接口都是虚拟的,只要容器删除,对应网桥对就删除了,docker0不支持容器名访问网络
通过服务名连接容器
生产环境不建议使用
docker run -d -P --name tomcat03 --link tomcat02 tomcat # 连接两个容器,无法反向连接,在hosts中增加了解析
自定义网络
自定义网络docker已经帮我们维护好了对应关系,不同集群使用不同网络,保证集群网络的独立
网络模式:
bridge:桥接模式
none: 不配置网络
host:和宿主机共享网络
container:容器网络连通
docker network rm 网络ID#移除网络
docker network create #创建网络
--driver 指定模式
--subnet 指定网络192.168.1.0、24
--gateway 指定网关
网络名称
docker network connect #将一个容器连接到一个网络,就是将容器加入这个网络,一个容器两个IP
IDEA整合Docker
未完待续
Docker Compose
未完待续
Docker Swarm
未完待续
CI\CD Jenkins
未完待续