原文地址: haifeiWu和他朋友們的部落格
部落格地址:www.hchstudio.cn
歡迎轉載,轉載請註明作者及出處,謝謝!
Docker 聽其大名已久,但總是疏於操練,今天準備好好搞一下。
Docker
是什麼?
Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用介面。 它是目前最流行的 Linux 容器解決方案。
Docker 將應用程式與該程式的依賴,打包在一個檔案裡面。執行這個檔案,就會生成一個虛擬容器。程式在這個虛擬容器裡執行,就好像在真實的物理機上執行一樣。有了 Docker,就不用擔心環境問題。
總體來說,Docker 的介面相當簡單,使用者可以方便地建立和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的程式碼一樣。
Docker
怎麼用?
本文安裝 Docker
是基於 CentOS7
,其他系統的小夥伴請直接轉官網的 quick start.
解除安裝舊版本的 Docker
較舊版本的 Docker
被稱為 docker
或 docker-engine
。 如果已安裝這些,請解除安裝它們以及相關的依賴項。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
複製程式碼
安裝 Docker CE
您可以根據需要以不同方式安裝 Docker CE
:
-
大多數使用者設定
Docker
的儲存庫並從中進行安裝,以便於安裝和升級任務。 也是Docker
官方推薦的方法。 -
有些使用者下載
RPM
軟體包並手動安裝並完全手動管理升級。 這在諸如在沒有訪問網際網路的氣隙系統上安裝Docker
的情況下非常有用。 -
在測試和開發環境中,一些使用者選擇使用自動便捷指令碼來安裝
Docker
。
本文采用的是第一種方法 :
在新主機上首次安裝 Docker CE
之前,需要設定 Docker
儲存庫。 之後,您可以 從儲存庫安裝和更新 Docker
。
設定 REPOSITORY
1, 安裝所需的包。 yum-utils
提供 yum-config-manager
實用程式,devicemapper
儲存驅動程式需要 device-mapper-persistent-data
和 lvm2
。
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
複製程式碼
2, 使用以下命令設定穩定儲存庫。
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
複製程式碼
安裝 Docker CE
1, 安裝最新版本的Docker CE
,或轉到下一步安裝特定版本
sudo yum install docker-ce
複製程式碼
2, 要安裝特定版本的Docker CE
,請列出repo
中的可用版本,然後選擇並安裝:
a. 列出並對您的倉庫中可用的版本進行排序。 此示例按版本號對結果進行排序,從最高到最低,並被截斷:
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 18.09.0.ce-1.el7.centos docker-ce-stable
複製程式碼
返回的列表取決於啟用的儲存庫,並且特定於您的CentOS
版本(在此示例中以.el7
字尾表示)。
b. 通過其完全限定的包名稱安裝特定版本,包名稱(docker-ce
)加上版本字串(第2列)直到第一個連字元,用連字元( - )分隔,例如,docker-ce-18.03.0.ce
。
sudo yum install docker-ce-<VERSION STRING>
複製程式碼
Docker
已安裝但尚未啟動。 已建立 docker
組,但未向該組新增任何使用者。
3, 啟動 Docker
sudo systemctl start docker
複製程式碼
4, 通過啟動 hello-world
映象來驗證 Docker
安裝並啟動成功
sudo docker run hello-world
複製程式碼
上面的命令下載測試映像並在容器中執行它。 當容器執行時,它會列印一條資訊性訊息並退出。
解除安裝 Docker CE
1, 解除安裝 docker 的安裝包
sudo yum remove docker-ce
複製程式碼
2, 主機上的影象,容器,卷或自定義配置檔案不會自動刪除。 要刪除所有影象,容器和卷:
sudo rm -rf /var/lib/docker
複製程式碼
Maven 構建 Spring Boot 的 Docker 映象
構建專案,修改配置
通過 start.spring.io/ 構建 Spring Boot 工程。
修改 pom 檔案
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- tag::plugin[] -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!--suppress UnresolvedMavenProperty -->
<repository>${docker.image.prefix}/${project.artifactId}</repository>
</configuration>
</plugin>
<!-- end::plugin[] -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<!--<version>0.4.12</version>-->
<configuration>
<!-- 注意imageName一定要是符合正則[a-z0-9-_.]的,否則構建不會成功 -->
<!-- 詳見:https://github.com/spotify/docker-maven-plugin Invalid repository name ... only [a-z0-9-_.] are allowed-->
<dockerHost>http://127.0.0.1:2375</dockerHost>
<imageName>docker-springboot</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
複製程式碼
需要注意的是 <dockerHost>http://127.0.0.1:2375</dockerHost>
,如果本地有安裝 docker
,直接只用本地預設即可,若未安裝,需要是遠端的 docker
服務時需要在伺服器配置 docker
,具體操作請移步 Docker 遠端連線。
新增 Dockerfile
注意 com.whforever.dockerspringboot.DockerSpringbootApplication
是指 Spring Boot
專案的程式碼入口。
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.whforever.dockerspringboot.DockerSpringbootApplication"]
複製程式碼
構建 構建 Spring Boot
的 Docker
映象
執行 maven
命令,執行構建
mvn clean package docker:build
複製程式碼
執行完成之後我們就可以在遠端看到剛構建好的 Spring Boot
的映象。
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5f2c7e4e7c1 docker-springboot:latest "java -jar /docker-s…" 22 hours ago Up 22 hours 0.0.0.0:8080->8080/tcp agitated_kilby
複製程式碼
啟動 docker 映象
docker run -p 8080:8080 docker-springboot
複製程式碼
完美……
小結
本文涉及的程式碼已經上傳到 github
,感興趣的小夥伴請點github.com/haifeiWu/do…