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 舊名稱 新名稱