docker相关知识

docker官网:https://www.docker.com/
文档: https://docs.docker.com/
仓库地址:https://hub.docker.com/

docker容器使用宿主机的内核,而不用像虚拟机那样安装整套内核环境
DevOps(开发即运维)
应用更快的交付和部署
Docker:打包镜像发布测试,一键运行
更快捷的升级和扩容
使用了docker之后,我们部署应用就和搭积木一样!
更简单的系统运维,开发测试高度一致
更高效的资源利用

在这里插入图片描述
镜像(image):
docker镜像就好比一个模板,可以通过这个模板来创建容器服务
tomcat镜像===>run===>tomcat01容器(提供服务)
通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)
容器(container):
docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建
启动 停止 删除 基本命令
初步可以理解为一个简易的linux系统
仓库(repository):
存放镜像的地方:
仓库分为公有和私有
配置镜像加速

安装docker

更新yum索引: yum makecache fast
① 先卸载
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
② 安装依赖
sudo yum install -y yum-utils
③ 配置阿里云docker镜像地址
sudo yum-config-manager
–add-repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

④ 安装最新版docker ce表示社区版 ee表示企业版
sudo yum install docker-ce docker-ce-cli containerd.io
⑤启动测试docker
systemctl start docker
docker version
sudo docker run hello-world
⑥ 查看下载的镜像
docker images
⑦ 卸载docker
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

开始–>docker本机寻找镜像–>没有则到配置的镜像地址去下载–>运行镜像

底层原理:
Docker是怎么工作的?

docker常用命令

docker version
docker info
docker 命令 --help
帮助文档地址:https://docs.docker.com/reference/

镜像命令:

docker images -a 显示所有镜像
docker images -q 只显示镜像的ID
docker search 搜索镜像
docker search mysql --filter=STARS=3000 搜索收藏数大于3000的
docker pull 下载镜像 # 如果不写tag 默认下载latest
docker pull mysql:5.7
docker pull docker.io/library/mysql5.7
docker rmi 删除镜像
docker rmi -f 容器id #删除指定的容器
docker rmi -f 容器id 容器id 容器id #删除多个指定的容器
docker rmi -f ${docker images aq} #删除全部的容器 a所有 q表示ID

容器命令

docker pull centos
docker run [可选参数] image
–name=“Name” 容器名称 tomcat01 tomcat02用于区分容器
-d 后台方式运行
-it 使用交互的方式运行,进入容器查看内容
-P 指定容器的端口 -p 8080:8080
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口

-p 随机指定端口
例: docker run -it centos /bin/bash 启动并进入容器
exit 退出命令
Ctrl + P + Q 不停止退出
docker ps 查看正在运行的程序
docker ps -a 查看正在运行的程序和历史运行的程序
docker ps -a -n=2 显示最近运行的两台主机
docker ps -aq 显示运行程序的ID
删除容器
docker rm 容器id 删除指定的容器,不能删除正在运行的容器, -f 强制删除
docker rm -f ${docker ps -aq} 删除所有容器
docker ps -a -q|xargs docker rm 删除所有容器
启动和停止容器
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id 强制停止
常用的其他命令
docker run -d 镜像名 后台启动容器
常见的坑:docker启动后发现自己并没有对外提供应用,会自动停止
查看日志
docker logs -tf 镜像ID 查看全部日志
docker logs -tf --tail 100 镜像ID 查看最近100条日志
启动一个镜像并输出日志:docker run -d centos /bin/sh -c “while true;do echo wangyue;sleep 1;done”
查看容器中进程信息
docker top 容器ID
docker stats 查看状态
查看镜像元数据
docker inspect 容器ID
进入当前正在进行的容器
docker exec -it 容器id /bin/bash 进入容器开启一个新的终端,可以进行操作
docker attach 容器id 进入容器正在执行的终端,不会启动新的进程
从容器内部文件拷贝到宿主机上
docker cp 容器ID:目录/文件名 /宿主机目录
在这里插入图片描述

思考:-v 数据卷技术 宿主机文件 --> 容器内文件
docker run -it --rm tomcat:9.0 rm表示用完即删除

启动es,并使用 -e 添加参数 限制内存使用
docker run -d --name elasticsearch001 -p 9200:9200 -p 9300:9300 -e “discovery.type=single.node” -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
可视化
portainer图形化管理工具
docker run -d -p 8088:9000
–restart=always -v -/var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

访问测试 localhost:8088/

在这里插入图片描述
docker镜像是分层的,这样可以实现相同部分文件的复用
docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部
这一层就是我们通常说的容器层,容器之下都叫镜像层
在这里插入图片描述
commit镜像
制作提交镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 目标镜像名:[TAG]

容器数据卷

容器之间可以有一个数据共享的技术!docker容器中产生的数据同步到本地!
总结:容器持久化和同步操作,容器之间也可以数据共享
docker volume ls 列出挂载的数据卷
docker volume inspect 卷名 列出某个卷的详细信息
方式一:-v 双向同步
docker run -it -v 主机内目录:容器内目录 容器 /bin/bash
docker inspect 容器id 查看详细信息
在这里插入图片描述
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name=mysql01 mysql:5.7
匿名挂载和具名挂载
一般使用具名挂载
-v 只写容器内路径 匿名
docker run -d -p --name nginx01 -v /etc/nginx nginx
-v 卷名:容器内路径 具名

