Docker

目錄

Docker 簡介

架構

安裝

Centos安裝Docker

Ubuntu安裝Docker

常用命令

使用 Dockerfile 定製鏡像

例:使用Dockerfile構建SpringBoot應用鏡像

Docker Hub

私有倉庫

數據卷

數據卷容器

備份

恢復

Docker Compose

安裝Compose

使用步驟

Compose 命令

Compose 模板文件

例:使用Docker Compose 部署Spring Boot應用


Docker 簡介

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。使用Docker,可更快地打包、測試以及部署應用程序,並可以縮短從編寫到部署運行代碼的週期。

架構

Docker daemon(守護進程):運行在宿主機(DOCKER_HOST)的後臺進程。可通過Docker客戶端與之通信。

Client(客戶端):Docker的用戶界面,接受用戶命令和配置標識,並與Docker daemon通信。

Images(鏡像):創建Docker容器的說明,相當於系統安裝光盤,使用它可以運行鏡像中的程序。

Container(容器):鏡像的可運行實例,通過Docker API或者CLI命令來啓停、移動和刪除容器等。

Register(註冊中心):Docker倉庫存放的位置,每個倉庫可包含多個Docker標籤,每個標籤對應一個Docker鏡像。默認的Docker Register是Docker Hub,上面存放着大量優秀的鏡像,可用Docker命令下載並使用。

安裝

Centos安裝Docker

(1)移除舊版本Docker軟件包

sudo yum -y remove docker

(2)安裝yum-utils

sudo yum install -y yum-utils

(3)添加Docker的

sudo yum-config-manager \
    --add-repo \
    https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo

(4)更新Yum包索引

sudo yum makecache fast

(5)安裝最新版本Docker

sudo yum -y install docker-engine

如果想安裝指定版本Docker,執行以下命令列出可用Docker版本

yum list docker-engine.x86_64  --showduplicates | sort -r

然後執行安裝操作

sudo yum -y install docker-engine-<VERSION>

(6)啓動Docker

sudo systemctl start docker

(7)如果鏡像加載緩慢,可配置國內鏡像源,編輯daemon.json文件

vim /etc/docker/daemon.json

加入內容

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

(8)使鏡像配置生效並重啓Docker服務

sudo systemctl daemon-reload
sudo systemctl restart docker.service

(9)驗證是否安裝正確

docker run hello-world

(10)查看版本

docker version

Ubuntu安裝Docker

(1)更新apt包索引

sudo apt-get update

(2)安裝HTTPS和CA證書使得apt能夠通過HTTPS使用倉庫

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

(3)添加官方GPG密鑰:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

(4)添加stable倉庫

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

(5)更新apt包索引

sudo apt-get update

(6)安裝最新版本Docker

sudo apt-get install docker-ce

(7)啓動Docker

sudo systemctl start docker

(8)驗證是否安裝正確

docker run hello-world

(9)查看版本

docker version

常用命令

鏡像常用命令

(1)搜索鏡像

docker search <關鍵詞>

(2)下載鏡像

docker pull <鏡像名稱>

(3)列出已下載鏡像

docker images

(4)列出鏡像詳細信息

docker inspect <鏡像名稱>

(5)查看鏡像歷史

docker history <鏡像名稱>

(6)刪除本地鏡像

docker rmi <鏡像名稱>

(7)刪除所有鏡像

docker rmi -f $(docker images)

(8)存出鏡像

docker save -o <存出文件名稱> <待存出鏡像名稱>

(9)載入鏡像

docker load --input <待載入鏡像文件名稱>

(10)上傳鏡像

docker pull <鏡像名稱>

(11)將容器保存爲鏡像

docker commit [選項] <容器ID或容器名> [<倉庫名>[:<標籤>]]

容器常用命令

(1)新建並啓動容器

docker run

參數選擇:

-d:後臺運行

-P:隨機端映射

-p:指定端口映射

-network:指定網絡模式。四種模式:(1)bridge:連接到默認的網橋,默認模式。(2)host:使用宿主機的網絡。(3)container:NAME_or_ID:讓新建的容器使用使用已有容器的網絡配置。(4)none:不配置該容器的網絡。

