docker
基本操作
删除容器
docker rm 容器id 删除指定的容器,不能删除正在运行的容器,强删rm -f
docker rm -f $(docker ps -aq) 删除所有的容器
docker ps -a -q |xargs docker rm 删除所有容器
启动和停止容器
docker start 容器id 启动容器
docker resart id 重启容器
docker stop id 停止
docker kill id 强制停止
后台启动容器
docker run -d 镜像名
#问题
#docker ps 发现docker停止
#坑 docker 容器后台运行,就必须有一个前台进程,docker 发现没有应用,就会自动停止
#nginx 问题
查看日志
docker logs -tf id
查看容器中进程id
docker top id
查看镜像元数据
docker inspect id
进入当前正在运行的容器
方式1 进入容器后开启的=一个新的终端,可在里面操作
docker exec -it id bashshell
方式2 进入容器正在执行的终端,不会启动新的进程
docker attach id
容器拷贝到主机上
docker cp id:容器内路径 目的主机路径
启动nginx
[root@hello ~]# docker run -d --name nginx01 -p 3344:80 nginx
-d 后端启动 命名nginx01 暴露端口3344 docker80 宿主机端口:容器内部端口
curl localhost:3344
查看本机3344端口
启动tomcat
docker run -it -rm tomcat
用完即删,一般测试用
查看cpu状态
docker stats
可视化
portainer
Rancher(CI/CD)
commit 镜像
docker commit 提交容器为一个新的版本
#命令与git相似
dockercommit -m="提交的信息描述" -a="作者" 目标镜像名:[TAG]
实战
# 1 启动默认tomcat
# 2 发现这个tomcat是没有webapps应用,镜像的原因,官网下默认webapps下面是没有文件的
# 3 可自己拷贝文件进webapps
# 4 将我们的容器通过commit提交为一个新的镜像
容器数据卷
docker理论回顾
将应用和环境打包成一个镜像
数据放入容器中,容器删除,数据丢失 ==数据持久化==
容器之间需要数据共享,docker数据同步到本地
目录挂载:将容器内目录,挂载到虚拟机上
总结:容器的持久化和同步操作,容器间数据共享
使用数据卷
直接使用命令挂载 -v
docker run -it -v 主机目录:容器目录 双向绑定
docker inspect id 查看容器信息
实战 mysql
docker search mysql
docker pull mysql
#启动mysql
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=?
--name mysql01 mysql
#后台运行 暴露端口3310 挂载 -e环境配置mysql的密码 命名为mysql01
具名和匿名挂载
#匿名 -v 容器内路径 没有容器外路径
#具名 -v 卷名:容器内路径
#指定路径挂载 -v 、宿主机路径:容器内路径
拓展
# 通过 -v容器内路径:ro rw 改变读写权限
read only read write
ro说明这个路径只能通过宿主机来操作,容器内部无法操作
初识Dockerfile
Dockerfile 就是用来构建docker镜像的文件 命令脚本
通过脚本生成镜像,镜像是一层一层的,每个命令都是一层
FROM centos
#挂载 volume 每个命令都是镜像的一层
VOLUME {"volume01","volume02"}
CMD echo "----end----"
CMD /bin/bash
# -t targetdocker build -f file -t /test/centos .
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=password--name mysql02--volumes-from mysql01 mysql#实现两个容器数据同步#mysql1数据被删mysql2仍然存在,相当于备份
结论
容器之间配置信息的传递,数据容器卷的生命周期一直持续到没有容器使用为止,但一旦持久化到本地,本地数据不会被删除
Dockerfile
dockerfile 是用来构建docker镜像的文件,命令参数脚本
构建步骤:
1 编写一个dockerfile文件
2 docker build 构建成为一个镜像
3 docker run 运行镜像
4 docker push 发布镜像(DockerHub,阿里云镜像仓库)
基础知识
1 每个保留关键字(指令)都必须是大写字母
2 执行指令都是从上向下构成的
3 #表示注释
4 每一个指令都会提交一个新的镜像,并提交
docker三部曲 开发,部署,运维
DockerFile 构建文件,定义了一切的步骤,源代码
DockerImages 通过DockerFIle构建生成的镜像,最终发布和运行产品,原来是jar war 包
Docker容器 容器就是镜像运行起来提供服务器的
Dockerfile
Docker网络
桥接
none
-link
veth-pair都是成对存在的
docker搭建redis集群
构建springboot项目
dockercompose
定义,运行多个容器
yaml file配置文件
single command
Using Compose is basically a three-step process:
Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
Run docker compose up and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using the docker-compose binary.
A docker-compose.yml looks like this:
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
For more information about the Compose file, see the Compose file reference.
Compose has commands for managing the whole lifecycle of your application:
Start, stop, and rebuild services
View the status of running services
Stream the log output of running services
Run a one-off command on a service
作用:批量服务编排
compose是docker官方开源项目
dockerfile让程序在任何地方运行
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
compose :
-
服务services,容器,应用(web,redis,mysql)
-
项目project,一组关联的容器
国内安装docker-compose
快速开始
#3层
vereison: '' #版本
services: '' #服务
服务1: web
#服务配置
images
build
network
....
服务2: redis
#其他配置 网络/卷 全局规则
volumes;
network:
configs:
开源项目
1下载项目(docker-compose yaml)
2 如果需要文件(dockerfile)
3文件准备齐全(直接一键启动项目)
jar包+Dockerfile+docker-compose.yml 直接启动
Doxker Swarm集群管理和编排
RAFT一致性算法
保证大多数节点可以使用
docker run 容器启动,不具有扩缩容器
docker servoce 服务 具有扩缩容器,滚动更新
swarm
docker可以初始化一个swarm集群,其他节点可以加入(管理,工作者)
Node
就是一个docker节点,多个节点就组成了一个网络集群
service
任务,可以在管理节点或者工作节点来运行,核心,用户访问
Task
容器内的命令,细节任务
命令->管理->api->调度->工作节点(创建task容器维护创建)
拓展 网络模式
Swarm
OVerlay
ingress 特殊的 overlay网络,负载均衡,IPVSVIP
进阶 k8s
云原生时代
云应用