1. 程式人生 > >docker安裝與使用

docker安裝與使用

運行 linux中 最小 訪問 端口映射 containe alt onf 公有

一,容器概念

容器三大基本概念
鏡像 image
容器 container
倉庫 repository
docker整個生命周期就是這三個概念。

docker鏡像

image相當於一個root文件系統,比如官方鏡像 ubuntu:14.04 就包含了完整的一套 Ubuntu 14.04 最小系統的 root 文件系統。

image的分層存儲

因為鏡像包含完整的root文件系統,體積是非常龐大的,因此docker在設計時按照Union FS的技術,將其設計為分層存儲的架構。
鏡像不是ISO那種完整的打包文件,鏡像只是一個虛擬的概念,他不是一個完整的文件,而是由一組文件組成,或者多組文件系統聯合組成。

docker容器

image和container的關系,就像面向對象程序設計中的 類和實例一樣,鏡像是靜態的定義(class),容器是鏡像運行時的實體(object)。
容器可以被創建、啟動、停止、刪除、暫停

docker倉庫

鏡像構建完成後,可以很容易的在宿主機上運行,如果要在其他服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務。docker registry就是這樣的服務。
一個docker registry可以包含多個倉庫(repository),每個倉庫有多個tag(標簽),每個標簽對應一個鏡像。
一個倉庫包含同一個軟件不同版本的鏡像,標簽就是用於標記版本的。

ubantu:14.04
ubantu:16.05
不指定tag的話默認是
ubantu:latest
倉庫名海會以 bob/nginx-proxy形式出現,表明docker registry多用戶環境下的 用戶名/軟件名

docker Registry

Docker Registry 公開服務是開放給用戶使用、允許用戶管理鏡像的 Registry 服 務。一般這類公開服務允許用戶免費上傳、下載公開的鏡像,並可能提供收費服務 供用戶管理私有鏡像。

最常使用的 Registry 公開服務是官方的 Docker Hub,這也是默認的 Registry,並 擁有大量的高質量的官方鏡像。

除此以外,還有 CoreOS 的 Quay.io,CoreOS 相 關的鏡像存儲在這裏;Google 的 Google Container Registry,Kubernetes 的鏡像 使用的就是這個服務。
由於某些原因,在國內訪問這些服務可能會比較慢。
國內的一些雲服務商提供了針 對 Docker Hub 的鏡像服務(Registry Mirror),這些鏡像服務被稱為加速器。常見 的有 阿裏雲加速器、DaoCloud 加速器、靈雀雲加速器等。
使用加速器會直接從國內的地址下載 Docker Hub 的鏡像,比直接從官方網站下載速度會提高很多。在後 面的章節中會有進一步如何配置加速器的講解。
國內也有一些雲服務商提供類似於 Docker Hub 的公開服務。比如 時速雲鏡像倉 庫、網易雲鏡像服務、DaoCloud 鏡像市場、阿裏雲鏡像庫等。

二,安裝

請遵循官方安裝方式!!!

https://docs.docker.com/install/linux/docker-ce/centos/#upgrade-docker-after-using-the-convenience-script

官方教程如下,最正確安裝docker姿勢

1.卸載舊版本
sudo yum remove docker                   docker-client                   docker-client-latest                   docker-common                   docker-latest                   docker-latest-logrotate                   docker-logrotate                   docker-selinux                   docker-engine-selinux                   docker-engine

2.設置存儲庫
sudo yum install -y yum-utils   device-mapper-persistent-data   lvm2

sudo yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo

3.安裝docker社區版
sudo yum install docker-ce
4.啟動關閉docker
systemctl start docker

5. 查看版本
docker version
技術分享圖片
#yum安裝軟件的整個過程
1.配置yum源,在/etc/yum.repos.d/下產生 docker.repo文件
2.檢查這個文件中的baseurl地址,下載的軟件包就來自於這裏
3.baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
4.查看yum到底安裝的是誰
    docker-ce-18.09.0-3.el7.x86_64.rpm                                                    2018-11-07 23:58:48 18.7 
    docker-ce-cli-18.09.0-3.el7.x86_64.rpm  