(2)列出容器

docker ps

(3)停止容器

docker stop <容器名稱>/<容器ID>

(4)強制停止容器

docker kill <容器名稱>/<容器ID>

(5)啓動已停止容器

docker start <容器名稱>/<容器ID>

(6)重啓容器

docker restart

(7)進入容器

docker attach <容器名稱>/<容器ID>

(8)刪除容器

docker rm <容器名稱>/<容器ID>

(9)創建容器

docker create <容器名稱>/<容器ID>

(10)導出容器

docker export -o <導出文件名稱> <待導出容器名稱>/<待導出容器ID>

(11)導入容器

docker import  <導入文件名稱> - <倉庫名稱/標籤名稱>

使用 Dockerfile 定製鏡像

Dockerfile 是一個文本文件,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。

在一個空白目錄中,建立一個文本文件,並命名爲 Dockerfile

$ mkdir mynginx
$ cd mynginx
$ touch Dockerfile

內容格式爲

FROM <指定的基礎鏡像>
RUN <待執行的命令行命令>

使用了docker build 命令進行鏡像構建

docker build [選項] <上下文路徑/URL/->

Dockerfile 指令除了FROM和RUN之外,還有其它指令

COPY 複製文件

COPY <源路徑> <目標路徑>

目標路徑> 可以是容器內的絕對路徑,也可以是相對於工作目錄的相對路徑(工作目錄可以用 WORKDIR 指令來指定)。目標路徑不需要事先創建,如果目錄不存在會在複製文件前先行創建缺失目錄。COPY會保留源文件的各種元數據。

ADD 更高級的複製文件

ADD <源路徑> <目標路徑>

ADD 指令和 COPY 的格式和性質基本一致。但是在 COPY 基礎上增加了一些功能。比如源文件可以是一個URL,而且如果源文件是一個壓縮包,還會自動將其解壓。

CMD 容器啓動命令

CMD <命令>

容器即進程,那麼在啓動容器的時候,需要指定所運行的程序及參數。CMD指令用於指定默認的容器主進程的啓動命令。

ENTRYPOINT 入口點

ENTRYPOINT <命令>

與CMD一樣,都是指定容器程序及參數,差異在於CMD指令指定的容器啓動時命令可以被docker run指定的命令覆蓋,而ENTRYPOINT指令指定的命令不能被覆蓋,而是將docker run指定的參數當做ENTRYPOINT指定命令的參數。

ENV 設置環境變量

ENV <key> <value>

這個指令很簡單,就是設置環境變量而已

ARG 構建參數

ARG <參數名>[=<默認值>]

構建參數和 ENV 的效果一樣,都是設置環境變量。所不同的是, ARG 所設置的構建環境的環境變量,在將來容器運行時是不會存在這些環境變量的。

VOLUME 定義匿名卷

VOLUME ["<路徑1>", "<路徑2>"...]

容器運行時應該儘量保持容器存儲層不發生寫操作,對於數據庫類需要保存動態數據的應用,其數據庫文件應該保存於卷(volume)中,爲了防止運行時用戶忘記將動態文件所保存目錄掛載爲卷,在 Dockerfile 中,我們可以事先指定某些目錄掛載爲匿名卷,這樣在運行時如果用戶不指定掛載,其應用也可以正常運行,不會向容器存儲層寫入大量數據。

EXPOSE 聲明端口

EXPOSE <端口1> [<端口2>...]

EXPOSE 指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會因爲這個聲明應用就會開啓這個端口的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射;另一個用處則是在運行時使用隨機端口映射時,也就是 docker run -P時,會自動隨機映射 EXPOSE 的端口。

WORKDIR 指定工作目錄

WORKDIR <工作目錄路徑>

使用 WORKDIR 指令可以來指定工作目錄(或者稱爲當前目錄),以後各層的當前目錄就被改爲指定的目錄,該目錄需要已經存在, WORKDIR 並不會幫你建立目錄。

USER 指定當前用戶

USER <用戶名>

