Docker-2020詳細教學<配合千鋒Java學習營>

2020-08-13 10:17:35

Docker-2020詳細教學<配合千鋒Java學習營>

2020 Docker最新超詳細版教學通俗易懂

一、Docker介紹

1.下載Dcoker依的賴環境

想安裝Docker,需要先將依賴的環境全部下載下來,就像Maven依賴JDK一樣
yum -y install yum-utils device-mapper-persistent-data lvm2

2.指定Docker映象源

預設下載Docker會去國外伺服器下載,速度較慢,可以設定爲阿裡雲映象源,速度更快
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安裝Docker

yum makecache fast
yum -y install docker-ce

4.啓動Docker並測試

安裝成功後,需要手動啓動,設定爲開機啓動,並測試一下 Docker
#啓動docker服務
systemctl start docker
#設定開機自動啓動
systemctl enable docker
#測試
docker run hello-world

二、Docker的中央倉庫

1.Docker官方的中央倉庫:這個倉庫是映象最全的,但是下載速度較慢。
https://hub.docker.com/
2.國內的映象網站:網易蜂巢,daoCloud等,下載速度快,但是映象相對不全。
https://c.163yun.com/hub#/home 
http://hub.daocloud.io/ (推薦使用)
3.在公司內部會採用私服的方式拉取映象(新增設定)
#需要建立 /etc/docker/daemon.json,並新增如下內容
{
	"registry-mirrors":["https://registry.docker-cn.com"],
	"insecure-registries":["ip:port"]
}
#重新啓動兩個服務
systemctl daemon-reload
systemctl restart docker

三、映象的操作

1.拉取映象

從中央倉庫拉取映象到本地
docker pull 映象名稱[:tag]
#舉個栗子:docker pull daocloud.io/library/tomcat:8.5.15-jre8

2.檢視本地全部映象

檢視本地已經安裝過的映象資訊,包含標識,名稱,版本,更新時間,大小
docker images

3.刪除本地映象

映象會佔用磁碟空間,可以直接手動刪除,標識通過檢視獲取
docker rmi 映象的標識

4.映象的匯入導出

如果因爲網路原因可以通過硬碟的方式傳輸映象,雖然不規範,但是有效,但是這種方式導出的映象名稱和版本都是null,需要手動修改
#將原生的映象導出
docker save -o 導出的路徑 映象id
#載入原生的映象檔案
docker load -i 映象檔案
#修改映象檔案
docker tag 映象id 新映象名稱:版本

四、容器的操作

1.執行容器

執行容器需要定製具體映象,如果映象不存在,會直接下載
#簡單操作
docker run 映象的標識|映象的名稱[:tag]
#常用的參數
docker run -d -p 宿主機埠:容器埠 --name 容器名稱 映象的標識|映象名稱[:tag]
#-d:代表後臺執行容器
#-p 宿主機埠:容器埠:爲了對映當前Linux的埠和容器的埠
#--name 容器名稱:指定容器的名稱

2.檢視正在執行的容器

檢視全部正在執行的容器資訊
docker ps [-qa]
#-a 檢視全部的容器,包括沒有執行
#-q 只檢視容器的標識

3.檢視容器日誌

檢視容器日誌,以檢視容器執行的資訊
docker logs -f 容器id
#-f:可以卷動檢視日誌的最後幾行

4.進入容器的內部

可以進入容器的內部進行操作
docker exec -it 容器id bash

5.複製內容到容器

將宿主機的檔案複製到容器內部的指定目錄
docker cp 檔名稱 容器id:容器內部路徑

6.重新啓動&啓動&停止&刪除容器

容器的啓動,停止,刪除等操作,後續會經常使用到
#重新啓動容器
docker restart 容器id
#啓動停止執行的容器
docker start 容器id
 