通过 -v 容器内路径:ro rw 改变读写权限
ro readonly 不能在容器内部改变,只能宿主机操作
rw readwrite

容器卷技术 --volumes-from 容器之间的数据共享 拷贝备份的概念
docker run -it --name docker02 --volumes-from docker01 镜像ID或名称:tag
只要还有容器在使用这个卷,这个卷就不会消失

DockerFile

dockerfile就是用来构建docker镜像的构建文件,使用脚本
通过脚本生成镜像
FROM centos
VOLUME [“volume01”,“volume02”]
CMD echo “-----end-----”
CMD /bin/bash

会在镜像和宿主机中生成两个卷目录"volume01","volume02"匿名挂载
docker build -f dockerfile路径和文件名 -t wangyuecentos:1.0 .
构建的时候记得先创建一个纯净的文件夹

基础知识
1 每个保留关键字指令都是大写
2 执行从上到下顺序执行
3 # 表示注释
4 每一个指令都会创建提交一个新的镜像层,并提交!
dockerfile是面向开发的,我们以后要发布项目,做镜像成为企业交付的标准
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过dockerfile构建生成的镜像,最终发布和运行的产品
DockCcontainer:容器就是镜像运行起来提供服务器
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
FROM centos
MAINTAINER wangyue249885701@qq.com
ENV MYPATH /usr/local
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash
docker build -f mydockerfile -t wangyuecentos:1.0 .
docker history 镜像ID 查看某个镜像的构建过程

CMD 重写命令,在run之后追加会进行覆盖
ENTRYPOINT 可直接再run时候追加命令
实战构建tomcat镜像
编写Dockerfile镜像,当使用Dockerfile做文件名时,不用 -f 指定文件名
在这里插入图片描述
build构建镜像
在这里插入图片描述
docker build -t wangyuetomcat:1.0 .
docker run 镜像ID -p 主机端口:镜像端口 -v 主机目录:镜像内目录
发布镜像到Dockerhub,需要先登录dockerhub账号
在这里插入图片描述

在这里插入图片描述

Docker网络

docker启动后就会有docker0,相当于路由器
桥接模式
veth/pair技术,每运行一个容器,成对出现网卡
删除某个容器,对应的veth/pair地址就会自动删除

在这里插入图片描述
容器互联link(不建议使用)
容器每次启动可能会重新分配ip,直接写ip可能导致重启后连接不上,思考使用容器名进行互联。
docker run -d -P --name tomcat01 –link tomcat02 tomcat
只能是tomcat01 联通 tomcat02 ,不能是02连接01
其实是修改了 /etc/hosts 配置信息

docker network ls 列出docker的网卡信息
docker inspect 网卡ID 列出网卡的详细信息

在这里插入图片描述
自定义网络
不使用docker0,使用自定义网络
网络模式:
bridge 桥接模式(默认)
none
host 和宿主机共享网络
container 容器间网络互连(基本不使用)

–net bridge (默认启动参数)

创建自定义网络
docker network create --dirver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet
使用自定义网络启动 自动关联好关系
docker run -d -P --name tomcat001 --net mynet tomcat
docker run -d -P --name tomcat002 --net mynet tomcat
可直接使用名字或地址ping通

不同网段之间的网络联通
docker network connect 网络名 容器名

在这里插入图片描述

connect 直接将容器放到 某网络下 双ip地址

redis集群

在这里插入图片描述

Docker Compose

定义和运行多个容器、配置文件、命令
Dockerfile
docker-compose.yml
docker-compose up

在这里插入图片描述
服务services:容器、应用(web/redis/mysql…)
项目project:一组关联的容器

1 应用app.py
2 Dockerfile应用打包为镜像
3 docker-compose.yml (定义整个服务需要的环境,web,redis)
4 启动compose项目(docker-compose up)
docker-compose up --build 重新构建
compose自动创建网络(整个项目的容器都在同一个网络下面)
docker-compose down
docker-compose stop
在这里插入图片描述

Docker Swarm

多台部署,可伸缩,可扩展

在这里插入图片描述

docker swarm init --help
docker swarm init --advertise-addr 地址 初始化节点
获取令牌:可以得到一个指令,去对应的服务器上执行相应指令
docker swarm join-token manager
docker swarm join-token worker

列出节点信息:
docker node ls
jie在这里插入图片描述
节点离开 docker swarm leave

Raft协议
保证大多数节点存活才可以用 , 集群至少大于3台,存活的主节点一定要>1,至少两台存活才能用

swarm扩展性,可伸缩
使用下面两个命令都可以实现可伸缩性
在这里插入图片描述

灰度发布:金丝雀发布

docker run 容器启动,不具有扩缩容功能
docker service 服务启动,可伸缩,随机分布到节点上
查看服务
docker service ls
启动多个服务副本,集群任意节点都可以访问
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CI/CD Jkenins

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值