【整理】【docker學習基本知識1】

基於前人文章的整理,原文鏈接見文章內說明

docker-io, docker-engin 是以前早期的版本,版本號是 1.*,

默認centos7 安裝的是docker-io,最新版是 1.13。

docker-ce 是社區版本,適用於剛剛開始docker 和開發基於docker研發的應用開發者或者小型團隊。

Ubuntu默認安裝的是docker-ce.docker-ee 是docker的企業版,適用於企業級開發,同樣也適用於開發、分發和運行商務級別的應用的IT 團隊。

docker-ce 和docker-ee 的可用版本是根據year-month 來的.

————————————————

原文鏈接:https://blog.csdn.net/the_fool_/article/details/82744127

基本概念主要有三個:

鏡像(Image)   

● 一個只讀的模板,鏡像可以用來創建 Docker 容器   

● 用戶基於鏡像來運行自己的容器。鏡像是基於 Union 文件系統的層式結構   

● 可以簡單創建或更新現有鏡像,或者直接下載使用其他人的。可以理解爲生成容器的『源代碼』

容器(Container)   

● 容器是從鏡像創建的運行實例,在啓動的時候創建一層可寫層作爲最上層(因爲鏡像是隻讀的)   

● 可以被啓動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺   

● 可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序

倉庫(Registry)   

● 集中存放鏡像文件的場所,可以是公有的,也可以是私有的   

● 最大的公開倉庫是 Docker Hub   

● 國內的公開倉庫包括 Docker Pool 等   

● 當用戶創建了自己的鏡像之後就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了   

● Docker 倉庫的概念跟 Git 類似,註冊服務器可以理解爲 GitHub 這樣的託管服務

 

Docker 採用的是客戶端/服務器架構,客戶端只需要向 Docker 服務器或守護進程發出請求即可完成各類操作。那麼問題來了,我們能用 Docker 來做什麼呢?我們可以:

● 統一、優化和加速本地開發和構建流程

● 保證不同的環境中可以得到相同的運行結果

● 創建隔離環境用於測試Docker 可以提供的隔離有:

● 文件系統隔離:每個容器都有自己的 root 文件系統

● 進程隔離:每個容器都運行在自己的進程環境中

● 網絡隔離:容器間的虛擬網絡接口和 IP 地址都是分開的

● 資源隔離和分組:使用 cgroups 將 CPU 和內存之類的資源獨立分配給每個 Docker 容器

docker容器可以理解爲在沙盒中運行的進程。這個沙盒包含了該進程運行所必須的資源,包括文件系統、系統類庫、shell 環境等等。但這個沙盒默認是不會運行任何程序的。你需要在沙盒中運行一個進程來啓動某一個容器。這個進程是該容器的唯一進程,所以當該進程結束的時候,容器也會完全的停止。

 

  1. 通過 uname -r 命令查看你當前的內核版本(必須高於3.10)
  2. 更新yum源:sudo yum update

yum update:升級所有包同時也升級軟件和系統內核

yum upgrade:只升級所有包,不升級軟件和系統內核

將升級的內核回退(CentOS7.7 回退到原來的7.5):

cat /boot/efi/EFI/centos/grub.cfg|grep menuentry

grub2-set-default 'CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)'

grub2-editenv list

  1. 卸載舊版本:sudo yum remove docker docker-common docker-selinux docker-engine
  2. 依賴包安裝:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. 添加yum源:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. 查看版本庫: yum list docker-ce --showduplicates | sort -r
  5. 安裝:sudo yum install docker-ce
  6. 啓動並開機啓動:sudo systemctl start docker   sudo systemctl enable docker
  7. 查看是否安裝成功:docker version

 

查看是否安裝成功

yum list installed | grep docker

查看是否啓動成功

systemctl status docker

使用docker命令,查看docker已經安裝的鏡像

docker images

顯示docker系統的信息  

docker info  

 