#停止指定的容器(刪除容器前,需要先停止容器)
docker stop 容器id
#停止全部容器
docker stop $(docker ps -qa)
#刪除指定容器
docker rm 容器id
#刪除全部容器
docker rm $(docker ps -qa)

五、Docker應用

1.docker安裝tomcat

執行Tomcat容器,爲部署ssm工程做準備
 
docker run -d -p 8080:8080 --name tomcat  daocloud.io/library/tomcat:8.5.15-jre8
#或者已經下載了tomcat映象
docker run -d -p 8080:8080 --name tomcat 映象的標識

2.執行MySQL容器

docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4

3.部署ssm工程

修改SSM工程環境,設定爲Linux中Docker容器的資訊
通過Maven的package重新打成war包
將Windows下的war包複製到Linux中
通過docker命令將宿主機的war包複製到容器內部
 
docker cp 檔名稱 容器id:容器內部路徑
 
測試存取SSM工程

六、數據卷

爲了部署SSM的工程,需要使用到cp的命令將宿主機內的ssm.war檔案複製到容器內部。 數據卷:將宿主機的一個目錄對映到容器的一個目錄中。

可以在宿主機中操作目錄中的內容,那麼容器內部對映的檔案,也會跟着一起改變。

1.建立數據卷

#建立數據卷後,預設會存放在一個目錄下/var/lib/docker/volumes/數據卷名稱/_data
docker volume create 數據卷名稱

2.檢視全部數據卷

#檢視全部數據卷資訊
docker volume ls

3.檢視數據卷詳情

#檢視數據卷的詳細資訊,可以查詢到存放的路徑,建立時間等等
docker volume inspect 數據卷名稱

4.刪除數據卷

#刪除指定的數據卷
docker volume rm 數據卷名稱

5.容器對映數據卷

#通過數據卷名稱對映,如果數據卷不存在。Docker會幫你自動建立,會將容器內部自帶的檔案,儲存在預設的存放路徑中。
docker run -d -p 8080:8080 --name tomcat -v 數據卷名稱:容器內部的路徑 映象id
 
#通過路徑對映數據卷,直接指定一個路徑作爲數據卷的存放位置。但是這個路徑下是空的。
docker run -d -p 8080:8080 --name tomcat -v 路徑(/root/自己建立的資料夾):容器內部的路徑 映象id

七、Dockerfile自定義映象

1.Dockerfile

建立自定義映象就需要建立一個Dockerfiler,如下爲Dockerfile的語言
 
from:指定當前自定義映象依賴的環境
copy:將相對路徑下的內容複製到自定義映象中
workdir:宣告映象的預設工作目錄
run:執行的命令,可以編寫多個
cmd:需要執行的命令(在workdir下執行的,cmd可以寫多個,只以最後一個爲準)
 
#範例:
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps

2.通過Dockerfile製作映象

#編寫完Dockerfile後需要通過命令將其製作爲映象,並且要在Dockerfile的當前目錄下,之後即可在映象中檢視到指定的映象資訊,注意最後的 .
docker build -t 映象名稱[:tag] ./

八、Docker-Compose

1.下載並安裝Docker-Compose

1.1下載Docker-Compose

#去github官網搜尋docker-compose,下載1.24.1版本的Docker-Compose
下載路徑:https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64

1.2設定許可權

#需要將DockerCompose檔案的名稱修改一下,給予DockerCompose檔案一個可執行的許可權
mv docker-compose-Linux-x86_64 docker-compose
chmod 777 docker-compose

1.3設定環境變數

#方便後期操作,設定一個環境變數
#將docker-compose檔案移動到了/usr/local/bin,修改了/etc/profile檔案,給/usr/local/bin設定到了PATH中
 
mv docker-compose /usr/local/bin
vi /etc/profile
#新增內容:export PATH=$JAVA_HOME:/usr/local/bin:$PATH
source /etc/profile

1.4測試

在任意目錄下輸入docker-compose

2.Docker-Compose管理MySQL和Tomcat容器

