Docker环境的安装
本文的操作均基于CentOS操作系统
- 卸载本地可能存在的旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装本地docker仓库
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 安装本地仓库配置
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装Docker Engine-Community
sudo yum install docker-ce docker-ce-cli containerd.io
- 启动docker
sudo systemctl start docker
- 测试是否安装成功
docker安装好后有一个默认的hello-world项目镜像,可以尝试启动测试环境是否安装好了
sudo docker run hello-world
Spring Boot项目 Jar包生成
- 将pom.xml中的打包方式设置成为maven
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- 进行打包,点击maven-package进行打包
- 打包完成后在target目录下可以看到项目打成的jar包
Dockerfile编写
- 编写Dockerfile之前需要了解一些常用的语法
- FROM :指使用的Base Image是什么,如
FROM java:8
,表示使用安装了JDK8的镜像作为基础镜像 - RUN:执行代码 每RUN一次就生成一层 。为了避免无用分层,建议合并多条指令执行,用&&连接
- WORKDIR:docker容器中的当前工作目录,相当于在docker容器中执行cd操作
- EXPOSE:声明暴露端口
- ADD:添加本地文件到docker容器中并解压: ADD file dockerDir
- COPY:添加本地文件到docker容器中: COPY file dockerDir
- ENTRYPOINT:设置容器启动时运行命令
- 编写部署Java Jar包的Dockerfile
# 基础镜像使用java
FROM java:8
# 设置当前工作目录(容器中)
WORKDIR /usr/app/
# 将jar包添加到容器中
COPY basedemo-0.0.1-SNAPSHOT.jar .
# 声明需要暴露的端口(与jar包中的一致)
EXPOSE 8080
# 运行jar包
ENTRYPOINT ["java", "-jar", "basedemo-0.0.1-SNAPSHOT.jar"]
- 在服务器上创建一个目录用于存放部署项目的jar包和Dockerfile
如/root/docker/demo/
目录
在目录下创建Dockerfile文件,编写上述的内容
将Jar包上传到此目录
Spring Boot项目部署
- 构建镜像
docker build -t demo .
-t 后面接创建的镜像的名字,这里取的是demo
一定要注意最后的.
,表示运行当前目录的Dockerfile,一定不能少
构建成功后可以通过docker images
查看本地的镜像
2. 启动容器
docker run -it -d -p 8081:8080 --name demopro demo bash
启动一个容器,容器名为demopro,将容器的8080端口映射到宿主机8081端口
启动成功后通过docker ps -a
查看容器
3. 修改运行的Jar包后重新部署
代码修改后重新部署Jar包时不用重新构建镜像,因为是通过读取宿主机的Jar包进行启动的,只要保持Jar包名称一致,替换掉Jar包之后
执行docker restart 容器名
就可以重启容器
可能会用到的Docker指令汇总
查看本地镜像
docker images
查看本地容器
docker ps -a
查看镜像/容器信息
docker inspect 镜像名
进入运行中的容器
docker exec -it 容器名 bash
停止一个容器
docker stop 容器名/容器编号前缀
启动docker服务
systemctl start docker
重启docker服务
systemctl restart docker
关闭docker服务
systemctl stop docker
拉取一个镜像
docker pull 镜像名
删除镜像
docker rmi 镜像名
删除容器
docker rm 容器名/容器编号前缀
删除所有容器
docker rm $(docker container ls -aq)
删除所有停止的容器
docker rm $(docker container ls -f "status=exited" -q)
容器打包成镜像
docker commit 容器名称 新镜像名称
修改镜像名称
docker tag 旧名称 新名称