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

2023-11-01 18:02: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)架構圖

(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: 自動構建

(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 "[email protected]"

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/