yml檔案以key:value方式來指定設定資訊
多個設定資訊以換行+縮排的方式來區分
在docker-compose.yml檔案中,不要使用製表符
 
version: '3.1'
services:
  mysql:           # 服務的名稱
    restart: always   # 代表只要docker啓動,那麼這個容器就跟着一起啓動
    image: daocloud.io/library/mysql:5.7.4  # 指定映象路徑
    container_name: mysql  # 指定容器名稱
    ports:
      - 3306:3306   #  指定埠號的對映
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT使用者登錄密碼
      TZ: Asia/Shanghai        # 指定時區
    volumes:
     - /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql   # 對映數據卷
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.5.15-jre8
    container_name: tomcat
    ports:
      - 8080:8080
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps
      - /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs

3.使用docker-compose命令管理容器

在使用docker-compose的命令時,預設會在當前目錄下找docker-compose.yml檔案
 
#1.基於docker-compose.yml啓動管理的容器
docker-compose up -d
 
#2.關閉並刪除容器
docker-compose down
 
#3.開啓|關閉|重新啓動已經存在的由docker-compose維護的容器
docker-compose start|stop|restart
 
#4.檢視由docker-compose管理的容器
docker-compose ps
 
#5.檢視日誌
docker-compose logs -f

4.docker-compose配合Dockerfile使用

使用docker-compose.yml檔案以及Dockerfile檔案在生成自定義映象的同時啓動當前映象,並且由docker-compose去管理容器

4.1docker-compose檔案

編寫docker-compose檔案
 
# yml檔案
version: '3.1'
services:
  ssm:
    restart: always
    build:            # 構建自定義映象
      context: ../      # 指定dockerfile檔案的所在路徑
      dockerfile: Dockerfile   # 指定Dockerfile檔名稱
    image: ssm:1.0.1
    container_name: ssm
    ports:
      - 8081:8080
    environment:
      TZ: Asia/Shanghai

4.2 Dockerfile檔案

編寫Dockerfile檔案
 
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps

4.3 執行

#可以直接基於docker-compose.yml以及Dockerfile檔案構建的自定義映象
docker-compose up -d
# 如果自定義映象不存在,會幫助我們構建出自定義映象,如果自定義映象已經存在,會直接執行這個自定義映象
#重新構建自定義映象
docker-compose build
#執行當前內容,並重新構建
docker-compose up -d --build

九、CI、CD介紹及準備

1.CI、CD引言

專案部署
1.將專案通過maven進行編譯打包
2.將檔案上傳到指定的伺服器中
3.將war包放到tomcat的目錄中
4.通過Dockerfile將Tomcat和war包轉成一個映象,由DockerCompose去執行容器 專案更新後,需要將上述流程再次的從頭到尾的執行一次,如果每次更新一次都執行一次上述操作,很費時,費力。我們就可以通過CI、CD幫助我們實現持續整合,持續交付和部署

2.CI介紹

CI(continuous intergration)持續整合
持續整合:編寫程式碼時,完成了一個功能後,立即提交程式碼到Git倉庫中,將專案重新的構建並且測試。
1.快速發現錯誤。
2.防止程式碼偏離主分支。

3.搭建Gitlab伺服器

3.1.準備環境

實現CI,需要使用到Gitlab遠端倉庫,先通過Docker搭建Gitlab

建立一個全新的虛擬機器,並且至少指定4G的執行記憶體,4G執行記憶體是Gitlab推薦的記憶體大小。
並且安裝Docker以及Docker-Compose

3.2 修改ssh的22埠

#將ssh的預設22埠,修改爲60022埠,因爲Gitlab需要佔用22埠
 
vi /etc/ssh/sshd_config
  PORT 22 -> 60022
systemctl restart sshd

3.3 編寫docker-compose.yml

docker-compose.yml檔案去安裝gitlab(下載和執行的時間比較長的)
 
