肥仔学习日记----Docker
Docker学习
- Docker概述
- Dokcer安装
- Docker命令
- 镜像命令
- 容器数据卷
- 操作命令
- …
- Docker镜像
- 容器数据卷
- DockerFile
- Docker网络原理
- IDEA整合Docker
- Docker Compose
- Docker Swarm
- CI\CD jenkins
弱小和无知不是生存的障碍,傲慢才是。
Docker 概述
Docker 为什么会出现?
一款产品:开发----上线 两套环境!应用环境,应用配置!
开发-----运维
开发即是运维
环境配置十分麻烦,每一个机器都要部署环境(集群Redis、ES…)
那就干脆把环境和应用一起打包带走。
window ----- linux
传统 : 开发给 jar包 ,运维来做!
现在: 开发打包部署上线,一套带走! 运维再见。。。、
Java 》》 apk 》》 发布(应用商店)---- 张三使用APK -- 安装即可用!
Java 》》 jar(环境) 》》打包项目带上环境(镜像)=》docker 镜像仓库 =》下载我们发布的镜像 =》直接运行即可

隔离:docker核心思想----打包装箱 哥哥应用互相隔离
Docker历史
2010年,几个搞IT的年轻人,在美国成立了一家公司dotcloud
做一些云计算服务!LXC有关的容器技术!
他们将自己的技术(容器化技术)命名,就是Docker!
Docker刚刚诞生的时候,没有引起行业的注意!
没办法 ---- 开源求活
2013年开放源代码
Docker越来越多的人发现了Docker的有点!火了!Docker每个月都会更新一个版本!
2014年4月9日 , Docker1.0发布!
Docker为什么这么火?十分轻巧!
docker
docker 基于Go语言开发的开源项目!
dockers 官方文档 :https://docs.docker.com/
仓库地址 :https://hub.docker.com/
docker能干什么?
原来的虚拟机

虚拟机技术缺陷:
1.资源占用多 很多!!
2.冗余步骤多 集群的时候
3.启动慢

docker 和 虚拟机技术的不同:
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
- 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟硬件所以轻便了许多。
- 每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响。
DevOps(开发、运维)
应用更快速地交付和部署
传统:一堆帮助文档,安装程序
Dockers:打包镜像发布测试,一键运行。
更快捷的升级和扩缩容
使用 docker之后,我们部署应用和搭积木一样!
项目打包为一个镜像,扩展服务器A!服务器B!
更简单的系统运维
容器化之后,我们的开发、测试环境都是高度一致的。
更高效的计算资源利用
docker是内核级别的虚拟化,可以在一个物理机上运行很多实例,服务器的性能可以压榨最极致。
docker 安装

镜像(image):
docker镜像就好比是一个模板(或者说一个类),可以通过这个模板创建容器服务,tomcat镜像–>run -->romcat容器(提供服务器),通过这个镜像可以创建很多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
Docker利用容器技术,独立运行一个或者一组应用,通过镜像创建的。
启动,停止,删除等基本命令要掌握。
目前就可以把这个容器理解为就是一个简易的Linux系统
仓库(repository):
仓库就存放进行的地方!
阿里云有国内镜像!!!
环境准备
1、需要Linux基础
2、CentOS 7
3、我们使用Xshell连接远程服务器进行操作!!!
环境查看
uname -r
安装Docker
官方文档
卸载原有Docker
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-utilssudo yum-config-manager \--add-repo \// https://download.docker.com/linux/centos/docker-ce.repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
这里镜像仓库是国外的。更换阿里云国内镜像下载速度会快很多。
更新yum软件包索引
yum makeche fast
安装docker
yum install docker -ce docker-ce-cli containerd.io
启动docker
systemctl start docker
查看docker版本
docker verion
卸载Docker
//卸载依赖
yum remove docker-ce-cli containerd.io
删除资源rm -rf /var/lib/docker
阿里云镜像加速器
https://oqkxb48c.mirror.aliyuncs.com
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://oqkxb48c.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
回顾 Docker run halloword

底层原理
docker是怎么工作的
docker 是一个Client - Server 结构的系统,Server结构的系统,Dokcer的守护进程运行在主机上,通过Socker从客户端访问! DockerServer接收到Docker-Client的指令,就会执行这个命令。
Socket是什么呢?
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
利用三元组【ip地址,协议,端口】可以进行网络间通信了,那我们应该怎么实现了,因此,我们socket应运而生,它就是利用三元组解决网络通信的一个中间件工具,就目前而言,几乎所有的应用程序都是采用socket,如UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰)。

