肥仔学习日记----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

run的运行流程

底层原理

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]

就可以上传了
在这里插入图片描述
分层上传

上传阿里云

  1. 登录阿里云Docker Registry
$ docker login --username=你叫谁肥仔呢 registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。您可以在访问凭证页面修改凭证密码。
  1. 从Registry中拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/liyulin1997/liyulin_test:[镜像版本号]
  1. 将镜像推送到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:[镜像版本号]
  1. 选择合适的镜像仓库地址
    从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。

  1. 示例
    使用"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 所以 两个网络都能用

不同的网络保持了集群的健康,不同的网络可以打通,提高了容器的灵活性。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部