Docker從瞭解到部署應用的詳細教程

light12發表於2023-11-01

一、Docker基礎知識

1、Docker

(1)Docker可以讓開發者打包他們的應用以及依賴包到一個輕量級、可以移植的容器中,然後釋出到任何的linux機器上,可以實現虛擬化;
(2)Docker容器是完全使用沙箱機制,相互之間不會有任何介面,更重要的是容器效能開銷極低;

2、Docker的應用場景

(1)Web應用的自動化打包和釋出;
(2)自動化測試和持續整合、釋出;
(3)在服務型環境中部署和調整資料庫或其他的後臺應用;

3、Docker的優點

(1)快速一致地交付應用程式:Docker 允許開發人員使用提供的應用程式或服務的本地容器在標準化環境中工作,從而簡化了開發的生命週期;
(2)響應式部署和擴充套件:Docker 是基於容器的平臺,允許高度可移植的工作負載;
(3)在統一硬體上執行更多工作負載:Docker 非常適合於高密度環境以及中小型部署,而您可以用更少的資源做更多的事情;

4、簡單的理解:

(1)Docker與虛擬機器的區別:

docker共享主機的硬體資源,而虛擬機器是獨佔一塊硬體資源的:安裝了虛擬機器,佔用2G記憶體,100G儲存空間,執行程式時,就會佔用這些資源,外部應用無法讀取這些資源,但是Docker可以的。

二、Docker的架構

1、Docker中的三個基本概念:

(1)映象(Image):Docker 映象(Image),就相當於是一個 root 檔案系統,比如官方映象 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 檔案系統;
(2)容器(Container):映象(Image)和容器(Container)的關係,就像是物件導向程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體,容器可以被建立、啟動、停止、刪除、暫停等;
(3)倉庫(Repository):倉庫可看成一個程式碼控制中心,用來儲存映象;
(4)Docker使用客戶端-伺服器(C/S)架構模式,使用遠端API來管理和建立Docker容器;

2、架構詳解

