溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker的原理和基礎操作

發(fā)布時間:2020-06-16 15:49:21 來源:億速云 閱讀:204 作者:元一 欄目:云計算

Docker 概念

Docker 是一個開源的應用容器引擎,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux機器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。‘

一個完整的Docker有以下幾個部分組成:

  1. dockerClient客戶端

  2. Docker Daemon守護進程

  3. Docker Image鏡像

  4. DockerContainer容器

Docker 與虛擬機的區(qū)別:

?。。∠嗤c:
①可在不同的主機之間遷移;
②都具備 root 權限;
③都可以遠程控制;
④都有備份、回滾操作。
?。?!不同點:

**1、操作系統(tǒng)上:**
docker:在性能上有優(yōu)勢,可以輕易的運行多個操作系統(tǒng);
虛擬機:可以安裝任何系統(tǒng),但是性能不及容器。

**2、原理:**
docker:和宿主機共享內(nèi)核,所有容器運行在容器引擎之上,容器并非一個完整的操作系統(tǒng),所有容器共享操作系統(tǒng),在進程級進行隔離。
虛擬機:每一個虛擬機都建立在虛擬的硬件之上,提供指令級的虛擬,具備一個完整的操作系統(tǒng)。

**3、優(yōu)點:**
docker:高效、集中。一個硬件節(jié)點可以運行數(shù)以百計的的容器,非常節(jié)省資源,QoS 會盡量滿足,但不保證一定滿足。內(nèi)核由提供者升級,服務由服務提供者管理。
虛擬機:對操作系統(tǒng)具有絕對權限,對系統(tǒng)版本和系統(tǒng)升級具有完全的管理權限。具有一整套的的資源:CPU、RAM 和磁盤。QoS 是有保證的,每一個虛擬機就像一個真實的物理機一樣,可以實現(xiàn)不同的操作系統(tǒng)運行在同一物理節(jié)點上。

**4、缺點:**
docker:對內(nèi)核沒有控制權限,只有容器的提供者具備升級權限。只有一個內(nèi)核運行在物理節(jié)點上,幾乎不能實現(xiàn)不同的操作系統(tǒng)混合。容器提供者一般僅提供少數(shù)的幾個操作系統(tǒng)。
虛擬機:每一臺虛擬機都具有更大的負載,耗費更多的資源,用戶需要全權維護和管理。一臺物理機上能夠運行的虛擬機非常有限。

(3)Docker的使用場景:

1、打包應用程序簡化部署;
2、可脫離底層硬件任意遷移;
例:服務器從騰訊云遷移到阿里云。

(4)Docker 核心概念:

鏡像
容器
倉庫

-------------------------------------------------------------部署19版docker--------------------------------------------------------

 #安裝軟件包,存儲映射等依賴包
yum install yum-utils device-mapper-persistent-data lvm2 -y

#設置阿里云鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安裝docker-ce引擎
yum install -y docker-ce

#關閉防火墻,開啟docker
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start docker

#公有倉庫搜索nginx鏡像
[root@localhost ~]# docker search nginx
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                             Official build of Nginx.                        12370    #下載次數(shù)           [OK]                
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   1703                                    [OK]

#鏡像加速
#tee標準輸入到daemon.json中,指向阿里云的鏡像加速地址
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://8ulga20n.mirror.aliyuncs.com"]
}
EOF

#重新加載系統(tǒng)守護進程,重啟docker
[root@localhost ~]# cd /etc/docker/
[root@localhost docker]# ls
daemon.json  key.json
[root@localhost docker]# cat daemon.json 
{
  "registry-mirrors": ["https://8ulga20n.mirror.aliyuncs.com"]
}
[root@localhost docker]# systemctl daemon-reload 
[root@localhost docker]# systemctl restart docker

#下載nginx鏡像
[root@localhost docker]# docker pull nginx