官方地址爲國外地址安裝緩慢: https://hub.docker.com/_/centos 

國內地址:http://mirrors.ustc.edu.cn/centos/

修改鏡像文件拉取地址爲ustc

vi /etc/docker/daemon.json {"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}

 

查找docker鏡像示例:

docker search centos

docker search ubuntu

docker search windows

docker search wine

docker search arm

docker search python

docker search dpdk

docker search pktgen

docker search cuda

docker search tensorflow

 

使用docker pull 拉取docker 倉庫中centos鏡像

docker pull centos

docker pull ubuntu

docker pull tensorflow/tensorflow

 

使用docker命令,查看docker已經安裝的鏡像

docker images

啓動一個容器

docker run -i -t ubuntu /bin/bash

刪除一個容器

docker rm <CONTAINER ID>

顯示一個鏡像的歷史

docker history  centos

刪除一個或者多個鏡像

docker rmi image_name

# 列出當前所有正在運行

container  $docker ps  

# 列出所有的

container  $docker ps -a  

# 列出最近一次啓動的

container  $docker ps -l  

# 保存對容器的修改; -a, --author="" Author; -m, --message="" Commit message

$docker commit ID new_image_name

image相當於類,container相當於實例,不過可以動態給實例安裝新軟件,然後把這個containercommit命令固化成一個image

 

# 在容器中運行"echo"命令,輸出"hello word"

$docker run image_name echo "hello word"

# 交互式進入容器中

$docker run -i -t image_name /bin/bash

# 在容器中安裝新的程序

$docker run image_name apt-get install -y app_name

 

docker run命令行參數解析

-a, --attach=[] 登錄容器(必須是以docker run -d啓動的容器)

-w, --workdir="" 指定容器的工作目錄

-c, --cpu-shares=0 設置容器CPU權重,在CPU共享場景使用

-e, --env=[] 指定環境變量,容器中可以使用該環境變量

-m, --memory="" 指定容器的內存上限

-P, --publish-all=false 指定容器暴露的端口

-p, --publish=[] 指定容器暴露的端口

-h, --hostname="" 指定容器的主機名

-v, --volume=[] 給容器掛載存儲卷,掛載到容器的某個目錄

--volumes-from=[] 給容器掛載其他容器上的卷,掛載到容器的某個目錄

--cap-add=[] 添加權限,權限清單詳見:http://linux.die.net/man/7/capabilities

--cap-drop=[] 刪除權限,權限清單詳見:http://linux.die.net/man/7/capabilities

--cidfile="" 運行容器後,在指定文件中寫入容器PID值,一種典型的監控系統用法

--cpuset="" 設置容器可以使用哪些CPU,此參數可以用來容器獨佔CPU

--device=[] 添加主機設備給容器,相當於設備直通

--dns=[] 指定容器的dns服務器

--dns-search=[] 指定容器的dns搜索域名,寫入到容器的/etc/resolv.conf文件

--entrypoint="" 覆蓋image的入口點

--env-file=[] 指定環境變量文件,文件格式爲每行一個環境變量

--expose=[] 指定容器暴露的端口,即修改鏡像的暴露端口

--link=[] 指定容器間的關聯,使用其他容器的IP、env等信息

--lxc-conf=[] 指定容器的配置文件,只有在指定

--exec-driver=lxc時使用

--name="" 指定容器名字,後續可以通過名字進行容器管理,links特性需要使用名字

--net="bridge" 容器網絡設置: bridge 使用docker daemon指定的網橋 host //容器使用主機的網絡 container:NAME_or_ID >//使用其他容器的網路,共享IP和PORT等網絡資源 none 容器使用自己的網絡(類似--net=bridge),但是不進行配置

--privileged=false 指定容器是否爲特權容器,特權容器擁有所有的capabilities

--restart="no" 指定容器停止後的重啓策略: no:容器退出時不重啓 on-failure:容器故障退出(返回值非零)時重啓 always:容器退出時總是重啓

--rm=false 指定容器停止後自動刪除容器(不支持以docker run -d啓動的容器)

--sig-proxy=true 設置由代理接受並處理信號,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

————————————————

版權聲明:本文爲CSDN博主「jigetage」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/jigetage/article/details/91438990

docker run 

案例1、運行一個簡單的容器,其中需要包含控制檯管理

[[email protected] ~]#docker run -i -t centos6.8

這個容器一執行就會進入到默認的線程”/bin/bash”,直接進入控制檯操作。當退出控制後後,容器會被終止。

案例2、運行一個在後臺執行的容器,同時,還能用控制檯管理

[[email protected] ~]#docker run -i -t -d centos6.8

這個容器一執行,會自動執行默認的線程”/bin/bash”,但是不會讓你馬上進入控制檯操作。將會在後臺執行,用docker ps 可以看到當前運行的控制檯。進入容器可是使用docker attach“container name or id”。

案例3、運行一個帶命令在後臺不斷執行的容器,不直接展示容器內部信息

[[email protected] ~]#docker run -d centos6.8  ping www.docker.com
這個容器將永久在後臺執行,因爲ping這個線程不會停止。除非你停止了ping的線程。

案例4、運行一個在後臺不斷執行的容器,同時帶有命令,程序被終止後還能重啓繼續跑,還能用控制檯管理

[[email protected] ~]#docker run -d --restart=always centos6.8  ping www.docker.com
這個容器將永久在後臺執行,因爲ping這個線程不會停止。如果你把ping這個線程終止了,那麼容器會重啓繼續執行ping功能

案例5、我們需要爲容器指定一個名稱

[[email protected] ~]#docker run -d --name=server-dbcentos6.8-mysql /usr/bin/mysql_safe -d
這時候我們這個容器的名稱爲server-db,同時激活了數據庫mysql的後臺線程,讓它不斷的跑,這時候我們的容器也不會被關閉。

案例6、我們需要讓server-http容器連接server-db容器

[[email protected] ~]#docker run -d --name=server-http --link=server-db  centos6.8-httpd /usr/bin/httpd --DFOREGROUND
這時候,我們執行了apache的服務器讓它不斷的在後臺執行,同時,在php裏配置mysql的服務器名稱爲”server-db”,直接用server-db命名就可以了。不需要輸入ip地址之類的。我們的server-http指定連接了server-db。server-db在server-http裏會被當做一個DNS解析來獲取相應的連接ip。

案例7、我們要將server-db,server-http的端口暴露出去,讓大家訪問

[[email protected] ~]#docker run -d --name=server-db -p 3306:3306 centos6.8-mysql /usr/bin/mysql_safe –d
這時候我們指定了服務器宿主機的3306端口映射到容器的3306端口,暴露出去。

[[email protected] ~]#docker run -d --name=server-http --link=server-db  -p 8080:80centos6.8-httpd /usr/bin/httpd --DFOREGROUND

這時候我們指定了服務器宿主機的8080端口映射到容器80端口,暴露出去。

案例8、我們要將宿主機的數據庫目錄/server/mysql-data掛載到server-db上

[[email protected] ~]#docker run -d --name=server-db -p 3306:3306 -v /server/mysql-data:/mysql-data centos6.8-mysql /usr/bin/mysql_safe –d
這時候,你會發現,在server-db根目錄下你會發現有一個新的文件夾mysql-data,同時裏面的文件內容和宿主機下/server/mysql-data一樣。

案9、我們希望一個容器在它的進程結束後,立馬自動刪除。

[[email protected] ~]#docker run -it --rm  centos6.8
這時候我們進入了容器的控制檯,當我們在容器內部exit退出控制檯的時候,容器將被終止,同時自動刪除。 
--------------------- 
作者:lynk-coder 
來源:CSDN 
原文:https://blog.csdn.net/kunloz520/article/details/53839237 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章