USER 指令和 WORKDIR 相似,都是改變環境狀態並影響以後的層。 WORKDIR是改變工作目錄, USER 則是改變之後層的執行 RUN , CMD 以及ENTRYPOINT 這類命令的身份。當然,和 WORKDIR 一樣, USER 只是幫助你切換到指定用戶而已,這個用戶必須是事先建立好的,否則無法切換。

HEALTHCHECK 健康檢查

HEALTHCHECK [選項] CMD <命令>  ###設置檢查容器健康狀況的命令
HEALTHCHECK NONE              ###如果基礎鏡像有健康檢查指令,使用這行可以屏蔽掉其健康檢查指令

ONBUILD 爲他人做嫁衣裳

ONBUILD <其它指令>

ONBUILD 是一個特殊的指令,它後面跟的是其它指令,比如 RUN , COPY 等,而這些指令,在當前鏡像構建時並不會被執行。只有當以當前鏡像爲基礎鏡像,去構建下一級鏡像的時候纔會被執行。

例:使用Dockerfile構建SpringBoot應用鏡像

一、Dockerfile文件內容

# 該鏡像需要依賴的基礎鏡像
FROM java:8
# 將當前目錄下的jar包複製到docker容器的/目錄下
ADD dockerfile-0.0.1-SNAPSHOT.jar /dockerfile-0.0.1-SNAPSHOT.jar
# 運行過程中創建一個mall-tiny-docker-file.jar文件
RUN bash -c 'touch /dockerfile-0.0.1-SNAPSHOT.jar'
# 聲明服務運行在8080端口
EXPOSE 8080
# 指定docker容器啓動時運行jar包
ENTRYPOINT ["java", "-jar","/dockerfile-0.0.1-SNAPSHOT.jar"]
# 指定維護者的名字
MAINTAINER ProgramLife!

二、將打包好的dockerfile-0.0.1-SNAPSHOT.jar文件和Dockerfile文件放到同一文件夾,並在文件夾路徑執行命令構建鏡像

# -t 表示指定鏡像倉庫名稱/鏡像名稱:鏡像標籤 .表示使用當前目錄下的Dockerfile
docker build -t ProgramLife!/dockerfile:0.0.1-SNAPSHOT .

Docker Hub

Docker Hub是Docker 官方維護了一個公共倉庫,大部分需求,都可以通過在 Docker Hub 中直接下載鏡像來實現。

登錄

docker login

可以通過執行 docker login 命令來輸入用戶名、密碼和郵箱來完成註冊和登錄。 註冊成功後,本地用戶目錄的 .dockercfg 中將保存用戶的認證信息。

查找鏡像

sudo docker search <鏡像名稱>

下載鏡像

sudo docker pull <鏡像名稱>

私有倉庫

可以通過獲取官方 registry 鏡像來運行

$ sudo docker run -d -p 5000:5000 registry

這將使用官方的 registry 鏡像來啓動本地的私有倉庫。默認情況下,倉庫會被創建在容器的 /tmp/registry 下。可以通過 -v 參數來
將鏡像文件存放在本地的指定路徑。 例如下面的例子將上傳的鏡像放到/opt/data/registry 目錄。

$ sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

使用 docker tag 來標記一個鏡像,然後推送它到倉庫,別的機器上就可以下載下來了。例如私有倉庫地址爲192.168.7.26:5000 。

使用 docker tag 將 ba58 這個鏡像標記爲 192.168.7.26:5000/test (格式爲 docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] )。

$ sudo docker tag ba58 192.168.7.26:5000/test

使用 docker push 上傳標記的鏡像

$ sudo docker push 192.168.7.26:5000/test

使用 curl 查看倉庫中的鏡像

 curl http://192.168.7.26:5000/v1/search

從另外一臺機器去下載這個鏡像

$ sudo docker pull 192.168.7.26:5000/test

數據卷

數據卷是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:

  1. 數據卷可以在容器之間共享和重用
  2. 對數據卷的修改會立馬生效
  3. 對數據卷的更新,不會影響鏡像
  4. 數據卷默認會一直存在,即使容器被刪除