#查看docker鏡像列表
[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx #名稱           latest #標識          231d40e811cd        4 weeks ago         126MB

#查看docker,通過id查看詳細信息
[root@localhost docker]# docker inspect 231d40e811cd
[
    {
        "Id": "sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145",
        "RepoTags": [

#修改鏡像標簽
[root@localhost docker]# docker tag nginx:latest nginx:web
[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              231d40e811cd        4 weeks ago         126MB
nginx               web                 231d40e811cd        4 weeks ago         126MB

#刪除某個鏡像
[root@localhost docker]# docker rmi nginx:web 
Untagged: nginx:web
[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              231d40e811cd        4 weeks ago         126MB

#導出鏡像
[root@localhost docker]# cd /opt/
[root@localhost opt]# docker save -o nginx nginx:latest 
[root@localhost opt]# ls
containerd  mysql-5.7.20  nginx  rh  school.json  top10.json

#遷移鏡像方便第二臺docke節(jié)點也可用
#第二臺docker同樣的操作
1
[root@localhost opt]# scp /opt/nginx root@192.168.136.167:/opt/
#導入鏡像
[root@localhost opt]# docker load < nginx
831c5620387f: Loading layer  72.48MB/72.48MB
5fb987d2e54d: Loading layer  57.67MB/57.67MB
4fc1aa8003a3: Loading layer  3.584kB/3.584kB
Loaded image: nginx:latest
[root@localhost opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              231d40e811cd        4 weeks ago         126MB

容器管理

#創(chuàng)建容器
[root@localhost opt]# docker create -it nginx:latest /bin/bash
f6be6d4fd3ba040770da758b94b559a5de7d5cd53c661ced6c2a5f27bab3a3cd

#查看容器
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f6be6d4fd3ba        nginx:latest        "/bin/bash"         18 seconds ago      Created       #創(chuàng)建的狀態(tài)                          zen_kapitsa

#開啟容器
[root@localhost opt]# docker start f6be6d4fd3ba
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
f6be6d4fd3ba        nginx:latest        "/bin/bash"         About a minute ago   Up 8 seconds  #開啟狀態(tài)      80/tcp              zen_kapitsa

#docker run 相當于加載了這個鏡像(如果沒有這個鏡像就會去下載),還開啟docker,還創(chuàng)建了容器
docker run paigeeworld/centos7 /usr/bin/bash -c ls /
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS               NAMES
9cd607702893        paigeeworld/centos7   "/usr/bin/bash -c ls…"   18 seconds ago      Exited (0) 16 seconds ago                       confident_newton
f6be6d4fd3ba        nginx:latest          "/bin/bash"              9 minutes ago       Up 8 minutes                80/tcp              zen_kapitsa

#容器進入
[root@localhost opt]# docker exec it 9cd607702893 /bin/bash

#持續(xù)在后臺執(zhí)行
[root@localhost opt]# docker run -d paigeeworld/centos7 /bin/bash -c "while true;do echo hello;done"
ebe894f3fdf8f64d9e1daf24ef957b2f027ca805f8acd9262e1c3572ff3ab08d
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                     PORTS               NAMES
ebe894f3fdf8        paigeeworld/centos7   "/bin/bash -c 'while…"   5 seconds ago       Up 3 seconds                                   ecstatic_swanson
9cd607702893        paigeeworld/centos7   "/usr/bin/bash -c ls…"   8 minutes ago       Exited (0) 3 minutes ago                       confident_newton
f6be6d4fd3ba        nginx:latest          "/bin/bash"              18 minutes ago    

#容器導出
[root@localhost opt]# docker export ebe894f3fdf8 > nginx_c
[root@localhost opt]# ls
containerd  mysql-5.7.20  nginx  nginx_c  rh  school.json  top10.json

#容器導入,遷移
[root@localhost opt]# scp /opt/nginx_c root@192.168.136.167:/opt/
[root@localhost opt]# cat nginx_c | docker import - nginx:web
sha256:3461d80047f4f5465d8842f52094ee171fb9a259f606862fab607b9f024db2c6
[root@localhost opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               web                 3461d80047f4        4 seconds ago       355MB

#刪除容器
[root@localhost opt]# docker rmi 231d40e811cd 
Untagged: nginx:latest
Deleted: sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145
Deleted: sha256:dc8adf8fa0fc82a56c32efac9d0da5f84153888317c88ab55123d9e71777bc62
Deleted: sha256:77fcff986d3b13762e4777046b9210a109fda20cb261bd3bbe5d7161d4e73c8e
Deleted: sha256:831c5620387fb9efec59fc82a42b948546c6be601e3ab34a87108ecf852aa15f
[root@localhost opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

#批量刪除容器,關閉的才能刪除
#通過awk輸出刪除第一個位置id
[root@localhost opt]# docker ps -a | awk '{print "docker rm "$1}' | bash
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
ebe894f3fdf8        paigeeworld/centos7   "/bin/bash -c 'while…"   15 minutes ago      Up 15 minutes                           ecstatic_swanson
f6be6d4fd3ba        nginx:latest          "/bin/bash"              33 minutes ago      Up 31 minutes       80/tcp              zen_kapitsa

資源控制

#cpu使用率控制
#設置容器占用cpu資源為20%
[root@localhost docker]# docker run --cpu-quota 20000 nginx:latest

#按比例,權重分配
創(chuàng)建兩個容器為c1和c2,若只有這兩個容器,設置容器的權重,是的c1和c2的cpu資源占比為33.3%和66.7%
docker run -itd --name c1 --cpu-shares 512 nginx:latest
docker run -itd --name c2 --cpu-shares 1024 nginx:latest
[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
d28b1d73b0ed        nginx:latest        "nginx -g 'daemon of…"   6 seconds ago       Up 5 seconds               80/tcp              c2
de49e4d6b4f9        nginx:latest        "nginx -g 'daemon of…"   17 seconds ago      Up 16 seconds              80/tcp              c1
35cb117c9cc7        nginx:latest        "nginx -g 'daemon of…"   6 minutes ago       Exited (0) 5 minutes ago                       dazzling_goldberg
2286b99c2c6d        nginx:latest        "/bin/bash"              7 minutes ago       Up 7 minutes               80/tcp              flamboyant_booth

#限制容器使用指定的cpu,0,1核心數(shù)為2
[root@localhost docker]# docker run --name c3 --cpuset-cpus 0,1 nginx:latest 
[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS               NAMES
83e56a65c604        nginx:latest        "nginx -g 'daemon of…"   About a minute ago   Exited (0) 52 seconds ago                       c3

#對blkio某一塊磁盤的讀寫的限制
--device-read-bps   限制讀某個設備的bps(數(shù)據(jù)量)
--device-write-bps  限制寫入某個設備的bps
--device-read-iops  限制讀某個設備的ipos(次數(shù))
--device-write-iops  限制寫某個設備的ipos

[root@localhost docker]# docker run -d --device-write-bps /dev/sda:30mb nginx:latest 
1a386d9c306baa36c02edda2df793ff673b46f4ace4e5ee5f72177d8cd4a3d42
[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
1a386d9c306b        nginx:latest        "nginx -g 'daemon of…"   4 seconds ago    

docker數(shù)據(jù)卷管理

數(shù)據(jù)管理操作
方便查看容器內(nèi)產(chǎn)生的數(shù)據(jù)
多容器間實現(xiàn)數(shù)據(jù)共享
兩種管理方式
數(shù)據(jù)卷 :宿主機和容器之間的數(shù)據(jù)共享
數(shù)據(jù)卷容器  :容器和容器之間的數(shù)據(jù)共享

[root@localhost ~]# docker pull centos

#數(shù)據(jù)卷
[root@localhost ~]# docker run -v /var/www:/data1 --name web1 -it centos /bin/bash
#-v指定宿主機的目錄,:連接容器中的目錄,-it,標準型輸出,登錄終端
[root@e95aad3dee7a /]# ls
bin    dev  home  lib64       media  opt   root  sbin  sys  usr
data1  etc  lib   lost+found  mnt    proc  run   srv   tmp  var
[root@e95aad3dee7a /]# cd data1/
[root@e95aad3dee7a data1]# echo "123" > chen01.txt
[root@e95aad3dee7a data1]# ls
chen01.txt
[root@e95aad3dee7a data1]# exit
exit
[root@localhost ~]# cd /var/www/
[root@localhost www]# ls
chen01.txt
[root@localhost www]# cat chen01.txt 
123

#數(shù)據(jù)卷容器
[root@localhost www]# docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash
[root@a0687fef8d8f /]# ls
bin    data2  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
data1  dev    home  lib64  media       opt  root  sbin  sys  usr
[root@a0687fef8d8f /]# cd data1
[root@a0687fef8d8f data1]# echo "111" > 111.txt
[root@a0687fef8d8f data1]# cd ../data2/
[root@a0687fef8d8f data2]# echo "222" > 222.txt
[root@a0687fef8d8f data2]# exit
#新容器掛載到我們剛才創(chuàng)建的web100容器,web100提供兩個共享目錄
[root@localhost www]# docker run -it --volumes-from web100 -it centos /bin/bash
[root@7a360567847b /]# ls
bin    data2  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
data1  dev    home  lib64  media       opt  root  sbin  sys  usr
[root@7a360567847b /]# cd data1/
[root@7a360567847b data1]# ls
111.txt
[root@7a360567847b data1]# cd ../data2/
[root@7a360567847b data2]# ls
222.txt
#端口映射,-P隨機映射端口,-p指定自己設置的映射端口 
docker run -d -P httpd:centos
docker run -d -p 23764:80 httpd:centos

容器互聯(lián)(使用centos鏡像)

#創(chuàng)建并運行容器取名為web1,端口號自動映射
docker run -itd -P --name web1 centos /bin/bash 
#創(chuàng)建并運行容器取名web2
docker run -itd -P --name web2 --link web1:web1 centos /bin/bash
進web2容器ping web1
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ca605a29a8f5        centos              "/bin/bash"         15 seconds ago      Up 11 seconds                           web2
0e46fd7a0f96        centos              "/bin/bash"         42 seconds ago      Up 41 seconds                           web1
[root@localhost ~]# docker exec it ca605a29a8f5 /bin/bash
Error: No such container: it
[root@localhost ~]# docker exec -it ca605a29a8f5 /bin/bash
[root@ca605a29a8f5 /]# ping web1
PING web1 (172.17.0.2) 56(84) bytes of data.
64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.087 ms
64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.120 ms
64 bytes from web1 (172.17.0.2): icmp_seq=3 ttl=64 time=0.046 ms
64 bytes from web1 (172.17.0.2): icmp_seq=4 ttl=64 time=0.060 ms
64 bytes from web1 (172.17.0.2): icmp_seq=5 ttl=64 time=0.051 ms
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI