弱小和无知不是生存的障碍,傲慢才是。
学前准备:SpringBoot、linux命令基础
镜像命令
容器命令
操作命令
。。。
·Docker铺像!
·容器数据卷!
·DockerFile
Docker网络原理(需要掌握 计算机原理的基础)
IDEA H整合Docker
Docker Compose
Docker Swarm—简化版的k8s
CI/CD(持续集成、持续部署) 例如:Jenkins流水线
Docker为什么出现?
一款产品:开发-上线两套环境!应用环境,应用配置!
开发一运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?
环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis.ES、Hadoop….)!费时费力。
发布一个项目(jar+(Redis MySQL jdk ES)),项目能不能都带上环境安装打包!
之前在服务器配置一个应用的环境Redis MySQL jdk ES Hadoop,配置超麻烦了,不能够跨平台。
Docker优势:
vm:linux centos原生镜像(一个电脑!) 隔高,需要开启多个虚教机! 几个G 几分钟docker:隔高,镜像(最核心的环境4m+jdk,mysql)十分的小巧, 运行载像就可以了!小巧! 几个M Kb 秒级启动!
关于Docker
基于go语言开发
官网地址:https://www.docker.com/
指导文档地址:https://docs.docker.com/
发布镜像网址:https://hub.docker.com/
Docker可以做什么?
比较Docker和虚拟机技术的不同:
·传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
·容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
·每个容器间是互相需离,每个容器内都有一个属于自己的文件系统,互不影响。
DevOps (研发,运维)
应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一健运行
更便捷的升级和扩缩容
使用了Docker之后,我们部器应用就和搭积木一样!
项目打包为一个镜像,扩展服务器A!服务器B
更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的。
更高效的计算资源利用:
Docker是内核级别的毒拟化,可以再一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。
Docker安装
Docker基本组成
镜像(image):
docker说像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像==>run ==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的inux系统
仓库(repository):
仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库!
Docker Hub(默认是国外的)
阿里云.….都有容器服务器(配置镜像加速!)
安装Docker
环境准备:
Centos7
环境查看:
[root@docker01 ~]# uname -r
3.10.0-862.el7.x86_64
[root@docker01 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装:参考帮助文档
https://docs.docker.com/engine/install/centos/
1.清楚旧版本
2.安装依赖包
yum-utils
3.设置镜像的仓库(替换官方镜像地址为阿里镜像地址)
4.更新yum软件包索引
yum makecache fast
5.安装docker ce社区版 ee企业版
6.启动 测试是否安装成功
systemctl start docker
docker -v
配置阿里云加速
https://cn.aliyun.com/
产品分类—》搜索:容器与镜像服务—》管理控制台—》账号登入—》镜像加速器
在docker中holle-world原理
底层原理
Docker是怎么工作的?
Docker是一个Client·Sener结构的系统,Docker的守护进程运行在主机上,通过Socke从客户端访问!
DockerServer 授收到Docker-Client的指令,就会执行这个命令!
Docker为什么比VM快?
1.Docker有着比虚拨机更少的抽象层。
2、docker利用的是宿主机的内核,Vm需要是Guest OS
Docker的常用命令
帮助命令
docker version
docker info #显示docker的系统信息,包含镜像和容器的数量
docker 命令 --help #
帮助文档的地址:https://docs.docker.com/reference/
镜像命令:
docker images 查看镜像
[root@docker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 831691599b88 4 weeks ago 215MB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
[root@docker01 ~]# docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
-q, --quiet Only show numeric IDs
docker search mysql 搜索mysql
[root@docker01 ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9743
[root@docker01 ~]# docker search --help
-f, --filter filter Filter output based on conditions provided
-filter-STARS=3000 搜索出来的镜含就是STARS大于3000的
docker pull 服务:【tag】 下载镜像
[root@docker01 ~]# docker pull mysql
docker rmi 容器id 删除镜像
容器命令:
docker run 【可选参数】 镜像名 启动镜像
#参数说明
–nane="Name”容器名字 tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口,例:-p 8080:8080
-p(大写) ip:主机端口:容器端口
-p 主根端口:容器端口(常用)
-p 容器端口
容器端口
-P(小写) 随机指定端口
#启动并进入容器
[root@docker01 ~]# docker run -it centos /bin/bash
[root@cfa9e2dda12c /]#
#退出容器
[root@cfa9e2dda12c /]# exit
Ctrl+P+Q 容器不停止退出
#列出所有运行中的容器
docker ps 列出当前正在运行的容器
-a 列出当前正在运行的容器+历史运行过的容器
-n=? 显示最近创建的容器
-q 只显示容器的编号
docker rm容器id 删除容器
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 centos #后台启动容器
问题docker ps,发现centos 停止了
#常见的坑:docker 容器使用后台运行,就必须要有要一个前台选程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs -tf --tail 行数 容器id 查看日志
查看容器中进程信息ps
docker top容器id
查看镜像的元数据
docker inspect 容器id
进入当前正在运行的容器
#我们通常容器都是使用后台方式运行的,需要进人容器,参改一些配置
#命令
docker exec -it 容器id bashshell 进入容器后开启一个新的终端,可以在里面操作
docker attach 容器id 进入容器正在执行的的终端,不会启动新的进程
从容器拷贝文件到主机
docker cp 容器id:容器内路径 目的的主机路径
命令小结:
attach Attach to a running container #当林she11下attach 连接指定运行镜像
build Build an isage from a Dockerfile #通过Dockerfile定制镜像
comit Create a new image from a container changes #损交当前容器为新的镜像
cp copy files/folders fron the containers filesysten to the host path 从容器中持贝指定文作或者目 录到宿主机中 create Create a new container #创建一个新的容器,同run,但不启动容器
diff Inspect changes on a container’s filesysten #查看 docker容器变化
events Get real time events from the server #从docker 服务获取容器实时事件
exec Run a command in an existing container #在已存在的容器上运行命令
export Strean the contents of a container as a tar archive #导出客器的内容流作为一个tar日档文件[对应 import] history Show the history of an inage#展示一个硫像形成历史
images List inages #列出系统当前统像
iport Create a new filesystem image from the contents of a tarbal1 #从tar包中的内容创建一个新的文件系 统映像[对应export]
info Display system-wide information #显示系统相关信息
inspect Return 1ow-level information on a container #查看容器详细信息
kill Kill a running container #kill 指定 docker 容器
load Load an image from a tar archive #从一个tar 包中加就一个镜像[对应 save]
login Register or Login to the docker registry server #注据或省登陆一个docker 源服务器
logout Log out from a Docker registry server #从当菌Docker registry 退出
logs Fetch the logs of a container #输出当前容器日志信息
port Lookuf the public-facing port which is NAT-ed to PRIVATE_PORT #查看块射端口对应的容器内部希端 口
pause Pause all processes within a container #音停容器
ps List containers #列出容器列素
pu1l Pull an inage or a repository fron the docker registry server #从docker镜食源服务器拉取指定镜 像或者库载像
push push an image or a repository to the docker registry server #推送指定镜像或者库横像至docker源 服务器 restart Restart a running container #重启运行的容器
rm Remove one or more containers #移除一个或者多个容器
rmi Renove one or more images #移除一个或多个镜像[无容器使用该镜像才可删除,否则露制除相关客 器才可丝镜或-f鲨制联除1
run Run a comnand in a new container #创建一个新的容器并运行一个命令
save save an image to a tar archive #保存一个硫像为一个tar 包[对应load]
search search for an inage on the Docker Hub #在 dockerhub 中拨索镜费
start start a stopped containers #启动容器
stop Stop a running gontainers #停止容器
tag Tag an image into a repository #给源中镜像打标签
top Lookup the runing processes of a container #查看容器中运行的进程信息
unpause Unpause a paused container #取消香停容器
version Show the docker version information #查看docker 额本号
wait Block until a container stops,then print its exit code #黄取容器停止时的混出状态值
练习:
1.Docker安装Nginx
1.1思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分的麻烦,我要是可以在容器外部提供一个快射路径,达到在容器修改文件名,容器内部就可以自动修改?-v数据卷!
[root@docker1 ~]# mkdir /var/data
[root@docker1 ~]# docker run -it -v /var/data:/abc myos
[root@f1fb58b85671 /]# cd /abc/
[root@f1fb58b85671 abc]# touch f1
[root@f1fb58b85671 abc]# ls
f1 zhy
1.1.1思考:Docker容器里的配置文件怎么修改?
下载vim
这里要下载vim,不然无法对文件进行修改
具体执行如下两个命令:
apt-get update、apt-get install vim
2.Docker安装一个tomcat
#官方的使用
docker run -it --rm tomcat:9.0
#我们之前的启动都是后台,停止了容器之后,容器还是可以查到docker run -it–rm,一般用来测试,用完就删除#下载在启动
docker pull tomcat
#启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat
制试访同没有间题乡
进入容器
[root@kuangshen home]# docker exec -it tomcato1 /bin/bash
#发现问题;1.linux命令少了,2.没有ebapps,阿里云镜像的原因。默认是最小的镜份,所有不必要的都剧除排。
#保证最小可运行的环境!
2.1思考问题:我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了!
[root@docker1 ~]# mkdir /var/data
[root@docker1 ~]# docker run -it -v /var/data:/abc myos
[root@f1fb58b85671 /]# cd /abc/
[root@f1fb58b85671 abc]# touch f1
[root@f1fb58b85671 abc]# ls
f1 zhy
3.部署es+kibana
#es操露的端口很多!
#es十分的耗内存
#es的数据一般需要款置到安全目录!挂载
#–net somenetwork ? 网络配置
#-e"discovery.type-single-node" 集群信息
#启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type-single-node” elasticsearch:7.6.2
#启动了linux就卡住了docker stats查看cpu的状态
#es是十分耗内存的
#查看docker stats 容器id
#赶紧关闭,塔加内存的限制
#赶紧关闭,塔加内存的限制,修改配置文作 -e环境配置修改
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e"discovery.type-single-node" -e E5_JAVA_0PTS="-XmS64m-Xmx512m" elasticsearch:7.6.2
思考:使用kibana连接es?思考网络如果才能连接过去!
可视化
1.portainer
安装
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
2.Rancher(CI/CD再用)
Docker镜像讲解
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包docker课像,就可以直接跑起来!
如何得到观像:
·从远程仓库下载
·朋友拷贝给你
·自配制作一个镜像DockerFile
Docker镜像加载原理
UnionFS(联合文件系统)
分层理解
commit镜像—提交一个自己的镜像
[root@docker01 ~]# docker run -d -p 8080:8080 --name tomcat01 tomcat
9ecabbcd7092a7103907c27e9e62d585a913a302aee1f77888b8470adb1149a2
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ecabbcd7092 tomcat "catalina.sh run" 6 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp tomcat01
d64486213e0d portainer/portainer "/portainer" 42 minutes ago Up 42 minutes 0.0.0.0:8088->9000/tcp exciting_swirles
d0ba2c986d32 nginx "/docker-entrypoint.…" 6 hours ago Up 6 hours 0.0.0.0:8000->80/tcp nginx01
[root@docker01 ~]# docker exec -it tomcat01 /bin/bash
root@9ecabbcd7092:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@9ecabbcd7092:/usr/local/tomcat# ls webapps/
root@9ecabbcd7092:/usr/local/tomcat# cp -pr webapps.dist/* webapps/
root@9ecabbcd7092:/usr/local/tomcat# ls webapps/
ROOT docs examples host-manager manager
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ecabbcd7092 tomcat "catalina.sh run" 2 minutes ago Up About a minute 0.0.0.0:8080->8080/tcp tomcat01
d64486213e0d portainer/portainer "/portainer" 44 minutes ago Up 44 minutes 0.0.0.0:8088->9000/tcp exciting_swirles
d0ba2c986d32 nginx "/docker-entrypoint.…" 6 hours ago Up 6 hours 0.0.0.0:8000->80/tcp nginx01
[root@docker01 ~]# docker commit -a='wyi' -m="add webapps app" 9ecabbcd7092 tomcat-wangyi:1.0
sha256:86f66ef2520da9dcb4070c86dab632461164a3a964825d741e34e131198d933a
[root@docker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat-wangyi 1.0 86f66ef2520d 7 seconds ago 652MB
tomcat latest df72227b40e1 2 days ago 647MB
mysql latest 6e447ce4863d 5 days ago 544MB
nginx 1.18.0 8fcf4560562d 8 days ago 132MB
nginx latest 0901fa9da894 8 days ago 132MB
centos latest 831691599b88 4 weeks ago 215MB
portainer/portainer latest cd645f5a4769 6 weeks ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 3 months ago 791M