Docker學習筆記——1 (什麼是docker、命令、鏡像、倉庫)

Docker學習筆記

他是一個容器

Docker可以幫助用戶構建和部署容器,用戶值需要把自己的應用程序或者服務打包放進容器即可。

容器是基於鏡像啓動的,容器中可以運行一個或多個進程。我們可以認爲,鏡像是Docker生命週期中的構建或打包階段,而容器則是啓動或執行階段

總結起來,docker容器就是:

  1. 一個鏡像格式
  2. 一系列標準操作
  3. 一個執行環境

Docker資源

 

安裝docker

Linux(ContOs)安裝

  1. 使用命令 uname -a  確認內核是否是3.8以上版本
  2. 使用命令sudo grep device-mapper /proc/devices 或ls -l /sys/class/misc/device-mapper/   檢查是否有Device Mapper(作爲docker的存儲驅動,爲docker提供存儲能力)
  3. vi /etc/sysconfig/selinux  將selinuxg改爲disabled  SELINUX=disabled
  4. yum install -y docker  下載docker
  5. systemctl start docker  contos7啓動docker
  6. docker info  查看docker是否啓動
  7. 將docker守護進程綁定到宿主機上的網絡接口,直接設置DOCKER_HOME環境變量來達到永久有效的方式:export DOCKER_HOST="tcp://0.0.0.0:2375"
  8. 檢測守護進程是否啓動,如果沒啓動會報沒有運行的錯誤,下列表格爲啓動的效果

[root@node129 ~]# service docker stop

Redirecting to /bin/systemctl stop  docker.service

[root@node129 ~]# service docker start

Redirecting to /bin/systemctl start  docker.service

Windows安裝

自動安裝

  1. 首先要確定安裝了curl命令,如果沒裝,執行 yum -y install curl
  2. 執行命令:curl https://get.docker.com/ | sudo sh

Docker入門

在進行操作前一定要確認docker程序已運行,功能是否正常,執行命令:docker info

該命令會返回所有容器和鏡像的數量,Docker使用執行驅動和存儲驅動以及Docker的基本配置。

而docker是基於客戶端-服務器的架構,它有一個docker程序,既能作爲客戶端也能作爲服務器端。作爲客戶端時,docker程序向Docker守護進程發送請求,然後在對返回的請求結果做處理。

 

 

創建一個容器

  1. docker run -i -t ubuntu /bin/bash 創建一個ubuntu容器(重官方提供的版本中拉取)

其中  /bin/bash命令啓動了一個Bash shell,下列圖就是用root用戶登錄到a5312w03eafc容器中。這是一個完整的ubuntu系統

簡單概述一下創建容器的全過程

首先docker會查詢本地是否存在ubuntu鏡像,如果沒有就去我們配置的鏡像網址去找(默認是Docker Hub官網上的地址),找到後會下載到本地宿主機中,隨後,Docker在文件系統內部用這個鏡像創建了一個新的容器。該容器擁有自己的網絡、IP地址,以及一個用來和宿主機進行通信的橋接網絡接口,最後我們就可以使用這個容器了。

 

使用容器

簡易操作,及命令安裝等

我們現在使用a5312w03eafc容器(ubuntu)中root用戶對他進行操作

所有命令跟該操作系統一致

hostname   查看主機名

查看hosts配置文件,下列圖中明顯可以看出來自動給他配了一個ip地址172.17.0.2

之後會發現docker提供的這個鏡像是真的難用,裏面大部分命令都沒有,比如ip、vim等,執行以下命令

apt-get update 更新

apt-get install vim -y vim文本編輯器

apt-get install net-tools ifconfig和ping命令

安裝完成後,檢查網絡配置,如下圖,這裏有lo的環回接口,有一個172.17.0.2的標準eth0網絡接口,和普通的宿主機一模一樣

檢查容器進程

關閉容器

輸入exit返回宿主機時,容器已經停止運行了!只有在指定的/bin/bash命令處於運行狀態的時候,我們的容器纔會運行。一旦退出,/bin/bash命令也就結束了,這時容器也隨之停止運行,但是容器還是存在的。運行docker ps -a查看容器列表

