导图社区 Docker入门
Docker入门:编写dockerfile文件:FROM java:8 #基础镜像通过java8构建、COPY *.jar /app.jar #当前目录下的所有jar打包到惊醒内部。
编辑于2022-11-10 16:23:27时间管理-读书笔记,通过学习和应用这些方法,读者可以更加高效地利用时间,重新掌控时间和工作量,实现更高效的工作和生活。
本书是法兰教授的最新作品之一,主要阐明了设计史的来源、设计史现在的状况以及设计史的未来发展可能等三个基本问题。通过对设计史学科理论与方法的讨论,本书旨在促进读者对什么是设计史以及如何写作一部好的设计史等问题的深入认识与反思。
《计算机组成原理》涵盖了计算机系统的基本组成、数据的表示与运算、存储系统、指令系统、中央处理器(CPU)、输入输出(I/O)系统以及外部设备等关键内容。通过这门课程的学习,学生可以深入了解计算机硬件系统的各个组成部分及其相互之间的连接方式,掌握计算机的基本工作原理。
社区模板帮助中心,点此进入>>
时间管理-读书笔记,通过学习和应用这些方法,读者可以更加高效地利用时间,重新掌控时间和工作量,实现更高效的工作和生活。
本书是法兰教授的最新作品之一,主要阐明了设计史的来源、设计史现在的状况以及设计史的未来发展可能等三个基本问题。通过对设计史学科理论与方法的讨论,本书旨在促进读者对什么是设计史以及如何写作一部好的设计史等问题的深入认识与反思。
《计算机组成原理》涵盖了计算机系统的基本组成、数据的表示与运算、存储系统、指令系统、中央处理器(CPU)、输入输出(I/O)系统以及外部设备等关键内容。通过这门课程的学习,学生可以深入了解计算机硬件系统的各个组成部分及其相互之间的连接方式,掌握计算机的基本工作原理。
Docker入门
CI\CD Jenkins
Docker Swarm
Docker Compose
springboot微服务打包docker镜像
构建springboot项目
打包应用
将整个项目打包成jar包,build success
在命令行测试jar包运行情况
java -jar demo-0.0.1-SNAPSHOT.jar
编写dockerfile文件
FROM java:8 #基础镜像通过java8构建
COPY *.jar /app.jar #当前目录下的所有jar打包到惊醒内部
CMD ["--serve.port=8080"] #映射服务地址
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"] #进入容器后执行命令,运行app.jar
构建镜像
cd /home/code_wsx
mkdir idea
cd idea/ #将打包好的jar包和Dockerfile文件上传到服务器该目录
docker build -t kuangshen666 .#构建镜像
docker images #查看镜像
docker run -d -P --name kuangshen-springboot-web kuangshen666
docker ps #查看docker端口映射
curl localhost:32779 #测试本地访问
curl localhost:32779/hello #测试访问hello请求
发布运行
push发布
pull拉取
run运行
Docker网络原理
理解docker0
网络模式
bridge:桥接docker(默认,自己创建也使用bridge模式)
none:不配置网络
host:和宿主机共享网络
container:容器网络联通(用得少!)
测试
我们直接启动的命令 --net bridge, 默认配置docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net tomcat
#自定义docker网络:
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker network ls #查看配置好的网络
docker run -d -P --name tomcat-net-01 --net mynet tomcat
自创建docker网络解决了docker0的缺陷,docker容器内部网络可以相互ping通
Redis、MySQL不同的集群使用不同的网络,保证集群是安全和健康的
网络连通Docker0与mynet
连接一个容器到一个网络
docker network connect mynet tomcat01
docker network inspect mynet #查看mynet网络配置
连通后就是将Tomcat01放到了mynet网络下!
一个容器两个ip地址
Redis集群部署实战
DockerFile
构建docker镜像的命令参数脚本!
docker镜像构建步骤
编写一个Dockerfile文件
docker build 构建成为一个镜像
docker run 运行镜像
docker push 发布镜像(DockerHub、阿里云镜像仓库)
Dockerfile构建过程
基础知识
每个保留关键字(指令)都必须是大写字母
从上到下顺序执行
#表示注释
每个指令都会创建提交一个新的镜像层,并提交!
Dockerfile指令
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤:Tomcat镜像,这个Tomcat压缩包就是添加内容
WORK #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口位置
CMD #指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动时要运行的命令,可追加命令
ONBUILD #当构建一个被继承Dockerfile,这时候就会运行onbuild的指令,触发指令
COPY #类似ADD,将我们的文件拷贝到镜像中
ENV #构建的时候设置环境变量
创建自己的centos
mkdir dockerfile #创建目录
ls
cd dockerfile/
vim mydockerfile-centos #编写Dockerfile文件
FROM centos
MAINTAINER Daily<17864270365@163.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yun -y install vim
RUN yun -y install net_tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
docker build -f mydockerfile-centos -t mycentos:0.1 . #通过Dockerfile文件构建镜像
docker run -it mycentos:0.1
pwd #默认进入工作目录,不配置会进入根目录
docker history 镜像id #查看镜像变更历史
Dockerfile制作Tomcat镜像
1、准备镜像文件Tomcat压缩包,jdk的压缩包
2、编写Dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,不需要-f指定
touch readme.txt
vim Dockerfile
FROM centos
MAINTAINER daily<17864270365@163.com> #补充作者信息
COPY readme.txt /usr/local/readme.txt #标准readme文件
ADD jdk-8u11-linux-x64.tar.gz /usr/local/ #自动解压到后面的目录
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
RUN yun -y install vim #安装vim命令
ENV MYPATH /usr/local #配置环境
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22 #配置Tomcat目录
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080 #暴露8080端口
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /url/localapache-tomcat-9.0.22/bin/logs/catalina.out
3、构建镜像
docker build -t diytomcat . #构建镜像
4、启动镜像
docker images
docker run -d -p 9090:8080 --name dailytomcat -v /home/code_wsx/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/code_wsx/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs diy tomcat
docker exec -it dickerid /bin/bash #进入docker容器内部
ls #查看容器
ls -l
5、访问测试
curl localhost:9090 #容器外端口测试访问
6、发布项目(由于使用了卷挂载,可以直接在本地编写项目发布!)
cd test/
pwd
mkdir WEB-INF
ls
cd WEB-INF
vim web.xml
网上示例
vim index.jsp
网上示例
localhost:9090/test #本机访问验证测试
cd ..
cd tomcatlogs/
ll
cat catalina.out #查看运行日志
项目部署成功!
发布镜像dockerhub
docker login -u username #username是dockerhub的账户名
docker push daily/diytomcat:1.0 #daily是作者名,自己发布的镜像尽量带上版本号
发布镜像阿里云镜像
找到阿里云容器镜像服务
创建命名空间
创建容器镜像
参考官方文档
小结
Docker概述
基于Go语言开发,项目带上环境安装打包的环境安装解决方案
虚拟机技术缺点:
资源占用多
冗余步骤多
启动速度慢
容器化技术:
传统虚拟机虚拟出一套硬件,运行另一套完整的操作系统
容器应用直接在宿主机运行,没有自己的内核,
每个容器间相互隔离,每个容器内都有属于自己的文件系统,互不影响
应用更快速交付和部署
更便捷的升级和扩缩容
更简单的系统运维
更高效的计算机资源利用
Docker安装
Docker的基本组成
Client:客户端、DOCKER_HOST:服务器、Registry:仓库
镜像(image):
通过镜像作为模板来创建容器服务,Tomcat镜像==> run ==> tomcat01 容器(提供服务)
容器(container):
docker通过容器技术,独立运行一个或一组应用,通过镜像来创建
基本命令:启动、停止、删除
仓库(repository):
存放镜像的地方
DockerHUB
阿里云、华为云
安装Docker
环境准备
Linux基础
ubuntu16.04
Xshell远程连接服务器
系统内核4.15
安装
卸载旧版本:
建立仓库
安装docker引擎
启动 docker
查看docker _hello world镜像
run流程和底层原理
run流程
底层原理
docker是Client-Server结构的系统,Docker守护进程运行在主机上,通过socket从客户端访问
DockerServer接收到Docker-Client的指令,然后执行命令
Docker为什么比VM(虚拟机)快
Docker比VM有更少的抽象底层
Docker利用的是宿主机的内核,VM需要的是Guest OS
新建容器的时候,Docker不需要重新加载一个操作系统内核,避免引导。
Docker命令
帮助命令
docker version #显示docker的版本信息
docker info #显示docker系统信息,包括镜像和容器数量
docker 命令 --help #帮助命令
官方文档: Reference documentation | Docker Documentation
镜像命令
docker images #查看本地主机上的所有镜像 -aq
docker search #搜索镜像
docker pull #下载镜像
docker rmi -f 容器ID #删除镜像
docker rei -f $(docker images -aq) #删除所有镜像
容器命令
说明:
有了镜像才可以创建容器!
docker pull centos #创建centos镜像
新建容器并启动
docker run [可选参数] image
参数说明:
--name="Name" 容器名称,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口, -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
docker run -it centos /bin/bash #启动并进入容器
[root@5f4a2e916495 /]#
ls #查看容器内的centos
bin home lost+found opt run sys var
dev lib media proc sbin tmp
etc lib64 mnt root srv usr
exit #从容器退回主机
退出容器
exit #直接退出,并停止容器
Ctrl+P+Q #退出,不停止容器
列出所有运行容器
docker ps #查看当前运行的容器
docker ps -a #查看所有运行过的容器
删除容器
docker rm 容器id #删除指定容器
docker rm -f $(docker ps -aq) #删除所有容器
不能删除正在运行的容器,强制删除 rm -f
启动与停止容器操作
docker start 容器ID #启动容器
docker restart 容器ID #重启容器
docker stop 容器ID #停止当前运行的容器
docker kill容器ID #强制停止当前容器
其他常用命令
后台启动容器
docker run -d 镜像名
问题:docker ps ,发现centos停止了
小坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用就会自动停止
查看日志
docker logs -tf --tail number 容器id
自己编写一段shell脚本
docker run -d centos /bin/sh -c "while true;do echo wsx;sleep 1;done"
docker ps
docker logs -tf --tail 10 容器id
查看容器中的进程信息
docker ps
docker top 容器id
查看镜像的元数据
docker ps
docker inspect
进入当前正在运行的容器
docker ps
docker exec -it 容器ID /bin/bash #方式一:进入容器后开启一个新终端,可以在里面操作(常用)
docker attach 容器ID #方式二:进入容器正在执行的终端,不启动新进程
容器内拷贝文件到主机
docker cp 容器id:容器内路径 目的主机路径
拷贝是一个手动过程,后来会使用 -V卷技术,实现同步主机和容器文件
常用命令总结
作业一:安装Nginx
docker search nginx #搜索镜像
docker pull nginx #拉取镜像
docker run -d --name nginx01 -p 3344:80 nginx #后台运行容器并暴露80端口
-d 后台运行
--name 容器命名
-p 暴露端口,宿主机端口:容器内部端口
curl localhost:3344 #测试端口
docker exec -it nginx01 /bin/bash #进入容器
whereis nginx #查找配置文件
cd /etc/nginx #进入配置文件目录
ls #列出文件目录
exit #退出容器
docker stop 容器id #停止容器
思考:每次改动nginx配置文件都需要进入容器内部?是否可以在容器外提供一个映射路径,使得在容器外修改文件,容器内自动修改? —V 数据卷!
作业二:部署Tomcat
docker run -it --rm tomcat:9.0
之前启动都是后台,停止容器后,容器还在,--rm 一般用来测试,用完即删
docker pull tomcat #拉取镜像
docker images #查看镜像
docker run -d -p 3355:8080 --name tomcat01 tomcat
docker exec -it tomcat01 /bin/bash
问题:linux命令少了,没有webapps,默认最小镜像
作业三:部署es+kibana
注意:es暴露端口很多!内存消耗大!数据需要放到安全目录!
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
启动后占用内存大卡顿
docker stats #查看CPU运行情况
关闭docker,增加内存限制,修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xmx512m" elasticsearch:7.6.2
使用kibana连接es
可视化
portainer(先用这个)
图形化界面管理工具
docker run -d -p 8088:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
访问测试:http://ip:8088
Rancher(CI/CD再用)
Docker镜像
镜像是什么
轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、库、环境变量和配置文件
docker镜像加载原理
UnionFS(联合文件系统)
分层、轻量级、高性能文件系统,支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。镜像可以通过分层进行继承
分层原理
commit镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:tag
docker commit -a="daily" -m="add xxx" 7ed456fsaedf tomcat02:1.0
保存当前容器状态,通过commit提交,获得一个镜像
容器数据卷
什么是容器数据卷
容器之间的数据共享技术,docker容器中产生的数据同怒到本地!
卷技术,实现目录挂载,将容器内的目录,挂载到Linux上!
为了容器的持久化和同步操作,容器间也可以数据共享
使用数据卷
方式一:使用命令挂载 -v
docker run -it -v 主机目录:容器内目录
docker run -it -v /home/test:/home centos/bin/bash
docker inspect 容器id #查看容器信息
方式二:Dockerfile
Dockerfile是用来构建docker镜像的构建文件,命令脚本,通过脚本生成镜像,镜像分层,脚本的每行命令就是一层
#创建一个dockerfile文件,名字可以随机,建议Dockerfile
#文件中的内容 指令大写,参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
MySQL同步数据
docker search mysql
docker pull mysql:5.7 #获取镜像
#运行容器需要数据挂载,安装MySQL时需要配置密码-e
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
使用本地数据库连接到服务器的3310--3310和容器内的3306映射,这时候就可以连接了
具名和匿名挂载
匿名挂载
-v 容器内目录
-v后只写了容器内路径,没有写容器外路径
默认容器外路径在 /var/lib/docker/volumes/xx卷名/_data
具名挂载
-v 卷名:容器挂载目录
docker volume inspect 容器id #查看挂载目录信息
读写权限
-v 宿主机挂载目录:容器挂载目录:ro #readonly 只读权限
-v 宿主机挂载目录:容器挂载目录:rw #readwrite 读写权限
ro路径文件只能通过宿主机来操作,容器内无法操作
数据卷容器
两个或多个容器之间实现数据共享
docker run -it --name docker02 --volumes-from docker01 centos#镜像id