【Docker】初级篇
- (一)Docker简介
- 【1】docker是什么
- 【2】容器与虚拟机比较
- 【3】能干嘛
- 【4】去哪下
- (二)Docker安装
- 【1】前提说明
- 【2】Docker的基本组成
- 【3】安装步骤
- (1)确定是CentOS7及以上版本
- (2)卸载旧版本
- (3)yum安装gcc相关
- (4)安装需要的软件包
- (5)设置stable镜像仓库
- (6)更新yum软件包索引
- (7)安装DOCKER CE
- (8)启动docker
- (9)测试
- (10)卸载(如果要卸载的话)
- (11)底层原理说明为什么docker要比虚拟机更快
- 【4】阿里云镜像加速
- (1)先创建文件夹
- (2)执行脚本
- (3)重新加载配置文件
- (4)重新启动docker
- (5)查看 daemon.json 是否已经生效了
- (三)Docker常用命令
- 【1】帮助启动类命令
- 【2】镜像命令
- 【3】容器命令
- (1)新建+启动容器
- (2)列出当前所有正在运行的容器
- (3)退出容器
- (4)启动已停止运行的容器
- (5)重启容器
- (6)停止容器
- (7)强制停止容器
- (8)删除已停止的容器
- (9)重要补充内容
- 【4】小总结
- (四)Docker镜像
- (五)本地镜像发布到阿里云
- (六)本地镜像发布到私有库
- (七)Docker容器数据卷
- (八)Docker常规安装简介
- 【1】安装Tomcat
- 【2】安装Mysql
- 【3】安装redis
(一)Docker简介
【1】docker是什么
环境配置相当麻烦,换一台机器,就要再重新配置一遍环境,费力费时。Docker可以从根本上解决这个问题,软件可以带环境安装,也就是说安装的时候把原始环境一模一样的复制过来。
可以把源码+配置+环境+版本等等一起打包成一个镜像文件,直接移植到新的服务器
搬家不再是打包行李叫货拉拉了,而是直接把楼搬过去

解决了运行环境和配置问题的软件容器,方便做持续继承并有助于整体发布的容器虚拟
【2】容器与虚拟机比较
(1)容器发展简史
(2)传统虚拟机技术

(3)容器虚拟化技术


(4)对比

【3】能干嘛



【4】去哪下

(二)Docker安装
【1】前提说明

【2】Docker的基本组成




