1. 程式人生 > 實用技巧 >Docker基本概念

Docker基本概念

1、什麼是虛擬化

虛擬的環境並不在真實的硬體上,而是虛擬出一套硬體
在一臺物理機上,可以通過虛擬化技術,虛擬出很多虛擬機器

2、Docker與虛擬機器的區別

Docker
    啟動速度快
    佔用系統資源少
    容器之間隔離


虛擬機器
    啟動速度慢
    佔用系統資源多
    虛擬機器之間完全隔離

3、Docker中的三大概念

映象、容器、 倉庫

4、什麼是映象

啟動容器的模板

5、什麼是容器

對外提供服務的例項

6、什麼是映象倉庫

存放映象的倉庫

7、簡要說明一下docker網路

安裝Docker時,它會自動建立三個網路,bridge(建立容器預設連線到此網路)、 none 、host

8、docker網路的原理有哪些

Docker 本身的技術依賴於 Linux 核心虛擬化技術的發展
所以 Docker 對 Linux 核心的特性有很強的依賴
其中 Docker 使用到的與 Linux 網路有關的技術分別有:網路名稱空間、Veth、網橋、Iptables、路由

9、Linux網路隔離的方式

因為 名稱空間的存在
這些獨立的協議棧被隔離到不同的名稱空間中
處於不同的名稱空間的網路協議棧是完全隔離的,彼此之間無法進行網路通訊,就好像兩個“平行宇宙”

10、Linux不同網路之間互聯的方式

Veth裝置:只能一對一
網橋:支援多對多
Iptables:核心級別的網路轉發(但是規則比較複雜)

11、Docker網路模式

host 模式
none 模式
container 模式
bridge 模式(預設)

12、Docker網路模式的實現原理

host:共享根名稱空間的網路
none:只提供本地迴環網路127.0.0.1
container:共享某個容器的網路
bridge:所有容器連線同一個網橋,通過網橋來進行轉發

13、怎麼實現使用在宿主主機使用127.0.0.1訪問容器

# 在容器執行的時候 對映埠 網路模式不指定 就使用預設的bridge

docker run -dit -p 80:80 --name nginx01 nginx:latest

14、怎麼共享一個容器的網路

# 使用 container 網路模式

docker run -itd --name test01 nginx
docker run -itd --name test02 --network "container:test01" nginx

15、怎麼實現一個容器完全的網路隔離

# 使用 none 網路模式

docker run -itd --name test01 --network none nginx

16、怎麼實現多對多網路互聯

# 使用 bridge 網路模式

docker run -itd --name test01 --network bridge busybox
docker run -itd --name test02 --network bridge busybox
docker run -itd --name test03 --network bridge busybox

17、建立一個容器

docker run -d busybox

18、隨機對映埠

# -P

docker run -P busybox

19、固定對映埠

# -p [宿主機的埠號]:[容器內部的埠號]

docker run -p 80:80 nginx

20、掛載儲存卷

# -v [宿主機的路徑]:[容器內的路徑]


docker run -v /home/darker:/data nginx

21、為容器設定一個名字

# --name [自定義容器名]

docker run --name nginx01 nginx

22、以守護程序方式執行一個容器

# -d

docker run -d nginx

23、構建一個Django容器

建立 Dockerfile
vim Dockerfile
Dockerfile 內容
# 1.指定基礎映象
FROM python:3.6.8

# 2.安裝django
RUN pip3 install django==2.2.2 -i https://pypi.douban.com/simple/

# 3.建立1個django專案
RUN django-admin startproject blog
RUN cd blog && python3 manage.py startapp app01

# 4.設定啟動命令
CMD cd /root && python3 manage.py runserver 0.0.0.0:8000

# 5.暴露8000埠
EXPOSE 8000
構建映象命令
docker build -t django:v1 .
啟動容器
docker run -dit -p 8000:8000 --name django01 django:v1 bash

24、構建一個NGINX容器

建立 nginx.repo
vim nginx.repo
nginx.repo 內容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
建立 Dockerfile
vim Dockerfile
Dockerfile 內容
# 設定基礎映象
FROM centos

# 安裝wget
RUN yum install wget -y

# 換源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
RUN cd /etc/yum.repos.d && wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
RUN mv /etc/yum.repos.d/CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo

# 新增nginx源的檔案
ADD nginx.repo /etc/yum.repos.d/ 

# 重新整理yum快取
RUN yum makecache

# 安裝yum工具
RUN yum install yum-utils -y

# 安裝Nginx
RUN yum install nginx -y

# 新增配置檔案
ADD default.conf /etc/nginx/conf.d/

# 設定啟動命令
CMD nginx -g 'daemon off;'
構建映象命令
docker build -t nginx:v1 .
啟動容器
docker run -dit -p 80:80 --name nginx01 nginx:v1 bash

25、使用NGINX代理Django