在用 docker run 命令的時候,使用 -v 標記來創建一個數據卷並掛載到容器裏。在一次 run 中多次使用可以掛載多個數據卷。

創建一個名爲 web 的容器,並加載一個數據捲到容器的 /webapp 目錄

$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py

刪除數據卷

數據卷是被設計用來持久化數據的,它的生命週期獨立於容器,Docker不會在容器被刪除後自動刪除數據卷,並且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的數據卷。如果需要在刪除容器的同時移除數據卷。可以在刪除容器的時候使用 docker rm -v 這個命令。

使用 -v 標記也可以指定掛載一個本地主機的目錄到容器中去

$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

查看容器具體信息

$ docker inspect <容器名稱>

在輸出的內容中找到其中和數據卷相關的部分,可以看到所有的數據卷都是創建在主機的 /var/lib/docker/volumes/ 下面的

數據卷容器

如果你有一些持續更新的數據需要在容器之間共享,最好創建數據卷容器。數據卷容器,其實就是一個正常的容器,專門用來提供數據卷供其它容器掛載的。

首先,創建一個名爲 dbdata 的數據卷容器

$ sudo docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres

然後,在其他容器中使用 --volumes-from 來掛載 dbdata 容器中的數據卷。

$ sudo docker run -d --volumes-from dbdata --name db1 training/postgres
$ sudo docker run -d --volumes-from dbdata --name db2 training/postgres

也可以從其他已經掛載了數據卷的容器來級聯掛載數據卷

$ sudo docker run -d --name db3 --volumes-from db1 training/postgres

果刪除了掛載的容器(包括 dbdata、db1 和 db2),數據卷並不會被自動刪除。
如果要刪除一個數據卷,必須在刪除最後一個還掛載着它的容器時使用 dockerrm -v 命令來指定同時刪除關聯的容器。

備份

使用 --volumes-from 標記來創建一個加載 dbdata 容器卷的容器,並從主機掛載當前目錄到容器的 /backup 目錄

$ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

使用了 tar 命令來將 dbdata 卷備份爲容器中 /backup/backup.tar文件,也就是主機當前目錄下的名爲 backup.tar 的文件。

恢復

如果恢復數據到一個容器,首先創建一個帶有空數據卷的容器 dbdata2

$ sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然後創建另一個容器,掛載 dbdata2 容器卷中的數據卷,並使用 untar 解壓備份文件到掛載的容器卷中。

$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

Docker Compose

Compose是一個用於定義和運行多容器Docker應用程序的工具,適合用在開發、測試、構建CI工作流的場景 。

Compose 中有兩個重要的概念:

  1. 服務(service):一個應用的容器,實際上可以包括若干運行相同鏡像的容器實例。
  2. 項目(project):由一組關聯的應用容器組成的一個完整業務單元,在 dockercompose.yml 文件中定義。

安裝Compose

一、下載

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

 

二、修改文件權限爲可執行

chmod +x /usr/local/bin/docker-compose

三、查看是否安裝完成

docker-compose --version

使用步驟

  1. 使用Dockerfle(或其他方式)定義應用程序環境,以便在任何地方重現該環境。
  2. 在docker-compose. Yml文件中定義組成應用程序的服務,以便各個服務在一個隔離的環境中一起運行。
  3. ·運行docker-composeup命令,啓動並運行整個應用程序。

Compose 命令

build:構建(重新構建)項目中的服務容器

docker-compose build [options] [SERVICE...]

選項包括:

  1. --force-rm 刪除構建過程中的臨時容器。
  2. --no-cache 構建鏡像過程中不使用 cache(這將加長構建過程)。
  3. --pull 始終嘗試通過 pull 來獲取更新版本的鏡像。

kill:強制停止服務容器

docker-compose kill [options] [SERVICE...]

logs:查看服務容器的輸出

docker-compose logs [options] [SERVICE...]

pause:暫停一個服務容器

docker-compose pause [SERVICE...]

port:打印某個容器端口所映射的公共端口

docker-compose port [options] SERVICE PRIVATE_PORT