(1)镜像image
java的类模板
(2)容器container
通过java类模板new出来的一个个实例对象
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0gb4UOiC-1672584048776)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1670)]](https://img-blog.csdnimg.cn/43674a0a1912434b86690dc1d126c23e.png)
(3)仓库repository
就是用来存放镜像的地方
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1URO0XBA-1672584048777)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1671)]](https://img-blog.csdnimg.cn/a3a44ee6d5ba45cc89756ddb50c0cef9.png)
在Docker的官方仓库中已经有了很多redis的镜像实例,再安装redis的时候就不用像以前一样下载、解压、安装gcc等等一系列步骤了,直接从仓库中拉取镜像即可。
(4)小总结
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hdWaJXI3-1672584048777)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1672)]](https://img-blog.csdnimg.cn/4c1dd4293d1c470d917d3dbb2789b607.png)
【3】安装步骤
(1)确定是CentOS7及以上版本
(2)卸载旧版本
(3)yum安装gcc相关
更新yum
yum -y update
更新gcc
yum -y install gcc
yum -y install gcc-c++
(4)安装需要的软件包
yum install -y yum-utils
(5)设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(6)更新yum软件包索引
yum makecache fast
(7)安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
(8)启动docker
systemctl start docker
(9)测试
ps -ef|grep docker
docker version
docker run hello-world
看到打印的那句话“Hello from Docker”说明启动成功了


(10)卸载(如果要卸载的话)
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
(11)底层原理说明为什么docker要比虚拟机更快


【4】阿里云镜像加速
登陆阿里云,点击控制台,然后点击菜单,找到“容器镜像服务”
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRAD3MdN-1672584376343)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1677)]](https://img-blog.csdnimg.cn/6dbeecf23fb4452d9048579cc5fccf85.png)
创建个人容器镜像托管服务
然后点击镜像工具,进入镜像加速器,即可看到阿里云加速器地址,把这个加速器地址配置到docker容器里
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cxemBKYp-1672584376344)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1678)]](https://img-blog.csdnimg.cn/1d2fa1d435204af2a5e761a07539740b.png)
(1)先创建文件夹
mkdir -p /etc/docker
(2)执行脚本
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hvmf8r55.mirror.aliyuncs.com"]
}
EOF
(3)重新加载配置文件
systemctl daemon-reload
(4)重新启动docker
systemctl restart docker
(5)查看 daemon.json 是否已经生效了
tail /etc/docker/daemon.json
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w2MT66LX-1672584376344)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1679)]](https://img-blog.csdnimg.cn/254fdd264b15460b8a72f53898cd0eb7.png)
(三)Docker常用命令
【1】帮助启动类命令
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动docker:systemctl enable docker
查看docker概要信息:docker info
查看docker总体帮助文档:docker --help
查看docker命令帮助文档:docker 具体命令 --help
【2】镜像命令
(1)列出本地主机上的镜像
docker images
docker images -a
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jFOZ2OMd-1672584505964)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1683)]](https://img-blog.csdnimg.cn/0a4cf82a123644d19e7de2d6b99cdbb4.png)
OPTIONS选项说明
1-REPOSITORY:表示镜像的仓库源
2-TAG:镜像的标签版本号
3-IMAGE ID:镜像id
4-CREATED:镜像创建时间
5-SIZE:镜像大小
同一个仓库源可以有多个TAG版本,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果不指定一个镜像的版本标签,例如你只使用ubuntu,docker会默认使用ubuntu:latest镜像
(2)查找镜像
docker search 某个镜像的名字
docker search --limit 5 redis
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pxU8Zatw-1672584505965)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1684)]](https://img-blog.csdnimg.cn/3734aa41ef9743fa8579739f9f47d05d.png)
(3)拉取下载镜像
docker pull 某个镜像名字
docker pull redis 6.0.8
(4)查看所占的空间
docker system df 查看镜像、容器、数据卷所占的空间
(5)删除镜像
docker rmi 某个docker虚悬镜像是什么?
docker rmi -f IMAGE ID
docker rmi -f feb5d9fea6a5
【3】容器命令
有镜像才能创建容器,这是根本前提(下载一个Ubuntu镜像演示)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gIYuRZV4-1672584650527)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1685)]](https://img-blog.csdnimg.cn/2c9cb5f3123a4127a5855ee47ee4923e.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1v6OW1R-1672584650528)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1686)]](https://img-blog.csdnimg.cn/ed4cd7ae57ec4d298aa19fa8d61ba3ce.png)
(1)新建+启动容器
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x424aeMm-1672584650529)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1687)]](https://img-blog.csdnimg.cn/cb0c3eccb5b24db3a5b4f9f4fb8abc40.png)
使用镜像ubuntu:latest以交互模式启动一个容器,在容器内执行/bin/bash命令使用shell交互
docker run -it ubuntu /bin/bash
换一种方式启动,给容器指定名字
docker run -it --name=myubuntu ubuntu bash
(2)列出当前所有正在运行的容器
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fDX5pvt6-1672584650530)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1688)]](https://img-blog.csdnimg.cn/a7fdd57d16cd4a6c95eef6e6d0139d8d.png)
docker ps -a
docker ps -n 1
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b6BkrETT-1672584650531)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1689)]](https://img-blog.csdnimg.cn/e5899d4973374ce9afc42b34d8db6f6e.png)
(3)退出容器
exit:run进去容器,exit退出,容器停止
ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止
(4)启动已停止运行的容器
docker start 容器ID或者容器名
(5)重启容器
docker restart 容器ID或者容器名
(6)停止容器
docker stop 容器ID或者容器名
(7)强制停止容器
docker kill 容器ID或者容器名
(8)删除已停止的容器
注意的是:rm删除之前必须先stop停下来,否则直接删除会报错。如果一定要强制删除正在运行的容器,可以使用 rm -f 强制删除
删容器
docker rm 容器ID
删镜像
docker rmi 容器ID
(9)重要补充内容
(1)启动守护式容器(后台服务器)
在大部分的场景下,我们希望docker的服务是在后台运行的,我们可以通过-d指定容器的后台运行模式
docker run -d 容器名
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TMpc9Soj-1672584650532)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1690)]](https://img-blog.csdnimg.cn/b115affba5934bfe9e144e0d3f3df587.png)
# 前台交互式启动(这种不可以用,直接关掉了)
docker run it redis:6.0.8
# 后台守护式启动
docker run -d redis:6.0.8
(2)查看容器日志
想看看鲸鱼背上集装箱的日志内容,例如想看看docker中redis的启动日志
docker logs 容器id
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aSd5Eg0y-1672584650532)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1691)]](https://img-blog.csdnimg.cn/d180a0c9fcd249578e1e30a19b50785e.png)
(3)查看容器内运行的进程
docker top 容器ID
(4)查看容器内部细节
docker inspect 容器ID
(5)进入正在运行的容器并以命令行交互
重新进入
// 推荐使用这个,因为退出容器终端,不会导致容器的停止
docker exec -it 容器ID /bin/bash
// 重新进入
docker attach 容器ID
attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止。
exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止。


(6)从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
(7)导入和导出容器
docker export 容器ID > 文件名.tar
【4】小总结
(四)Docker镜像
(五)本地镜像发布到阿里云
(六)本地镜像发布到私有库
(七)Docker容器数据卷
(八)Docker常规安装简介
【1】安装Tomcat
docker pull bllygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
【2】安装Mysql
(1)拉取mysql镜像
docker pull mysql:5.7
//查看当前虚拟机的3306端口是否被占用,如果有的话就用kill命令删除
ps -ef|grep mysql

(2)创建一个mysql容器,首先在根目录下创建好一个文件夹allenuse
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkznod91-1672584965824)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1696)]](https://img-blog.csdnimg.cn/a1d224d966b34bcba027c914a11e7c6a.png)
docker run -d -p 3306:3306 --privileged=true -v /allenuse/mysql/log:/var/log/mysql -v /allenuse/mysql/data:/var/lib/mysql -v /allenuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjJ1JffH-1672584965825)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1697)]](https://img-blog.csdnimg.cn/e0146720e92e44a6ad9dd0de8ce4d4c8.png)
(3)新建my.cnf,通过容器卷同步给mysql容器实例(解决中文乱码问题)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rgwKvhtl-1672584965825)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1698)]](https://img-blog.csdnimg.cn/e687c380f00e4d42bbc10f181f46f6ec.png)
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
(4)重新启动mysql容器实例再重新进入并查看字符编码
docker restart mysql
docker exec -it mysql /bin/bash
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nrb97lky-1672584965826)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1699)]](https://img-blog.csdnimg.cn/39dc67b0c423452995e7b73294ec3fef.png)
(5)新建库新建表再插入中文测试
(6)如果不小心把mysql的容器删除了如何恢复
之前已经配置了容器卷,mysql的数据已经在本地存储了,只需要重新执行创建容器的命令就行了
docker run -d -p 3306:3306 --privileged=true -v /allenuse/mysql/log:/var/log/mysql -v /allenuse/mysql/data:/var/lib/mysql -v /allenuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
【3】安装redis
(1)拉取redis镜像
docker pull redis:6.0.8
(2)在宿主机下新建目录/app/redis
mkdir -p /app/redis
(3)把一个redis.conf文件模板拷贝进/app/redis目录下
touch redis.conf
并且新建一个data文件夹

(4)创建redis容器,并且挂载容器卷
docker run -p 16379:16379 --name myredis3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
使用 docker ps 或者 docker ps -a 命令查看是否创建成功
如果启动不成功的话,可以查看一下启动日志
docker logs myredis3
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UNVYMFEV-1672584965828)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1702)]](https://img-blog.csdnimg.cn/a94f3696b3434145a5350bf8dbf42829.png)
(5)进入redis容器的终端
docker exec -it myredis3 /bin/bash
然后输入redis-cli进入redis的客户端
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JxBeYuNv-1672584965829)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1703)]](https://img-blog.csdnimg.cn/6419d12fda8a4820a1e465c5a90ad3b3.png)
(6)测试存放数据
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AZwqI4fU-1672584965829)(evernotecid://9B99E324-7852-4A64-95A3-727CD2F9CB64/appyinxiangcom/12234224/ENResource/p1704)]](https://img-blog.csdnimg.cn/bcbcc93752744febb1f605d4d47d9f50.png)












![[Python从零到壹] 六十一.图像识别及经典案例篇之基于纹理背景和聚类算法的图像分割](https://img-blog.csdnimg.cn/dbe8e250f7004ee1b3b120ae0974280c.png#pic_center)





