一 . docker概述
1 docker是什么
(1)背景:一个应用从开发、到测试、到部署、涉及环境问题,经常出现不兼容情况,导致项目跑不起来。这个问题怎么解决?
(2)一次封装,到处运行(带环境的软件打包)。
2 docker组成
(1)客户端:向服务器发起命令请求,pull search run push load…
(2)docker主机: docker服务器
(3)docker仓库:存放镜像的地方。中央仓库。镜像仓库。
(4)镜像:类似软件安装包。是一个特殊的文件系统。由很多层组成。层可以重复利用。
(5)容器:由镜像创建一个一个运行环境。例如:mysql容器。redis容器。
(6)docker守护进程:用来管理镜像和运行容器。
3 docker安装
docker 从 17.03版本之后分为 CE(Community Edition:社区版)和 EE (Enterprise Edition: 企业版),CE版本是免费的,EE版本是收费的。我们用社区版就可以。
docker的安装和卸载可以参考官方文档: https://docs.docker,com/engine/install/centos/
#确定是Cent0S7.x 及其以上版本
cat /etc/redhat-release
第一步 安装依赖
检查环境,安装gcc和g++
yum -y install gcc
yum -y install gcc-c++
第二步 安装系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
第三步 设置阿里云镜像地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
第四步 更新yum源,开始下载安装
yum makecache fast
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
第五步 启动docker
#查看docker服务的运行状态 systemctl status docker
systemctl start docker
第六步 配置国内docker的镜像地址
vim /etc/docker/daemon.json
国内配置的镜像地址
1.腾讯容器镜像服务 TCR https://cloud.tencent.com/product/tcr
2.阿里云容器镜像服务 ACR https://www.aliyun.com
3.网易 https://mirrors.163.com/
4.中国科技大学 https://mirrors.ustc.edu.cn/
第七步 重启docker
systemctl restart docker
4 docker安装
卸载命令:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
二 . docker镜像操作(命令操作)
1、搜索镜像
- 到网站 https://hub-stage.docker.com/ 搜索,镜像名称和版本号
- 使用命令 docker search 镜像关键字
2、拉取镜像
- 使用命令 docker pull 镜像名称:版本号
- 如果不指定版本号,默认最新版本
- 示例
docker pull redis
docker pull redis:7.0.11
3、查看镜像
- docker images
4、删除镜像
- docker rmi -f 镜像id
【-f是强制删除,镜像没关联容器时删除可以不使用-f,删除并不影响容器】
5、帮助命令
docker --help
docker pull --help
docker images --help 查询images命令的使用文档
三 . docker容器操作(命令操作)
1、查看容器
docker ps
docker ps -a
2、创建容器
交换式创建方式: 首次创建并登录到容器,退出容器,容器会自动停止。
- 示例:
- docker run -it --name=myredis -p 6388:6379 -v /redis-data:/data redis:7.0.10 /bin/bash
守护式创建方式:启动后不进行交互,需要交互通过docker exec登录容器,退出容器,容器不会停止运行。
- 示例
- docker run -d --name=myredis -p 6388:6379 -v /redis-data:/data redis:7.0.10
3、容器管理
- docker start 容器名/id
- docker stop 容器名/id
- docker restart 容器名称/id
4、删除容器
- docker rm -f 容器名称/id
5、进入容器内部
- docker exec -it myredis /bin/bash
6、其他命令
- docker logs 容器名称
- docker inspect 容器名称
- docker --help
- docker version
- docker cp 宿主机文件:容器名称:/路径
- docker cp 容器名称:/路径/文件 宿主机目录
7、备份和迁移
把容器保存镜像
docker commit 容器名称 镜像名称
把镜像制作tar文件
docker save -o 文件.tar 镜像名称
把tar包恢复镜像
docker load -i 文件.tar
四 . docker数据卷
- 数据卷是什么?是一个docker管理的虚拟的路径,对应真实物理的路径,用于挂载容器路径,持久化容器数据,避免容器删除数据丢失。数据卷可以被多个容器共享数据。
- 查看数据卷 : docker volume ls
- 创建数据卷: docker volume create 名字
- 查看数据卷信息:docker volume inspect 名称
- 删除数据卷:docker volume rm 名字
五 . Portainer工具
搜索portainer
docker search portainer
拉取镜像
docker pull portainer/portainer
启动服务
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
六 . Spring Boot项目部署
手动SpringBoot容器部署:
1、创建mysql容器 8.0.30
docker run -di --name mysql -p 3306:3306 -v mysql_data:/var/lib/mysql -v mysql_conf:/etc/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=1234 mysql:8.0.30
①不要登录容器insert中文,有乱码问题
②mysql升级到8连接认证规则发生变化,低版本客户端连接不上(要么升级客户端,要么依然使用之前认证规则)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
2、将springboot项目打包(maven打包插件)
3、编写dockerfile文件
将ebuy-docker-1.0-SNAPSHOT.jar包上传到linux某个目录下,和dockerfile文件放在一起
4.进入dockerfile所在目录,执行构建镜像命令
docker build -t ebuy-docker:v3.0 .
七 . Maven的docker插件
手动SpringBoot容器部署:
- 第一步 在springboot项目pom.xml文件引入插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase(阶段)上。也就是说,用户只需执行mvn package,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定生成的镜像名-->
<imageName>${project.artifactId}</imageName>
<!--指定标签,也就是版本号,可以自定义-->
<imageTags>
<imageTag>v2.0</imageTag>
</imageTags>
<!--指定远程 docker api地址 也就是服务器ip+docker的端口号-->
<dockerHost>http://192.168.6.100:2375</dockerHost>
<!-- 指定 dockerfile 路径-->
<dockerDirectory>${project.basedir}</dockerDirectory>
<!-- 是否跳过docker构建 -->
<!-- <skipdockerBuild>false</skipdockerBuild>-->
</configuration>
</plugin>
- 第二步 docker服务端开启远程访问
#修改该文件
vim /lib/systemd/system/docker.service
#找到ExecStart行,修改成如下内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
systemctl daemon-reload #重启守护进程
systemctl restart docker #重启docker
注意防火墙。防火墙修改,docker重启。
- 第三步 创建dockerfile文件,和pom.xml在同一个目录下
FROM centos7-jdk17
MAINTAINER atguigu
EXPOSE 8081
ADD target/ebuy-docker-1.0-SNAPSHOT.jar /ebuy-docker-1.0-SNAPSHOT.jar
WORKDIR /
ENTRYPOINT ["java" , "-jar" , "ebuy-docker-1.0-SNAPSHOT.jar"]
- 第四步 使用命令进行打包和镜像制作,自动完成
maven package
在打包过程中,执行了docker build操作,将项目制作成镜像,上传远程docker服务器中。