選項:

  1. --protocol=proto 指定端口協議,tcp(默認值)或者 udp。
  2. --index=index 如果同一服務存在多個容器,指定命令對象容器的序號(默認爲 1)。

ps:列出項目中目前的所有容器

docker-compose ps [options] [SERVICE...]

pull:拉取服務依賴的鏡像

docker-compose pull [options] [SERVICE...]

restart:重啓項目中的服務

docker-compose restart [options] [SERVICE...]

rm:刪除所有(停止狀態的)服務容器

docker-compose rm [options] [SERVICE...]

選項:

  1. -f, --force 強制直接刪除,包括非停止狀態的容器。一般儘量不要使用該選項。
  2. -v 刪除容器所掛載的數據卷

run:在指定服務上執行一個命令

docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]

scale:設置指定服務運行的容器個數

docker-compose scale [options] [SERVICE=NUM...]

start:啓動已經存在的服務容器

docker-compose start [SERVICE...]

stop:停止已經處於運行狀態的容器,但不刪除它

docker-compose stop [options] [SERVICE...]

unpause:恢復處於暫停狀態中的服務

docker-compose unpause [SERVICE...]

up:它將嘗試自動完成包括構建鏡像,(重新)創建服務,啓動服務,並關聯服務相關容器的一系列操作。

docker-compose up [options] [SERVICE...]

migrate-to-labels:重新創建容器,並添加 label。

docker-compose migrate-to-labels

version:打印版本信息

docker-compose version

Compose 模板文件

默認的模板文件名稱爲 docker-compose.yml ,格式爲 YAML 格式。

命令

build:指定 Dockerfile 所在文件夾的路徑(可以是絕對路徑,或者相對 dockercompose.yml 文件的路徑)。

build: /path/to/build/dir

cap_add:讓容器擁有所有能力可以指定爲:

cap_add:
  - ALL

cap_drop:去掉 NET_ADMIN 能力可以指定爲:

cap_drop:
  - NET_ADMIN

command:覆蓋容器啓動後默認執行的命令

command: echo "hello world"

cgroup_parent:指定父 cgroup 組,意味着將繼承該組的資源限制。

cgroup_parent: cgroups_1

container_name:指定容器名稱。默認將會使用 項目名稱_服務名稱_序號 這樣的格式。

container_name: docker-web-container

devices:指定設備映射關係。

devices:
  - "/dev/ttyUSB1:/dev/ttyUSB0"

dns:自定義 DNS 服務器。可以是一個值,也可以是一個列表。

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

dns_search:配置 DNS 搜索域。可以是一個值,也可以是一個列表。

dns_search: example.com
dns_search:
  - domain1.example.com
  - domain2.example.com

dockerfile:如果需要指定額外的編譯鏡像的 Dockefile 文件,可以通過該指令來指定。

dockerfile: Dockerfile-alternate

env_file:從文件中獲取環境變量,可以爲單獨的文件路徑或列表

env_file: .env
env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

environment:設置環境變量。你可以使用數組或字典兩種格式。

environment:
  RACK_ENV: development
  SESSION_SECRET:

expose:暴露端口,但不映射到宿主機,只被連接的服務訪問

expose:
  - "3000"
  - "8000"

extends:基於其它模板文件進行擴展

web:
  extends:
    file: common.yml
    service: webapp
ports:
  - "8000:8000"
links:
  - db
environment:
  - DEBUG=true
db:
  image: postgres

external_links:鏈接到 docker-compose.yml 外部的容器,甚至 並非 Compose 管理的外部容器。參數格式跟 links 類似。

external_links:
  - redis_1
  - project_db_1:mysql
  - project_db_1:postgresql

extra_hosts:類似 Docker 中的 --add-host 參數,指定額外的 host 名稱映射信息。

extra_hosts:
  - "googledns:8.8.8.8"
  - "dockerhub:52.1.157.61"

image:指定爲鏡像名稱或鏡像 ID。如果鏡像在本地不存在, Compose 將會嘗試拉去這個鏡像。

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

labels:爲容器添加 Docker 元數據(metadata)信息。例如可以爲容器添加輔助說明信息