Docker 为什么比VM快
1.docker 有着较少的抽象层

2.docker 利用的是宿主机的内核,vm需要GuestOS
所以新建一个容器的时候,docker利用了主机的操作系统,不需要重新加载一个内核。所以vm启动是分钟级别的,而Docker容器是秒级别的。

docker常用命令
1、Docker容器信息
##查看docker容器版本
docker version
##查看docker容器信息
docker info
##查看docker容器帮助
docker --help
2、镜像操作
提示:对于镜像的操作可使用镜像名、镜像长ID和短ID。
2.1、镜像查看
##列出本地images
docker images
##含中间映像层
docker images -a##只显示镜像ID
docker images -q
##含中间映像层
docker images -qa ##显示镜像摘要信息(DIGEST列)
docker images --digests
##显示镜像完整信息
docker images --no-trunc
##显示指定镜像的历史创建;参数:-H 镜像大小和日期,默认为true;--no-trunc 显示完整的提交记录;-q 仅列出提交记录ID
docker history -H redis
2.2、镜像搜索
##搜索仓库MySQL镜像
docker search mysql
## --filter=stars=600:只显示 starts>=600 的镜像
docker search --filter=stars=600 mysql
## --no-trunc 显示镜像完整 DESCRIPTION 描述
docker search --no-trunc mysql
## --automated :只列出 AUTOMATED=OK 的镜像
docker search --automated mysql
2.3、镜像下载
# 下载镜像docker pull 镜像名【:tag】
##下载Redis官方最新镜像,相当于:docker pull redis:latest
docker pull redis
##下载仓库所有Redis镜像
docker pull -a redis
##下载私人仓库镜像
docker pull bitnami/redis

2.4、镜像删除
##单个镜像删除,相当于:docker rmi redis:latest
docker rmi redis
##强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis
##多个镜像删除,不同镜像间以空格间隔
docker rmi -f redis tomcat nginx
##删除本地全部镜像
docker rmi -f $(docker images -q) #docker images -q 查询所有镜像
2.5、镜像构建
##(1)编写dockerfile
cd /docker/dockerfile
vim mycentos
##(2)构建docker镜像
docker build -f /docker/dockerfile/mycentos -t mycentos:1.1
3、容器操作
提示:对于容器的操作可使用CONTAINER ID 或 NAMES。
3.1、容器启动
##新建并启动容器,
#参数:
-i 以交互模式运行容器;
-t 为容器重新分配一个伪输入终端,进入端口查看内容;
--name 为容器指定一个名称
-d 后台的方式运行
-p 随机指定端口-p ip:主机端口:容器端口//访问主机端口的请求可以访问到容器端口-p 主机端口号:容器端口号(常用)-p 容器端口号容器端口docker run -it --name mycentos /bin/bash #启动并进入容器
docker run -i -t --name mycentos
##后台启动容器,参数:-d 已守护方式启动容器
docker run -d mycentos
//注意:此时使用"docker ps -a"会发现容器已经退出。这是docker的机制:要使Docker容器后台运行,就必须有一个前台进程。解决方案:将你要运行的程序以前台进程的形式运行。##启动一个或多个已经被停止的容器
docker start redis
##重启容器
docker restart redis