5.yum自動下載rpm包,自動解決依賴關系,非常方便
6.通過yum下載的軟件包,systemctl進行管理
7. systemctl start docker 
8.docker version查看版本



假如你配置yum官方倉庫無法安裝,由於網絡因素,那你就別配yum官方倉庫了,刪掉倉庫
通過自帶的epel源下載  yum install docker  ,只是這個版本較低,
安裝過程詳解

docker版本

Docker 是一個開源的商業產品,有兩個版本:社區版(Community Edition,縮寫為 CE)和企業版(Enterprise Edition,縮寫為 EE)。
企業版包含了一些收費服務,個人開發者一般用不到。本文的介紹都針對社區版。

系統環境準備

docker最低支持centos7且在64位平臺上,內核版本在3.10以上

[root@oldboy_python ~ 10:48:11]#uname -r
3.10.0-693.el7.x86_64

Docker鏡像加速器

https://www.daocloud.io/mirror#accelerator-doc


https://www.cnblogs.com/pyyu/p/6925606.html
#一條命令加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io


# 或者也可以手動
vim /etc/docker/daemo.json
寫入
{"registry-mirrors": ["http://95822026.m.daocloud.io"]}

三,使用

1,基本命令

啟動docker

systemctl  start/restart/stop  docker

基本命令

1.docker加速器,加速鏡像下載
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
2.獲取docker鏡像
docker search ubuntu   #查找ubuntu鏡像
docker pull ubuntu  #下載ubuntu鏡像
3.查看docker存在哪些鏡像
docker image ls
docker images 
4.刪除鏡像文件
    1.刪除容器相關記錄
        docker rm  容器id 

    2.刪除鏡像記錄
       docker  rmi 鏡像名(鏡像id)
    
    3.批量刪除容器記錄
    docker rm `docker ps -aq` 
    
5.檢查容器進程(存活)
docker ps 
6.檢查容器進程記錄(掛掉的)
docker ps -a 
7. 運行鏡像,產生容器
docker run hello-world 
8.交互式運行docker容器
docker run -it --rm ubuntu bash 
    docker run就是運行容器的命令。
    參數
     -it : -i 是交互式操作,-t是終端
     -rm  :   容器退出後將其刪除。也可以不指定參數,手動docker rm,使用-rm可以避免浪費空間。
     ubuntu:14.04   這指的是鏡像文件
     bash   :  指定用交互式的shell,因此需要bash命令

後臺模式啟動docker

-d參數:後臺運行容器,返回容器ID

# docker在centos中運行一段shell腳本,後臺運行
docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done" # 返回結果
c0283f1077d16a2bf2597e269d51a02815334f7390f18a62ed7a4ba07f351b65
#檢查容器進程docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c0283f1077d1 centos "/bin/sh -c ‘while..." 6 seconds ago Up 5 seconds fervent_turing

查看容器內的標準輸出

docker logs c02

停止容器

docker stop c02
#此時容器進程不存在
docker ps

啟動容器

docker start c02
#檢查容器進程
docker ps
刪除容器
docker rm c02

2,提交創建自定義的鏡像(docker container commit)

1.我們進入交互式的centos容器中,發現沒有vim命令
docker run -it centos
2.在當前容器中,安裝一個vim
yum install -y vim
3.安裝好vim之後,exit退出容器
exit
4.查看剛才安裝好vim的容器記錄
docker container ls -a
5.提交這個容器,創建新的image
docker commit 059fdea031ba sss/centos-vim
6.查看鏡像文件
[root@master /home]docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sss/centos-vim   latest              fd2685ae25fe        5 minutes ago       348MB

3,搭建簡單web應用,外部訪問容器

容器中可以運行網絡應用,但是要讓外部也可以訪問這些應用,可以通過-p或-P參數指定端口映射。

-P 參數會隨機映射端口到容器開放的網絡端口
#docker run -d -P training/webapp python app.py