labels:
  com.startupteam.description: "webapp for a startup team"
  com.startupteam.department: "devops department"
  com.startupteam.release: "rc3 for v1.0"

links:鏈接到其它服務中的容器。使用服務名稱(同時作爲別名)或服務名稱:服務別名(SERVICE:ALIAS) 格式都可以。

links:
  - db
  - db:database
  - redis

log_driver:類似 Docker 中的 --log-driver 參數,指定日誌驅動類型。

log_driver: "json-file"
log_driver: "syslog"
log_driver: "none"

log_opt:日誌驅動的相關參數。

log_driver: "syslog"
log_opt:
  syslog-address: "tcp://192.168.0.42:123"

net:設置網絡模式。使用和 docker client 的 --net 參數一樣的值

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

pid:跟主機系統共享進程命名空間。打開該選項的容器之間,以及容器和宿主機系統之間可以通過進程 ID 來相互訪問和操作。

pid: "host"

ports:暴露端口信息

ports:
  - "3000"
  - "8000:8000"
  - "49100:22"
  - "127.0.0.1:8001:8001"

security_opt:指定容器模板標籤(label)機制的默認屬性(用戶、角色、類型、級別等)。

security_opt:
  - label:user:USER
  - label:role:ROLE

ulimits:指定容器的 ulimits 限制值

ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

volumes:數據卷所掛載路徑設置。

volumes:
  - /var/lib/mysql
  - cache/:/tmp/cache
  - ~/configs:/etc/configs/:ro

volumes_driver:較新版本的 Docker 支持數據卷的插件驅動,可以通過 volumes_driver 來指定驅動。

volume_driver: mydriver

volumes_from:從另一個服務或容器掛載它的數據卷

volumes_from:
  - service_name
  - container_name

例:使用Docker Compose 部署Spring Boot應用

一、使用maven插件構建鏡像

(1)搭建Docker Registry 2.0

docker run -d -p 7000:7000 --restart=always --name registry2 registry:2

(2)修改/usr/lib/systemd/system/docker.service文件

原來

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

改爲

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:7050 -H unix://var/run/docker.sock

(3)使Docker支持http上傳鏡像

echo '{ "insecure-registries":["192.168.0.109:7000"] }' > /etc/docker/daemon.json

(4)使配置生效

systemctl daemon-reload
systemctl stop docker
systemctl start docker

(5)開啓防火牆

firewall-cmd --zone=public --add-port=7050/tcp --permanent
firewall-cmd --reload

(6)修改Spring Boot應用pom.xml文件,增加

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.1.0</version>
    <executions>
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <imageName>ProgramLife!/${project.artifactId}:${project.version}</imageName>
        <dockerHost>http://192.168.0.109:7050</dockerHost>
        <baseImage>java:8</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>

(7)maven package打包自動上傳鏡像

mvn clean package

二、docker-compose.yml文件內容

version: '1'
services:
  # 指定服務名稱
  db:
    # 指定服務使用的鏡像
    image: mysql:8.0.15
    # 指定容器名稱
    container_name: mysql
    # 指定服務運行的端口
    ports:
      - 3306:3306
    # 指定容器中需要掛載的文件
    volumes:
      - /mysql/log:/var/log/mysql
      - /mysql/data:/var/lib/mysql
      - /mysql/conf.d:/etc/mysql
    # 指定容器的環境變量
    environment:
      - MYSQL_ROOT_PASSWORD=root
  # 指定服務名稱
  docker-compose:
    # 指定服務使用的鏡像
    image: ProgramLife!/docker-compose:0.0.1-SNAPSHOT
    # 指定容器名稱
    container_name: docker-compose
    # 指定服務運行的端口
    ports:
      - 8080:8080
    # 指定容器中需要掛載的文件
    volumes:
      - /etc/localtime:/etc/localtime
      - /spring/docker-compose/logs:/var/logs

三、在docker-compose.yml文件目錄下運行命令

docker-compose up -d

注:本博客部分內容參考《Spring Cloud與Docker微服務架構實戰》、《Docker技術入門與實戰》

發佈了10 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章