建立 default.conf
vim default.conf
default.conf 內容
upstream django {
    server django:8000;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://django;
        index index.html index.htm;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

26、將以上映象上傳到映象倉庫

# 1.登入阿里雲Docker Registry
docker login --username=使用者名稱 [倉庫URL] 


# 2.為映象新增標籤(標記版本)
docker tag [映象ID] [倉庫URL]/[名稱空間]/[倉庫名稱]:[映象版本號]
# 例項
docker tag 74d107221092 registry.cn-hangzhou.aliyuncs.com/darker-x/common_software:redis_v1


# 3.將本地映象推送到Registry
docker push [倉庫URL]/[名稱空間]/[倉庫名稱]:[映象版本號]
# 例項
docker push registry.cn-hangzhou.aliyuncs.com/darker-x/common_software:redis_v1

1、什麼是虛擬化

虛擬的環境並不在真實的硬體上,而是虛擬出一套硬體
在一臺物理機上,可以通過虛擬化技術,虛擬出很多虛擬機器
Text

2、Docker與虛擬機器的區別

Docker
    啟動速度快
    佔用系統資源少
    容器之間隔離


虛擬機器
    啟動速度慢
    佔用系統資源多
    虛擬機器之間完全隔離
Text

3、Docker中的三大概念

映象、容器、 倉庫
Text

4、什麼是映象

啟動容器的模板
Text

5、什麼是容器

對外提供服務的例項
Text

6、什麼是映象倉庫

存放映象的倉庫
Text

7、簡要說明一下docker網路

安裝Docker時,它會自動建立三個網路,bridge(建立容器預設連線到此網路)、 none 、host
Text

8、docker網路的原理有哪些

Docker 本身的技術依賴於 Linux 核心虛擬化技術的發展
所以 Docker 對 Linux 核心的特性有很強的依賴
其中 Docker 使用到的與 Linux 網路有關的技術分別有:網路名稱空間、Veth、網橋、Iptables、路由
Text

9、Linux網路隔離的方式

因為 名稱空間的存在
這些獨立的協議棧被隔離到不同的名稱空間中
處於不同的名稱空間的網路協議棧是完全隔離的,彼此之間無法進行網路通訊,就好像兩個“平行宇宙”
Text

10、Linux不同網路之間互聯的方式

Veth裝置:只能一對一
網橋:支援多對多
Iptables:核心級別的網路轉發(但是規則比較複雜)
Text

11、Docker網路模式

host 模式
none 模式
container 模式
bridge 模式(預設)
Text

12、Docker網路模式的實現原理

host:共享根名稱空間的網路
none:只提供本地迴環網路127.0.0.1
container:共享某個容器的網路
bridge:所有容器連線同一個網橋,通過網橋來進行轉發
Text

13、怎麼實現使用在宿主主機使用127.0.0.1訪問容器

# 在容器執行的時候 對映埠 網路模式不指定 就使用預設的bridge

docker run -dit -p 80:80 --name nginx01 nginx:latest
Bash

14、怎麼共享一個容器的網路

# 使用 container 網路模式

docker run -itd --name test01 nginx
docker run -itd --name test02 --network "container:test01" nginx
Bash

15、怎麼實現一個容器完全的網路隔離

# 使用 none 網路模式

docker run -itd --name test01 --network none nginx
Bash

16、怎麼實現多對多網路互聯

# 使用 bridge 網路模式

docker run -itd --name test01 --network bridge busybox
docker run -itd --name test02 --network bridge busybox
docker run -itd --name test03 --network bridge busybox
Bash

17、建立一個容器

docker run busybox
Bash

18、隨機對映埠

# -P

docker run -P busybox
Text

19、固定對映埠

# -p [宿主機的埠號]:[容器內部的埠號]

docker run -p 80:80 nginx
Bash

20、掛載儲存卷

# -v [宿主機的路徑]:[容器內的路徑]


docker run -v /home/darker:/data nginx
Bash

21、為容器設定一個名字

# --name [自定義容器名]

docker run --name nginx01 nginx
Bash

22、以守護程序方式執行一個容器

# -d

docker run -d nginx
Bash

23、構建一個Django容器

建立 Dockerfile
vim Dockerfile
Bash
Dockerfile 內容
# 1.指定基礎映象
FROM python:3.6.8

# 2.安裝django
RUN pip3 install django==2.2.2 -i https://pypi.douban.com/simple/

# 3.建立1個django專案
RUN django-admin startproject blog
RUN cd blog && python3 manage.py startapp app01

# 4.設定啟動命令
CMD cd /root && python3 manage.py runserver 0.0.0.0:8000

# 5.暴露8000埠
EXPOSE 8000
Dockerfile
構建映象命令
docker build -t django:v1 .
Bash
啟動容器
docker run -dit -p 8000:8000 --name django01 django:v1 bash
Bash

24、構建一個NGINX容器

建立 nginx.repo
vim nginx.repo
Bash
nginx.repo 內容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
nginx
建立 Dockerfile
vim Dockerfile
Bash
Dockerfile 內容
# 設定基礎映象
FROM centos

# 安裝wget
RUN yum install wget -y

# 換源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
RUN cd /etc/yum.repos.d && wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
RUN mv /etc/yum.repos.d/CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo

# 新增nginx源的檔案
ADD nginx.repo /etc/yum.repos.d/ 

# 重新整理yum快取
RUN yum makecache

# 安裝yum工具
RUN yum install yum-utils -y

# 安裝Nginx
RUN yum install nginx -y

# 新增配置檔案
ADD default.conf /etc/nginx/conf.d/

# 設定啟動命令
CMD nginx -g 'daemon off;'
Dockerfile
構建映象命令
docker build -t nginx:v1 .
Bash
啟動容器
docker run -dit -p 80:80 --name nginx01 nginx:v1 bash
Bash

25、使用NGINX代理Django

建立 default.conf
vim default.conf
Bash
default.conf 內容
upstream django {
    server django:8000;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://django;
        index index.html index.htm;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
nginx

26、將以上映象上傳到映象倉庫

# 1.登入阿里雲Docker Registry
docker login --username=使用者名稱 [倉庫URL] 


# 2.為映象新增標籤(標記版本)
docker tag [映象ID] [倉庫URL]/[名稱空間]/[倉庫名稱]:[映象版本號]
# 例項
docker tag 74d107221092 registry.cn-hangzhou.aliyuncs.com/darker-x/common_software:redis_v1


# 3.將本地映象推送到Registry
docker push [倉庫URL]/[名稱空間]/[倉庫名稱]:[映象版本號]
# 例項
docker push registry.cn-hangzhou.aliyuncs.com/darker-x/common_software:redis_v1