修改容器名稱

docker rename confident_brahmagupta dyc_docker_test

 

啓動關閉的容器

docker start dyc_docker_test    通過容器名啓動

docker start a5312e03eafc 通過ID啓動

docker stop dyc_docker_test 通過容器名關閉

docker stop a5312e03eafc 通過ID關閉

附着到正在運行的容器上

docker attach dyc_docker_test

當容器重新啓動時,會沿用docker run命令時指定的參數,因此我們的容器重新啓動後會運行一個交互式會話shell,此外,也可以用docker attach 命令,重新附着到該容器會話上

 

創建守護式容器

上面介紹的是交互式運行的容器,也可以創建長期運行的容器。守護式容器,沒有交互式會話,非常適合運行應用程序和服務。大多數時候我們都需要以守護式來運行我們的容器

docker run --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

-d 的意思是後臺運行,在這裏使用了腳本語言循環去輸出“hello world”,而且這邊沒有將主機的控制檯附着到新的容器中,先查看在運行的容器 docker ps(沒有加a的參數就只顯示正在運行的容器)

容器日誌

docker logs dyc_docker_sh     顯示最新的log

docker logs -f dyc_docker_sh 跟蹤守護式容器log

docker logs -ft dyc_docker_sh 跟蹤守護式容器log加上了時間

 

還可以在創建的時候使用日誌驅動,但這個時候在使用docker log就打印不出來日誌了,日誌已經全部重定向到Syslog中,如:

docker run --log-driver --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

           如果是在Docker Toolbox中運行Docker,應該在虛擬機中啓動Syslog守護進程

查看容器內進程

docker top dyc_docker_sh

 

docker統計信息

 

 如果你想在守護式中使用交互命令就必須使用以下命令,-t -i表示我們執行的進程創建了TTY並捕捉STDIN,注意使用交互命令時用exit退出該容器也繼續在運行,不會退出,守護式容器只能使用docker stop dyc_docker_sh停止,整體流程如第二幅圖:

docker exec -t -i dyc_docker_sh /bin/bash

 

容器自動重啓

docker run --restart=always --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

--restart=always     無論退出代碼是什麼都會重啓

--restart=on-failure:5 錯誤代碼爲非0時重啓,且重啓次數最多爲5次

 

獲取容器信息的不且是 docker ps還可以使用docker inspect dyc_docker_sh來獲取更爲信息的信息

 

簡單的對docker容器進行部署、操作以及基本的工作原理演示

 

使用Docker的鏡像和倉庫

什麼是docker鏡像

Docker鏡像是由文件系統疊加而成的,最低端是一個引導文件系統(bootfs),但是我們幾乎不會跟引導文件打交道,當一個容器啓動後,它會被移到內存中,而引導文件則會被卸載。

第二層是root文件系統(rootfs),它位於引導文件系統之上,rootfs可以是一種或多種的操作系統,在傳統的Linux系統中root文件系統最先以只讀的方式加載,等引導結束並且檢查完畢後,才改成可讀寫模式,而在docker中,root文件系統只能是隻讀狀態,並且在利用聯合加載技術,在root文件系統層上加載更多的只讀系統文件。聯合加載指的是一次同時加載多個文件系統,但是外面看起來只能看到一個文件系統,聯合加載會將各層文件系統疊加在一起,這樣最終的文件系統會包含所有底層的文件和目錄。

Docker將這樣的文件系統稱爲鏡像。一個鏡像可以放到另一個鏡像的頂部, 位於下面的鏡像稱之爲父鏡像。依次類推,直到鏡像棧的最底部,最底部的鏡像稱爲基礎鏡像。最後,當一個容器啓動時,docker會在該鏡像的最頂層加載一個讀寫文件系統。我們想在docker中運行的程序就是在這個讀寫層中執行的。

 

列出鏡像

本地鏡像都保存在Docker宿主機的 /var/lib/docker目錄下,鏡像是從倉庫下載的,倉庫位於Registry中。默認的Registry是在Docker提供運營的Docker Hub上

獲取所有鏡像列表:docker images

