(1)背景:一个应用从开发、到测试、到部署、涉及环境问题,经常出现不兼容情况,导致项目跑不起来。这个问题怎么解决?
(2)一次封装,到处运行(带环境的软件打包)。
https://www.docker.com/
(1)客户端:向服务器发起命令请求,pull search run push load…
(2)docker主机: docker服务器
(3)docker仓库:存放镜像的地方。中央仓库。镜像仓库。
(4)镜像:类似软件安装包。是一个特殊的文件系统。由很多层组成。层可以重复利用。
(5)容器:由镜像创建一个一个运行环境。例如:mysql容器。redis容器。
(6)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 makecache fast
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#查看docker服务的运行状态 systemctl status docker
systemctl start docker
国内配置的镜像地址
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/
systemctl restart docker
卸载命令:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
docker pull redis
docker pull redis:7.0.11
【-f是强制删除,镜像没关联容器时删除可以不使用-f,删除并不影响容器】
docker --help
docker pull --help
docker images --help 查询images命令的使用文档
docker ps
docker ps -a
交换式创建方式: 首次创建并登录到容器,退出容器,容器会自动停止。
守护式创建方式:启动后不进行交互,需要交互通过docker exec登录容器,退出容器,容器不会停止运行。
把容器保存镜像
docker commit 容器名称 镜像名称
把镜像制作tar文件
docker save -o 文件.tar 镜像名称
把tar包恢复镜像
docker load -i 文件.tar
搜索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
手动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 .
手动SpringBoot容器部署:
<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>
#修改该文件
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重启。
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服务器中。