檢查映射的端口

#宿主機ip:32768 映射容器的5000端口
[root@oldboy_python ~ 16:34:02]#docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cfd632821d7a training/webapp "python app.py" 21 seconds ago Up 20 seconds 0.0.0.0:32768->5000/tcp brave_fermi

查看容器日誌信息

#不間斷顯示log
docker logs -f cfd

也可以通過-p參數指定映射端口:常用

#指定服務器的9000端口,映射到容器內的5000端口
[root@oldboy_python ~ 16:46:13]#docker run -d -p 9000:5000 training/webapp python app.py c0b5a6278d0f4f2e9b9eba8680451111d8b911b61de0c37ea64cb337aefb854e

訪問服務器的9000端口

(如果訪問失敗的話,檢查自己的防火墻,以及雲服務器的安全組)

技術分享圖片

查看指定容器的端口映射

#docker port c0b
5000/tcp -> 0.0.0.0:9000

查看容器內的進程

#docker top c0b
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3926                3912                0                   16:46               ?                   00:00:00            python app.py

四,發布docker image到倉庫

1,docker hub公有鏡像發布

1.docker提供了一個類似於github的倉庫dockerhub,
網址https://hub.docker.com/需要註冊使用
2.註冊docker id後,在linux中登錄dockerhub
docker login

註意要保證image的tag是賬戶名,如果鏡像名字不對,需要改一下tag
docker tag ubuntu mrglh/ubuntu
語法是: docker tag 倉庫名 mrglh/倉庫名

3.推送docker image到dockerhub docker push mrglh/ubuntu
4.在dockerhub中檢查鏡像 https://hub.docker.com/

5.刪除本地鏡像,測試下載pull 鏡像文件 docker pull mrglh/ubuntu

2,私有倉庫

但是這種鏡像倉庫是公開的,其他人也是可以下載,並不安全,因此還可以使用docker registry官方提供的私有倉庫

docker私有倉庫搭建:
    docker  
    -v 參數  
    假設我要在docker容器中安裝 nginx 軟件
        nginx軟件有網頁根目錄
            root  /opt/static/nginx 
                        js 
                        css 
    這個nginx靜態文件,可以放在容器中管理
    也可以通過-v參數掛載一個數據
            -v  宿主機/opt/staic/nginx      容器/opt/static/nginx  
                        js1 js2 js3              容器中的nginx軟件,讀取數據時候,通過-v參數,去宿主機讀取
步驟詳解
1.找到本地docker文件 vim /etc/docker/daemon.json 2.寫入配置 必須註意此文件是json格式!!!註意引號 {"registry-mirrors": ["http://95822026.m.daocloud.io"], "insecure-registries":["45.32.52.244:5000"] } 3.將此文件,添加到docker服務腳本中 vim /lib/systemd/system/docker.service 4.寫入以下配置,註意!!!,寫入到[Service]配置塊中,加載此配置文件 [Service] EnvironmentFile=/etc/docker/daemon.json 5.修改了docker配置文件,重新加載docker systemctl daemon-reload 6.重啟docker服務,使得生效 systemctl restart docker 7.由於重啟了docker,所有的容器實例全掛了,因此要打開私有倉庫的容器實例 1.docker ps -a 檢查私有倉庫的容器記錄 2. docker start 私有倉庫的id 3.此時docker ps 檢查 私有倉庫服務是否啟動 8.修改本地鏡像的tag,便於推送到本地鏡像倉庫 docker tag 鏡像名 45.32.52.244:5000/鏡像名 如 docker tag ubuntu 45.32.52.244:5000/ubuntu 9.推送本地鏡像到私有docker倉庫 docker push 45.32.52.244:5000/ubuntu 10.docker私有倉庫提供了API數據可供查看 http://10.0.0.10:5000/v2/_catalog 11.可以測試刪除本地鏡像,然後從私有倉庫拖取鏡像 docker pull 45.32.52.244:5000/ubuntu

docker安裝與使用