Docker基础入门

参考:

如何在docker容器中安装一些常用工具

1、Docker概述

1.1、参考资料

目的:开发部署上线,一套流程做完.
官网:https://www.docker.com
文档地址:https://docs.docker.com
仓库地址:https://hub.docker.com

1.2、Docker优点

容器化之后,开发测试环境都是高度一致的;
更高效的计算资源利用;

2、Docker的安装

2.1、Docker的基本组成

![在这里插入图片描述](https://img-blog.csdnimg.cn/2021010309303166.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDAyMjk4MA==,size_16,color_FFFFFF,t_7
镜像(Image)
可理解为存放应用的地方;
容器(Container):
可理解为一个轻量级的沙箱,是一个镜像运行的实例;
仓库 (Repository):
是集中存放镜像文件的场所,仓库范围公开和私有两种;

2.2、安装Docker

参考博文:Docker安装

2.3、配置案例云镜像加速

2.4、Docker run流程分析

在这里插入图片描述

2.5、Docker为什么比VM快

1、Docker有着比虚拟机更少的抽象层;
2、Docker 利用宿主机的内核,vm需要是Guest OS
在这里插入图片描述
当心加一个容器的时候,docker不需要向虚拟机一样重新加载一个系统内核,而虚拟机是需要加载Guest OS,十分钟级的;而docker则是利用宿主机的操作系统,省了复杂的过程,秒级别的!

3、 Docker常用的命令

3.1、帮助命令

docker version	    # 查看版本
docker info			# 显示docker系统信息,包括镜像和容器的数量
docker 命令 --help  # 帮助命令

官方命令文档

3.2、镜像命令

docker images 查看所有本地主机上的镜像
在这里插入图片描述
docker search 搜索镜像

docker search --filter=stars=4 php // 搜索收藏数超过4关键词包括php的镜像
docker search --filter=is-official=true nginx // 搜索官方带nginx关键字的镜像

在这里插入图片描述
docker pull 下载镜像
在这里插入图片描述
docker rmi 删除镜像

docker rmi -f 容器ID	# 删除指定的容器
docker rmi -f 容器ID 容器ID 容器ID	# 删除多个容器
docker rmi -f $(docker images -aq) 	# 删除所有镜像;$()意思是把$()中的值作为参数传过去

导出容器:

docker export -o tom.tar 容器ID

导入容器:

docker import .\tom.tar tom2:1.2

3.3、 容器命令

说明:我们有了镜像才可以创建容器

docker run 新建容器并启动
在这里插入图片描述
列出所有运行的容器:
在这里插入图片描述
退出容器

exit	# 容器直接停止并退出
Ctrl + p + q	# 容器不停止退出

删除容器

docker rm 容器的ID	# 删除制定的容器,不能删除正在运行的容器,加-f 可强制删除
docker rm -f $(docker ps -aq)	# 删除所有的容器

启动|重启|停止|删除 容器的操作

docker start | restart | stop | kill 容器的ID

3.4、常用的其它命令

查看日志

docker logs -tf --tail 10 容器的ID
-tf	# 显示日志
--tail number	# 显示日志条数

查看容器的进程信息

docker top 容器的ID

查看镜像的源数据

docker inspect 容器的ID

进入当前正在运行的容器

# 第一种方法:进入容器,开启一个新的终端
docker exec -it 容器的ID bashshell
# 第二种方法:进入当前正在执行终端,不会启动新的终端
docker attach 容器的ID

从容器内拷贝文件到主机上

# 在容器外部操作
docker cp 容器ID:容器内路径 目的主机路径

3.5、常见的问题

1、docker run -d centos 启动的镜像,docker ps 发现centos是停止的
原因:docker 使用后台运行,必须要有一个前台的进程,docker如果发现没有应用,就会立即停止。

3.6、命令小结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.7、安装elasticsearch

问题:不限制内存的话会占用很大的内存

docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e  ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
# -e  ES_JAVA_OPTS="-Xms64m -Xmx512m" 是限制内存的大小,最小64M,最大512M

3.8、可视化
portainer
rancher

4、Docker镜像加载原理

4.1、镜像原理

docker的镜像实际上是由一层一层的文件体统组成。

4.2、commit 镜像

提交一个自己的镜像

docker commit 提交容器成为一个新的副本

# 该命令和git类似
docker commit -m="提交的描述信息" -a=“作者” 容器ID 新镜像名:[TAG]

该镜像就好比是快照。

5、容器数据卷

5.1、 概念

服务器与容器之间可以实现数据同步。
将容器内的目录,挂载在到服务器上。
就是为了实现容器的持久化和同步操作。

5.2、使用数据卷

方法一:使用命令来挂载 -v

docker run -it -v 主机目录:容器内目录 centos /bin/bash

查看容器挂载的情况:

docker inspect 容器ID

在这里插入图片描述
在这里插入图片描述
该过程是一个双向绑定的过程,容器在停止的时候也同步。

5.3、实战Mysql数据同步

# 过去镜像
docker pull mysql:5.7

# 运行容器,需要做数据挂载;需要配置密码
# 启动mysql
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
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名称
MYSQL_ROOT_PASSWORD mysql设置密码

navicate 远程连接Mysql:
在这里插入图片描述

5.4、具名和匿名挂载

# 匿名挂载,挂载的文件名称不好分别
-v 容器内陆路径

# 具名挂载
-v 卷名:容器内路径

# 指定路径挂载
-v /宿主机路径:容器内路径

在这里插入图片描述

5.5、数据卷容器

使用场景:多个mysql同步数据

6、Dockerfile

6.1、初识Dockerfile

Dockerfile 就是用脚本来构建docker的镜像;

1、首先得创建一个Dockerfile文件,建议使用dockerfile作为名称;
2、构建镜像

docker build -f dockerfile文件路径 -t centos .

-f	dockerfile文件路径
-t	镜像的名称标识,版本号

3、查看卷挂载的情况
在这里插入图片描述
假设构建镜像的时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径

6.2、数据卷容器

在这里插入图片描述

# docker01
docker run -it --name docker01 centos

# docker02
docker run -it --name docker02 --volumes-from docker01 centos
--volumes-from	有继承docker01的意思,docker01也叫作数据卷容器

# docker03
decker run - it --name docker03 --volumes-from docker01 centos

通过--volumes-from 实现容器共享;删除docker01 其它的数据都还在,只要有继承者数据就好在可以实现共享,当共享到宿主机上,数据就可以永久保存了。

应用场景:
多个mysql实现数据共享
在这里插入图片描述

6.3、Dockerfile基础知识

6.3.1、Dockerfile构建基础知识

1、每个保留关键(指令)都必须是大写字母;
2、执行顺序从上到下顺序执行
3、# 表示注释
4、每一个指令都回创建提交一个新的镜像层,并提交。
Dockerfile 是面向开发的,逐渐成为企业交付的标准。

6.3.2、Dockerfile的指令

P25

在这里插入图片描述
在这里插入图片描述

#查看docker的构建过程:
docker history 容器的ID

6.3.3、CMD 与 ENRTYPOINT 区别

CMD 在执行 docker run 后追的命令 CMD中的命令会被覆盖;
ENRTYPOINT 在执行 docker run 后追的命令会追加;

6.4、发布Dockerfile镜像

6.4.1、发布到Dockerhub

1、地址:hub.docker.com
2、docker login -u 用户名
3、docker push 镜像名称:版本号

6.4.2、发布到阿里云镜像上

1、登录阿里云
2、找到容器镜像服务
3、创建命名空间
4、创建镜像仓库
5、点击容器查看信息,阿里云有明确的上传镜像的方式

6.5、小结

在这里插入图片描述

7、Docker 网络

原理:我们每启动一个docker容器,docker就会给docker容器分配一个ip,我我只要安装了docker,就会有一个网卡docker0;桥接模式,使用的技术是evth-pair技术。
evth-pair 就是一对虚拟设备接口,他们收拾成对出现的,一段连着协议,一段彼此相连。
evth-pair 充当一个桥梁,连接各种虚拟网络设备。
模型图:
在这里插入图片描述
结论:tomcat01 和 tomcat02 是公用的一个路由器,docker0
所有的容器不指定网络的情况下,都是docker0,docker会给我们的容器分配一个默认的可用的IP。
Docker中所有的网络都是虚拟的。虚拟的转发效率高,内网传递!

7.4.1、–link

用名字就可以进行容器间的访问,解决网络连接的问题。

docker run -d -p --name tomcat02 --link tomcat01 tomcat

原理:就是在/etc/hosts 配置了绑定关系
–link 方式不建议使用,方式不方便

7.4.2、自定义网络

7.4.2.1、创建自定义网络

容器互联

docker network [option]
rm 移除网络
ls 查看所有的网络
create 创建网络,使用docker network create --help 查看
	docker network create --driver bridge --subnet 192.168.0.00/16 --gateway 192.168.0.1 mynet
	--driver bridge 网络模式
	--subnet 子网范围
	--gateway 网关
inspect 查看网络配置

网络模式:
bridge :桥接模式 (默认使用)
none:不配置网络
host:和宿主机共享网络
container:容器网络连通(很少用,局限很大)

容器配置网络:

# 直接启动默认使用bridge
docker run --net bridge

自定义网络可以相互ping同,访问;不同的集群使用不同的网络,可以保证各集群的健康,但是各网络之间也是可以打通。

7.4.2.2、打通不同网段的网络

在这里插入图片描述

docker network connect mynet tomcat01
# 查看
docker network inspect mynet

在这里插入图片描述
结论:假设要跨网络操作别人,就要使用docker network connect 连通

7.4.2.3、实战:部署Redis集群

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值