(1)架構圖
0
(2)解析
概念
說明
Docker 映象(Images)
Docker 映象是用於建立 Docker 容器的模板,比如 Ubuntu 系統;
Docker 容器(Container)
容器是獨立執行的一個或一組應用,是映象執行時的實;。
Docker 客戶端(Client)
Docker 客戶端透過命令列或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 與 Docker 的守護程式通訊;
Docker 主機(Host)
一個物理或者虛擬的機器用於執行 Docker 守護程式和容器。
Docker Registry
Docker 倉庫用來儲存映象,可以理解為程式碼控制中的程式碼倉庫。
Docker Hub(https://hub.docker.com) 提供了龐大的映象集合供使用。
 
Docker Machine
Docker Machine是一個簡化Docker安裝的命令列工具,透過一個簡單的命令列即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

三、安裝Docker1、檢查系統版本(1)linux核心要大於3.0,才可以使用docker(一般docker在linux系統下部署)uname -r

(2)檢視當前作業系統的版本
cat /etc/os-release

2、安裝docker

(1)解除安裝舊的docker版本(如果之前安裝過docker,需要先解除安裝)
apt-get remove docker docker-engine docker.io containerd runc
(2)允許apt命令可以使用https訪問Docker repository
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
(3)新增Docker官方的GPGkey
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
(4)驗證key(搜尋後8位即可顯示完成的金鑰)
apt-key fingerprint 0EBFCD88
(5)設定repository版本位stable並更新軟體列表
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt-get update 
(6)開始安裝docker
apt-get install docker-ce docker-ce-cli containerd.io
(7)檢視docker版本
docker --version sudo docker version
(8)docker換源
原因:docker伺服器在國外,在平常使用docker下載映象的過程中,難免會導致下載很慢的情況,可以將docker換成阿里源,這樣下載就快很多了。
登入阿里雲:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 按照官方教程操作
0
sudo mkdir -p /etc/docker 
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://0orggnrc.mirror.aliyuncs.com"] } EOF
重啟docker
sudo systemctl daemon-reload
sudo systemctl restart docker

3、docker的其他命令

(1)啟動docker服務
systemctl start docker sudo service docker start
(2)檢視docker是否開啟
sudo systemctl status docker
(3)設定docker開機自動啟動
sudo systemctl enable docker
(4)重啟dockers
systemctl restart docker sudo service docker restart
(5)關閉docker服務
sudo service docker stop systemctl stop docker
(6)刪除docker
(1)刪除安裝包
apt remove docker-ce
(2)刪除映象、容器、配置檔案等內容
rm -rf /var/lib/docker

四、Docker的執行

1、Docker允許在容器內執行應用程式,使用docker run 命令列來在容器內執行一個應用程式

docker run ubuntu:15.10 /bin/echo "Hello world"
0
(1)引數說明
  • docker:Docker的二進位制執行檔案;
  • run:與前面的 docker 組合來執行一個容器;
  • ubuntu:15.10指定要執行的映象,Docker 首先從本地主機上查詢映象是否存在,如果不存在,Docker 就會從映象倉庫 Docker Hub 下載公共映象;
  • /bin/echo "Hello world": 在啟動的容器裡執行的命令;
以上命令解釋:Docker 以 ubuntu15.10 映象建立一個新容器,然後在容器裡執行 bin/echo "Hello world",然後輸出結果。

2、互動式容器

(1)命令列
docker run -i -t ubuntu:15.10 /bin/bash
(2)引數:
  • -t: 在新容器內指定一個偽終端或終端;
  • -i: 允許你對容器內的標準輸入 (STDIN) 進行互動;
如下截圖我們已經進入到Ubuntu15.10容器系統
0
(3)退出容器
CTRL + D/exit

3、啟動容器(後臺執行)

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
0
輸入如上命令,輸出的結果為一串長字元,是容器ID,我們可以透過容器ID來檢視對應的容器發生了什麼

4、檢視docker中容器的執行狀態

(1)命令列

docker ps -a
(2)引數詳情:
  • CONTAINER ID: 容器 ID;
  • IMAGE: 使用的映象;
  • COMMAND: 啟動容器時執行的命令;
  • CREATED: 容器的建立時間;
  • PORTS: 容器的埠資訊和使用的連線型別(tcp\udp);
  • NAMES: 自動分配的容器名稱;
  • STATUS: 容器狀態;
(3)狀態列舉:
  • created(已建立)
  • restarting(重啟中)
  • running 或 Up(執行中)
  • removing(遷移中)
  • paused(暫停)
  • exited(停止)
  • dead(死亡)

5、宿主主機內檢視容器標準輸出

(1)命令列
docker logs 容器ID docker logs 容器名字
6、停止容器
(1)命令列
docker stop 容器ID docker stop 容器名字

五、基礎命令

docker
docker stats --help

1、容器的操作

(1)如果我們本地沒有 ubuntu 映象,我們可以使用 docker pull 命令來載入 ubuntu 映象:
docker pull ubuntu
(2)啟動容器
docker run -it ubuntu /bin/bash
(3)檢視所有容器
docker ps -a
(4)啟動一個已經停止的容器
docker start 容器DI
(5)後臺執行:-d 指定容器的執行模式
docker run -itd --name ubuntu-test ubuntu /bin/bash
(6)停止容器
docker stop 容器ID
(7)重啟容器
docker restart <容器 ID>
(8)進入容器:使用-d引數時,容器啟動後會進入後臺,需要進入到容器,可以執行如下命令:
(1)docker attach: 如果從這個容器退出,會導致容器的停止;
(2)docker exec:推薦使用,因為此命令會退出容器終端,但不會導致容器的停止;
(3)更多引數說明請使用 docker exec --help 命令檢視。
docker attach 5b759546b0ad 
docker exec -it e79737bec76f /bin/bash
0
(9)匯入和匯出容器
①匯出容器:如果要匯出本地某個容器,可以使用 docker export 命令
docker export 容器ID > ubuntu.tar
②匯入容器:可以使用 docker import 從容器快照檔案中再匯入為映象,以下例項將快照檔案 ubuntu.tar 匯入到映象 test/ubuntu:v1:
cat docker/ubuntu.tar(匯出映象的絕對路徑) | docker import - test/ubuntu:v1

(10)刪除容器:刪除容器使用 docker rm 命令:
docker rm -f 容器ID
(11)下面的命令可以清理掉所有處於終止狀態的容器
docker container prune

六、映象

當執行容器時,使用的映象如果在本地中不存在,docker 就會自動從 docker 映象倉庫中下載,預設是從Docker Hub公共映象源下載。

1、映象的操作命令集合

2、列出本地主機上的映象:

(1)命令
docker images
(2)引數說明:
  • REPOSITORY:表示映象的倉庫源
  • TAG:映象的標籤
  • IMAGE ID:映象ID
  • CREATED:映象建立時間
  • SIZE:映象大小
(3)注意:
  • 使用 REPOSITORY:TAG 來定義不同的映象
  • 如果不指定一個映象的版本標籤,docker 將預設使用 ubuntu:latest 映象

3、獲取新的映象

docker pull mysql:8

4、查詢映象

(1)https://hub.docker.com/ 
(2)docker search 命令來搜尋映象 docker search mysql
引數說明:
  • NAME: 映象倉庫源的名稱
  • DESCRIPTION: 映象的描述
  • OFFICIAL: 是否 docker 官方釋出
  • stars: 類似 Github 裡面的 star,表示點贊、喜歡的意思。
  • AUTOMATED: 自動構建
0

5、刪除映象

--刪除映象使用rmi,i是指images 
docker rmi hello-world

6、建立映象

(1)下載映象
當我們從 docker 映象倉庫中下載的映象不能滿足我們的需求時,我們可以透過以下兩種方式對映象進行
(1)從已經建立的容器中更新映象,並且提交這個映象 (2)使用 Dockerfile 指令來建立一個新的映象

(2)更新映象
(1)在如上的圖中,建立了一個容器,接下來在執行的容器中更新
apt-get update
(2)退出容器
(3)此時,容器ID為()的容器,是按照我們的需求更改的容器,可以透過docker commit 來提交容器副本
docker commit -m='ubuntu15.10 has update' -a='runoob' 7d2a07d3e466 runoob/ubuntu:V2
引數說明:
-m:提交的描述資訊
-a: 指定映象作者
e218edb10161:容器 ID
runoob/ubuntu:v2:指定要建立的目標映象名
(4)使用新映象啟動一個容器:
docker run -t -i runoob/ubuntu:V2 /bin/bash
(3)構建映象
①使用docker build,從零開始建立一個新的映象,需要建立一個Dockerfile,其中包含一組指令來告訴Docker如何構建映象:
Dockerfile檔案內容:
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
②構建映象
docker build -t runoob/centos:6.7 /opt/docker

③引數說明
  • 每一個指令都會在映象上建立一個新的層,每一個指令的字首都必須是大寫的。
  • 第一條FROM,指定使用哪個映象源
  • RUN 指令告訴docker 在映象內執行命令,安裝了什麼
  • -t :指定要建立的目標映象名
  • . :Dockerfile 檔案所在目錄,可以指定Dockerfile 的絕對路徑

7、設定映象標籤

(1)命令列
docker tag d07ea9ca8e85 runoob/centos:centos6.7

七、Docker容器連線

容器中可以執行一些網路應用,要讓外部也可以訪問這些應用,可以透過-P或者-p引數來指定埠對映

1、執行容器mysql並配置使得其他人可以連線

(1)命令

 

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

 

(2)引數說明:
  • -p 3306:3306 :對映容器服務的3306埠到宿主機的3306 埠外部主機可以直接透過宿主機ip:3306 訪問到 MySQL 的服務。
  • MYSQL_ROOT_PASSWORD=123456:設定 MySQL 服務 root 使用者的密碼
(3)設定過程
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8

docker ps

docker exec -it 28f89b6538f9 bash

mysql -u root -p

輸入密碼

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH
GRANT OPTION;

FLUSH PRIVILEGES;

ALTER USER 'root'@'localhost' IDENTIFIED BY 'pass
word' PASSWORD EXPIRE NEVER;

alter user 'root'@'%' identified with mysql_native_p
assword by '123456';

FLUSH PRIVILEGES;

使用自己電腦上的navicat連線mysql

八、Docker倉庫管理

倉庫(Repository)是集中存放映象的地方

1、關聯

(1)官網註冊
(2)登入和退出:
需要輸入使用者名稱和密碼,登入後就可以從 docker hub 上拉取自己賬號下的全部映象
①登入
docker login
②退出
docker logout
(3)推送映象:使用者登陸後,可透過docker push命令將自己的映象推送到dockers Hub
docker tag ubuntu:18.04 annona/ubuntu:18.04 
docker image ls
docker push annona/ubuntu:18.04
docker search annona/ubuntu

九、docker資料卷的概念

1、概念圖

0

2、資料卷的預設位置

/var/lib/docker/volumes
0

3、可以自己你建立資料卷目錄

docker volume create mulu_name
0

4、檢視資料卷內容

docker volume inspect annona
0

5、檢視有多少個資料卷

docker volume ls

6、刪除某一個資料卷

docker volume rm annona
0

十、在Docker中執行容器

1、執行gogs

docker pull gogs/gogs
mkdir -p /var/gogs
docker run --name=gogs -p 7777:22 -p 9999:3000 -v /var/gogs:/data/ gogs/gogs
docker run -d --name=gogs -p 1002:22 -p 1008:3000 -v /var/gogs:/data gogs/gogs
-d:後臺執行
-v:資料卷掛載, 用於將容器和資料分離
gogs訪問地址:
-p:port1:port2--port1與port2是對映的,port2是容器開放給linux系統的埠,port1是linux系統開放給其他主機連線的埠
http://192.168.95.129:1008/install

2、執行jenkins

#建立 jenkins_home 目錄
sudo mkdir /home/jenkins_home
#設定該目錄的所有者和所屬的組,普通使用者預設uid為1000, gid為1000,-R指遍及子目錄
sudo chown -R 1000:1000 /home/jenkins_home

docker run -d --name jenkins2.138.4 -p 9090:8080 -p 50000:50000 --privileged=true -v /home/jenkins_home:/var/jenkins_home jenkins/jenkins:2.138.4 

http://192.168.95.129:9090/

相關文章