3.2、容器进程
> top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
> ##列出redis容器中运行进程 docker top redis ##查看所有运行容器的进程信息 for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
3.3、容器日志
##查看redis容器日志,默认参数
> docker logs rabbitmq
> ##查看redis容器日志,参数:-f 跟踪日志输出;-t 显示时间戳;--tail 仅列出最新N条容器日志;
> docker logs -f -t --tail=20 redis
> ##查看容器redis从2019年05月21日后的最新10条日志。
> docker logs --since="2019-05-21" --tail=10 redis
3.4、容器的进入与退出
常见问题:docker 容器使用后台启动,就必须有一个前台的进程。docker 发现没有前台应用的时候,会自动停止
例如:nginx 容器启动之后,发现自己没有提供访问,就会立即停止,就是没有程序了
##使用run方式在创建时进入
docker run -it centos /bin/bash
##关闭容器并退出
exit
##仅退出容器,不关闭
快捷键:Ctrl + P + Q
##直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:--sig-proxy=false 确保CTRL-D或CTRL-C不会关闭容器
docker attach --sig-proxy=false centos
##在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i 即使没有附加也保持STDIN 打开;-t 分配一个伪终端
docker exec -i -t centos /bin/bash
##以交互模式在容器中执行命令,结果返回到当前终端屏幕
docker exec -i -t centos ls -l /tmp
##以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端
docker exec -d centos touch cache.txt docker exec #进入容器后打开一个新的进程
docker attach #进入正在执行的终端,不会启动新的进程!
3.5、查看容器
##查看正在运行的容器
docker ps
##查看正在运行的容器的ID
docker ps -q
##查看正在运行+历史运行过的容器
docker ps -a
##显示运行容器总文件大小
docker ps -s
##显示最近创建容器
docker ps -l
##显示最近创建的3个容器
docker ps -n 3
##不截断输出
docker ps --no-trunc
##获取镜像redis的元信息
docker inspect redis
##获取正在运行的容器redis的 IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis
3.6、容器的停止与删除
##停止一个运行中的容器
docker stop redis
##杀掉一个运行中的容器
docker kill redis
##删除一个已停止的容器
docker rm redis
##删除一个运行中的容器
docker rm -f redis
##删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
## -l 移除容器间的网络连接,连接名为 db
docker rm -l db
#-v 删除容器,并删除容器挂载的数据卷
docker rm -v redis
3.7、生成镜像
##基于当前redis容器创建一个新的镜像;参数:-a 提交的镜像作者;-c 使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停
docker commit -a="DeepInThought" -m="my redis" [redis容器ID] myredis:v1.1
3.7.5 日志的查看
docker logs -f -t --tail -3 -c32a23uh45h02
--tf #显示日志
--tail number #显示日志条数
//自己编写shell脚本
3.7.6 查看容器中的进程信息
docker top 容器ID

3.7.7 查看当前容器的元数据
docker inspect 容器ID #查看容器的所有数据
3.8、容器与主机间的数据拷贝
docker cp 容器id:容器内的文件路径 /外部路径##将rabbitmq容器中的文件copy至本地路径
docker cp rabbitmq:/[container_path] [local_path]
##将主机文件copy至rabbitmq容器
docker cp [local_path] rabbitmq:/[container_path]/
##将主机文件copy至rabbitmq容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] rabbitmq:/[container_path]

docker 的命令很多,需要用的可以直接在官方文档查。
Docker镜像加载原理
UnioFs(联合文件系统)
UnioFS文件系统,是一种分层,轻量级并且高性能的文件系统,它会将来每一次修改的文件作为一次提交来叠加再一起,由于文件被分层了,这样就可以解决一个不同软件直接共用一些相同依赖的问题,如果软件A与软件B它们都有一个共同的依赖jdk那么使用Docker下载了软件A后下载软件B,软件B的jdk不会被下载,因为软件A已经包含了jdk环境,UnioFS文件系统是Docker镜像的基础
docker镜像加载原理
bootfs 系统启动需要引导加载
rootfs 操作系统
docker里面的镜像利用了原有的bootfs和rootfs 所以镜像很小
commint镜像
dockers commit 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器ID 目标镜像名:[TAG(版本号)]

得到一个自己创建的镜像
容器数据卷
什么是容器数据卷?
docker的理念回顾
将应用和环境打包成一个镜像!
数据?容器删除的时候数据就会丢失!------》数据需要持久化
Mysql 容器删除的时候 数据也会一起删除
需求:mysql数据可以存储在本地数据库
容器之间有一个数据共享的技术!将docker中的数据同步化到本地。
这就是数据卷技术!数据卷可以将容器中的目录,挂载到Linux上面!

容器内部/usr/mysql上面写的数据可以自动同步化到/home/mysql上
使用数据卷
方法一:直接使用命令来挂载 -v
docker run -it -v 主机目录,容器内目录 -p


挂载数据卷之后 是双向绑定的
容器内的文件和外面数据卷的文件夹 会互相同步增删改
如果容器被删除了 外部数据卷会保留最后的文件数
停止容器 》在宿主机上修改文件 》启动容器》可以看到容器内数据以就是同步的
具名挂载和匿名挂载