version: '3.1'
services:
 gitlab:
  image: 'twang2218/gitlab-ce-zh:11.1.4'
  container_name: "gitlab"
  restart: always
  privileged: true
  hostname: 'gitlab'
  environment:
   TZ: 'Asia/Shanghai'
   GITLAB_OMNIBUS_CONFIG: |
    external_url 'http://192.168.199.110'
    gitlab_rails['time_zone'] = 'Asia/Shanghai'
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['gitlab_shell_ssh_port'] = 22
  ports:
   - '80:80'
   - '443:443'
   - '22:22'
  volumes:
   - /opt/docker_gitlab/config:/etc/gitlab
   - /opt/docker_gitlab/data:/var/opt/gitlab
   - /opt/docker_gitlab/logs:/var/log/gitlab

十、搭建GitlabRunner

1.準備檔案

daemon.json
 
{
「registry-mirrors」: [「https://registry.docker-cn.com」],
「insecure-registries」: [ip:ports]
}
 
資料夾 environment裏面準備maven安裝包,jdk1.8安裝包,Dockerfile,daemon.json以及docker-compose

2.開始搭建

建立工作目錄 /usr/local/docker_gitlab-runner
將docker-compose.yml檔案以及environment目錄全部複製到上述目錄中 在宿主機啓動docker程式後先執行 sudo
chown root:root /var/run/docker.sock (如果重新啓動過 docker,重新執行)
在/usr/local/docker_gitlab-runner 目錄中執行docker-compose up -d –build 啓動容器
新增容器許可權,保證容器可以使用宿主機的dockerdocker exec -it gitlab-runner usermod -aG
root gitlab-runner 註冊Runner資訊到gitlab

3.進入後續步驟

docker exec -it gitlab-runner gitlab-runner register
 
# 輸入 GitLab 地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.199.109/
 
# 輸入 GitLab Token
Please enter the gitlab-ci token for this runner:
1Lxq_f1NRfCfeNbE5WRh
 
# 輸入 Runner 的說明
Please enter the gitlab-ci description for this runner:
可以爲空
 
# 設定 Tag,可以用於指定在構建規定的 tag 時觸發 ci
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
 
# 這裏選擇 true ,可以用於程式碼上傳後直接執行(根據版本,也會沒有次選項)
Whether to run untagged builds [true/false]:
true
 
# 這裏選擇 false,可以直接回車,預設爲 false(根據版本,也會沒有次選項)
Whether to lock Runner to current project [true/false]:
false
 
# 選擇 runner 執行器,這裏我們選擇的是 shell
Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh:
shell

十一、整合專案入門測試

1.建立專案

建立maven工程,新增web.xml檔案,編寫HTML頁面

2.編寫.gitlab-ci.yml檔案

stages:
  - test
 
test:
  stage: test
  script:
    - echo first test ci   # 輸入的命令

3.將maven工程推播到gitlab中

執行git命令推播到Gitlab
 
git push origin master

4.檢視效果

可以在gitlab中檢視到gitlab-ci.yml編寫的內容

十二、完善專案設定

新增Dockerfile以及docker-compose.yml, 並修改.gitlab-ci.yml檔案

1.建立Dockerfile

# Dockerfile
FROM daocloud.io/library/tomcat:8.5.15-jre8
COPY testci.war /usr/local/tomcat/webapps

2.建立docker-compose.yml

# docker-compose.yml
version: "3.1"
services:
  testci:
    build: docker
    restart: always
    container_name: testci
    ports:
      - 8080:8080

3.修改.gitlab-ci.yml

# ci.yml
stages:
  - test
 
test:
  stage: test
  script:
    - echo first test ci
    - /usr/local/maven/apache-maven-3.6.3/bin/mvn package
    - cp target/testci-1.0-SNAPSHOT.war docker/testci.war
    - docker-compose down
    - docker-compose up -d --build
    - docker rmi $(docker images -qf dangling=true)