Docker 快速上手指南

haifeiWu發表於2018-11-28

原文地址: haifeiWu和他朋友們的部落格
部落格地址:www.hchstudio.cn
歡迎轉載,轉載請註明作者及出處,謝謝!

Docker 聽其大名已久,但總是疏於操練,今天準備好好搞一下。

docker
docker

Docker 是什麼?

Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用介面。 它是目前最流行的 Linux 容器解決方案。

Docker 將應用程式與該程式的依賴,打包在一個檔案裡面。執行這個檔案,就會生成一個虛擬容器。程式在這個虛擬容器裡執行,就好像在真實的物理機上執行一樣。有了 Docker,就不用擔心環境問題。

總體來說,Docker 的介面相當簡單,使用者可以方便地建立和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的程式碼一樣。

Docker 怎麼用?

本文安裝 Docker 是基於 CentOS7 ,其他系統的小夥伴請直接轉官網的 quick start.

解除安裝舊版本的 Docker

較舊版本的 Docker 被稱為 dockerdocker-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-datalvm2

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 BootDocker 映象

執行 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
複製程式碼

完美……

docker-run
docker-run

小結

本文涉及的程式碼已經上傳到 github,感興趣的小夥伴請點github.com/haifeiWu/do…

參考連結

關注我們
關注我們

相關文章