创建一个匿名nginx run -d -P -name nginx01 -v /etc/nignx nignx
-p 小p 是直接写端口 -P大P随机分端口
#查看所有volume的情况
[root@localhost data]# docker volume ls
DRIVER VOLUME NAME
local 3a398d3faa350545b961aadb46f469739a6a5ff9ded3bb4f67665ba55d9fe3b0
local 60d57b651e0f7fe1488344dee7f8b7b0980b43762b6ac55974c4ccf17a0b8f3b
local 9657b542c4fc6b5c88635421606647fdc2972a41695825bfbc74b0ce8cc37ad5
local 25432ca0e19513115419fe8fa5a7f5ef9304dc8c2f1dc5268557471f75c20ae9
local 147027712ae429ee1f4d9416aee797ca25f1a509e36c7f497a6abbc303cc70cf
local a0a40db078e933f87132a493e41ebd51f611b59e74915d692492245a9bff0b65
local a7a23518f27fecdf75a6115b7d5a07ff1b9f5077b64be152e762e89d387052c3
local c8163f7c8f05be8a237a036c5f26538f395ce0616ee37a891b9e67e1232611d3
local d3e0ad82acf38c9894406e207455e53ccffcbe53fbbda064f614eaeca94afde2
local e63dd6d83c9cb2d75750830f007fd6b07632cb553c893ece533ee78b0726924d
匿名挂载情况

#创建一个具名的volume
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx#查看volume的情况
DRIVER VOLUME NAME
local 3a398d3faa350545b961aadb46f469739a6a5ff9ded3bb4f67665ba55d9fe3b0
local 60d57b651e0f7fe1488344dee7f8b7b0980b43762b6ac55974c4ccf17a0b8f3b
local 9657b542c4fc6b5c88635421606647fdc2972a41695825bfbc74b0ce8cc37ad5
local 25432ca0e19513115419fe8fa5a7f5ef9304dc8c2f1dc5268557471f75c20ae9
local 147027712ae429ee1f4d9416aee797ca25f1a509e36c7f497a6abbc303cc70cf
local a0a40db078e933f87132a493e41ebd51f611b59e74915d692492245a9bff0b65
local a7a23518f27fecdf75a6115b7d5a07ff1b9f5077b64be152e762e89d387052c3
local c8163f7c8f05be8a237a036c5f26538f395ce0616ee37a891b9e67e1232611d3
local d3e0ad82acf38c9894406e207455e53ccffcbe53fbbda064f614eaeca94afde2
local e63dd6d83c9cb2d75750830f007fd6b07632cb553c893ece533ee78b0726924d
local juming-nginx
具名挂载情况

-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径::容器内路径 #指定路径挂载
-v ro rw 改变读写权限
ro readonly 只读 ro就说明了这个路径里面的内容只能通过宿主机来操作,容器内部无法操作。
rw readwrite 可读可写
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
初识Dockerfile
Dockerfile 就是用来构建dockers镜像的构造文件! 命令脚本!
通过这个脚本可以生成镜像
FROM centosVOLUME ["volume01","volume02"] #匿名挂载CMD echo"-----end-----"
CMD /bin/bash


数据卷容器
多个Mysql数据同步


多个其实也一样

实现了高可用
除非全部容器都杀死 否则数据都会在
如果挂载了宿主机本地 那容器全部删除 本地也还有备份
DockerFile构建过程
基础知识:
1.每个保留关键字(指令)都必须是大写字母
2.执行从上到下的顺序执行
3.# 表示注释
4.每个指令都会创建提交一个新的镜像层

dockerfile 是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单。
docker 镜像逐渐成为了企业交付的标准,必须掌握!
步骤:开发,部署,上线,运维。。。。
DockerFile:构造文件,定义了一切的步骤,源代码。
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品!
Docker容器:容器就是镜像运行起来提供服务器
用于构建docker镜像文件的
构建步骤
1、编写一个dockerfile文件
2、dockers build 构建成一个镜像
3、docker run 运行镜像
4、docker push 发布镜像 (DockerHub 阿里云镜像仓库)
DockerFile的指令

# This my first nginx Dockerfile
# Version 1.0
FROM # 基础镜像,一切从这里开始构建。
MAINTAINER # 维护者信息,谁写的 姓名<邮箱>
ENV # 构建的时候配置环境变量!
ADD # 文件放在当前目录下,拷过去会自动解压
RUN # 镜像构建的时候需要运行的命令
WORKDIR # 设置进行的工作目录
EXPOSE 80 # 暴露端口
CMD # 运行以下命令,只有最后一个会生效,可被替代
ENTRYPOINT # 追加命令
COPY # 将我们的文件拷贝到镜像中
实践:做一个自己的tomcat
1.准备tomcat压缩包,jdk压缩包

