Docker

Docker的使用

docker安装

https://www.runoob.com/docker/centos-docker-install.html

docker启动

:systemctl start docker

显示版本信息:docker version

配置Linux网络地址

\1. 设置桥接模式

img

2.修改网络配置文件,ipv4地址与本机在同一网段下

img

img

img

3.使用本机ping虚拟机地址进行联通测试,(防火墙原因不能用虚拟机ping本机)

启动镜像测试

测试启动docker容器:docker run hello-world

显示所有容器:docker images

docker原理

img

img

为什么Docker比VM快?

\1. Docker有着比虚拟机更少的抽象层

\2. Docker利用的是宿主机的内核,vm需要是Guest Os

所以,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guesrt OS,分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级。

docker镜像操作

搜索MySQL的镜像:docker search mysql

添加筛选条件:docker search mysql --filter=starts=5000

下载镜像:

img

img

Ps:docker镜像下载使用分层下载,不同版本的相同层不会重复下载,极大的节省内存

Docker删除镜像

img

docker history:查看容器构建历史

docker容器操作

容器相关命令

docker inspect 容器id

Dockers run mysql:运行容器

Dockers run -it mysql:运行并进入容器

Docker ps:列出正在运行的容器

Docker ps -a:列出所有容器,包括运行过的历史

Docker ps -a -n=1:列出最近运行过的1条容器

Docker ps -aq: 只显示编号

退出并关闭容器:exit

退出并不关闭容器:ctrl+p+q

Docker start 容器id: 启动容器

Docker restart 容器id:重启容器

Docker stop容器id:停止容器

Docker kill 容器id:强制停止当前容器

*Docker容器其他常用命令:*

img

img

查看容器进程:docker top 运行容器id

查看容器的元数据:docker inspect 运行容器id

进入正在运行的容器:docker attach 运行容器id

拷贝容器内文件到宿主机:docker cp 容器id:/home/test.java /home

Docker分层原理

image-20210517095436652

提交镜像

image-20210517095942662

linux启动jar包

Linux 运行jar包命令如下:

方式一:

Java -jar shareniu.jar

特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出

那如何让窗口不锁定?

方式二

java -jar shareniu.jar &

&代表在后台运行。

特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

继续改进,如何让窗口关闭时,程序仍然运行?

方式三

nohup java -jar shareniu.jar &

nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行

当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

方式四

nohup java -jar shareniu.jar >temp.txt &

解释下 >temp.txt

command >out.file

command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。

可通过jobs命令查看后台运行任务

jobs

那么就会列出所有后台执行的作业,并且每个作业前面都有个编号。

如果想将某个作业调回前台控制,只需要 fg + 编号即可。

fg 23

查看某端口占用的线程的pid

netstat -nlp |grep :9181

如果忘了进程号,可以通过如下命令来查看当前运行的jar包程序进程号

ps -ef|grep xxx.jar

或者 ps -aux | grep java

//关闭进程

kill -s 9 24204

24204代表上一步查出的进程ID

启动一个mysql容器

image-20210517142321564

linux防火墙操作

1.查看防火墙状态

systemctl status firewalld

2.开启防火墙

systemctl start firewalld

3.关闭防火墙

systemctl stop firewalld

4.查询放行的端口

firewall-cmd --zone=public --list-ports

5.新增放行端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent

6.切记要刷新

firewall-cmd --reload

数据卷挂载方式

image-20210517170311814

image-20210517170451419

数据卷容器(备份)

docker run  -it --volumes-from my01 --name my02 centos

当容器my01有数据卷共享时,my02会继承my01的数据卷,删除my01时,my02依旧存在,相当于一个备份

DockerFile

Dockerfile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品

Docker 容器:容器就是镜像运行起来,提供服务

image-20210518110139264

MAINTAINER 镜像是谁写的,姓名+邮箱

CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令

COPY 类似ADD命令,将我们的文件拷贝到镜像中
ENV 构建的时候设置环境变量(设置mysql变量名密码等)

利用dockerfile构建镜像:

docker build -f 文件名 -t 镜像名:[tag] .

上传镜像到阿里云

登录阿里云

$ sudo docker login --username=计超大魔王 registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

拉取镜像

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/qjcimages/myimages:[镜像版本号]

推送镜像到远端

$ sudo docker login --username=计超大魔王 registry.cn-hangzhou.aliyuncs.com$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/qjcimages/myimages:[镜像版本号]$ sudo docker push registry.cn-hangzhou.aliyuncs.com/qjcimages/myimages:[镜像版本号]

Docker网络相关

查看网卡信息:

ip addr

我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0(桥接模式,使用的技术是evth-pair技术!)

# 我们发现这个容器带来网卡,都是一对对的
# evth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连
# 正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备的

查看一个容器的ip

docker exec -it f6 ip addr

用一个容器ping另一个容器

总结:宿主机ping容器(可ping通)

​ 容器ping容器(可ping通)

image-20210519111021423

为什么不推荐使用 --link模式进行容器互联

假设有一个业务场景,假设有一个微服务,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以用容器名来访问容器。

dockr已经不推荐使用--link了
--link就是我们在hosts配置中增加了一个ip地址
docker0问题:不支持容器名连接访问

自定义网络

bridge:桥接 docker(默认)

none:不配置网络

host:和宿主机共享网络

container:容器网络联通(用的少,局限大)

docker network ls # 查看docker ip网络

自定义网络解决了默认的docker0无法通过docker名互相ping的弊端

1.创建自定义网络

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

2.启动两个网络连接到我们自定义的网络中来

 docker run -d -P --name tomcat01 --net mynet tomcat

 docker run -d -P --name tomcat02 --net mynet tomcat

3.自定义网络中的容器可以通过容器名互相ping

docker exec -it 75f97889085e ping docker01

**PS:**假设需要跨网络进行连通,需要使用

docker network connect 网络名 容器名

SpringBoot打包Docker镜像

1.在idea中下载docker插件

2.maven中clean、package生成jar包

3.编写Dockerfile文件

# 指定基础镜像
FROM java:8
# 拷贝当前目录下的jar包到镜像中
COPY *.jar /app.jar
# 输出一下端口信息
CMD ["--server.port=9999"]
# 指定暴露端口
EXPOSE 9999
# 启动jar包
ENTRYPOINT ["java","-jar","/app.jar"]

4.服务器中构建镜像即可

docker build -t [镜像名]:[版本号].

后续

如果有很多镜像应该怎么办?

docker compose

docker swarm k8s

CI/CD之jenkins

路漫漫其修远兮…

本科计算机bi-ye-she-ji辅导,远程安装运行+部署,欢迎各位小伙伴打扰~企鹅号:298-150-5753

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值