目前只有一個,我們在拉取一個Ubuntu 18.10鏡像

 

查看鏡像

  1. 直接從docker hub上查詢
  2. 使用docker命令:docker search ubuntu

構建鏡像

  1. 首先需要去docker gub上面註冊一個賬號,
  2. 註冊完成後在linux上輸入命令: sudo docker login
  3. 按提示輸入之前註冊好的賬號密碼,在這裏可能會出現Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?  錯誤,該錯誤是因爲我們設置的dns有問題,請把他配置成8.8.8.8(谷歌),登陸成功,如下圖

他會把用戶的個人信息保存到~/.docker/config.json中

 

使用commit構建新鏡像

  1. sudo docker run -i -t ubuntu /bin/bash  拉取或進入鏡像中
  2. 爲這個鏡像安裝apache2    apt-get -yqq update   apt-get -y install apache2
  3. 構造一個新的鏡像
    1. sudo docker commit ef6b519b1fe3 ubuntu_dyc/apache2   ( docker ps -l -q  可以查到剛剛使用的鏡像ID)
    2. sudo docker images ubuntu_dyc/apache2   查看新構建的鏡像

 

使用Dockerfile構建鏡像

     在這裏並不推舉使用commit構建鏡像,推舉使用dockerfile的定義文件和docker build命令來構建鏡像,他比commit構建鏡像更具備可複製性、透明性及冥等特性

 使用dockerfile的步驟:

  1. 創建一個存放Dockerfile的文件夾,並編寫Dockerfile文件
    1. mkdir static_web
    2. cd static_web
    3. touch Dockerfile
    4. vim Dockerfile

FROM ubuntu:14.04

MAINTAINER dyc "[email protected]"

RUN apt-get update && apt-get install -y nginx

RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html

EXPOSE 80

 

  1. docker build -t dyc/static_web:v1 .   

執行build命令時,Dockerfile中所有的指令都會被提交,並且在該命令成功結束後返回一個新鏡像,其中dyc爲倉庫名static_web鏡像名v1是標籤    請注意上面的命令  dyc.static_web 後面還有一個點.  這個代表他執行的位置,.代表當前目錄

 

  1. 查看鏡像是否存在

 

 

問題總結

1.

 

  1. docker對contos7的兼容度不夠,初始contos的內核是3.10版本,必須進行升級,升級後,內核爲:CentOS Linux release 7.6.1810 (Core)
  1. yum clean all
  2. Yum update

 

命令收集

service docker start

開啓服務

service docker stop

關係服務

docker info

查看docker基本信息

docker version

查看版本號

docker run -i -t ubuntu /bin/bash

創建新容器

docker image ls

查看鏡像文件

Docker rmi -f 鏡像ID

刪除鏡像

docker rm  容器名

刪除容器

docker container ls

列出hello-world在顯示其消息後退出的容器(由圖像生成)

docker ps -a

查看容器列表

docker run --name xxx -i -t ubuntu /bin/bash

創建一個名稱爲xxx的容器,如果未加命名,則用容器ID代替

docker rename 原容器名 新容器名

修改容器名稱

docker start 容器名(ID名)

啓動容器

docker stop 容器名(ID名)

關閉容器

docker attach dyc_docker_test

交互式容器如果啓動後,附着到正在運行的容器上

docker run --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

創建守護式容器  -d爲後臺運行的意思

docker logs dyc_docker_sh    

docker logs -f dyc_docker_sh

docker logs -ft dyc_docker_sh

 

顯示最新的log

跟蹤守護式容器log

跟蹤守護式容器log加上了時間

 

docker run --log-driver --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

啓用日誌驅動,使日誌重定向到Syslog中去,在使用docker logs 命令將差不到日誌

docker pull fedora:20

 

sudo docker login

登陸docker賬號,如果沒有創建,請到docker gub上註冊

Sudo docker commit 鏡像ID ubuntu_dyc/apa

Commit方式構建新鏡像

sudo docker build -t dyc/static_web:v1 .  

首先創建Dockerfile文件,並編輯該文件之後

使用Dockerfile創建鏡像,後面的點是相對路徑

 

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