2.编写dockerfile文件,官方命名Dockerfile,build会自动寻找该文件,就不需要-f指定文件了。
FROM centos
MAINTAINET Lyl<1441731229@qq.com>COPY readme.txt /usr/local/readme.txt
ADD jdk-8u301-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.52-fulldocs.tar.gz /usr/localRUN yum -y install vimENV MYPATH /usr/local
WORKDIR $MYPATHENV 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.52
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.52
ENV PATH $PATH:$JAVA_HOME/bin:CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.52/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.52/bin/logs/catalina.out
3.构建镜像
docker build -t diytomcat . #这里由于我的文件名直接叫 Dockerfile 所以不用-f指定文件 其次 注意 最后还有一个 点
4.创建容器挂载数据卷
docker run -d -p 9898:8080 --name my_tomcat -v /home/my_tomcat/01/test:/usr/local/apache-tomcat-9.0.52/webapps/test -v /home/my_tomcat/01/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.52/logs diytomcat
5.启动测试
6.发布项目(由于做了数据卷挂载,所以在容器内可以写,在容器外也可写)
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"metadata-complete="true">
web-app>
DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Documenttitle>
head>
<body><h1>Hello Word!!!h1>
body>
html>
发布自己的镜像
DockerHub
1、地址 https://hub.docker.com/ 注册登录
2、确定可以登录
3、在服务器账户上提交自己的镜像
###### 登录
[root@localhost tomcatlos]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: liyulin1997
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
遇到问题
denied: requested access to the resource is denied
上传的镜像必须是 自己的账户名/镜像名:Tag
所以
[root@localhost ~]# docker tag b66457e179ed liyulin1997/diytomcat:1.0
[root@localhost ~]# docker push liyulin1997/diytomcat:1.0
The push refers to repository [docker.io/liyulin1997/diytomcat]
就可以上传了

分层上传
上传阿里云
- 登录阿里云Docker Registry
$ docker login --username=你叫谁肥仔呢 registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。您可以在访问凭证页面修改凭证密码。
- 从Registry中拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/liyulin1997/liyulin_test:[镜像版本号]
- 将镜像推送到Registry
$ docker login --username=你叫谁肥仔呢 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/liyulin1997/liyulin_test:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/liyulin1997/liyulin_test:[镜像版本号]
- 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。
- 示例
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB
$ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用 "docker push" 命令将该镜像推送至远程。$ docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

Dokcer 开发全流程

springBoot 微服务打包docker镜像
1、构建springboot项目
2、打包应用
3、编写dockerfile
4、发布到服务器上
打包过程
1.开发完项目之后 确认项目没有问题
打包成jar包

2.在setting 中
下载一个docker插件

3.编写Dockerfile
4.上传jar包和Dockerfile到服务器上
5.run一个容器出来
Docker 网络
1、docker 和容器是否可以ping通呢?

可以
2、容器和容器能不ping通呢?

容器ping 容器 id 可以
3、那他们是怎么ping通的呢?

evth-pair 是一对虚拟设备接口,都是成双出现,一段连结协议,一段彼此相连。

然后 容器就可以通过这个和docker相连
容器和容器间的话 就是先到dockers 然后再到目标容器 这样相连的
那我想直接用服务名ping通可以吗?
可以
用 – link 就可以连通
docker run -d -p --name tomcat02 --link tomcat01 tomcat
那 --link 做了什么呢?
–link在 tomcat02 配置文件 /etc/hosts
里面给 tomcat02 的地址 添加了一个映射 172.8.0.3 映射到了 tomcat01 或者 容器ID
好用吗? 不好用 要两个都得配 host 那咋办呢?
自定义网络
干脆就不要用 docker0 了 他不支持名字ping名字
容器互联
网络连接模式
1.bridge:桥接
2.nono:不配置网络
3.host:于宿主机共享网络
4.container:容器网络连通
创建一个自己的网络
docker network create --driver bridge --wubnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
使用自己的定义的网络创建容器
docker run -d -P --name tomcat-net-01 -net mynet tomcat
这样创建的容器 可以直接容名字ping 也可以用IP ping
那别的网络我还有办法连通吗?
网络连通
docker 网卡之间 很难
那怎么办呢 不打通呗
我只需要他的容器 所以 容器和我需要的网络打通就行
docker network connect mynet tomcat01

这个语句 直接给tomca01这个容器一个mynet的Ip
一个容器 有了两个ip 所以 两个网络都能用
不同的网络保持了集群的健康,不同的网络可以打通,提高了容器的灵活性。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

