技能篇:docker的簡易教程

虛擬機技術每家公司發展到必定規模都必須考慮的,更好的環境隔離,更好的事故排查,更好的服務部署html

  • docker的原理
  • docker更換阿里源
  • docker容器的相關命令
  • Dockerfile文件編寫
  • docker鏡像的相關命令

1 docker的原理

  • Docker 利用Linux 中的核心分離機制,例如Cgroups,以及Linux的核心Namespace(名字空間)來建立獨立的容器。一句話歸納起來Docker就是利用Namespace作資源隔離,用Cgroup作資源限制,利用Union FS作容器文件系統的輕量級虛擬化技術。Docker容器的本質仍是一個直接運行在宿主機上面的特殊進程,看到的文件系統是隔離後的,可是操做系統內核是共享宿主機OS,因此說Docker是輕量級的虛擬化技術

docker 鏡像分層

  • docker 容器,理解爲一個或多個運行進程,而這些運行進程將佔有相應的內存,相應的CPU計算資源,相應的虛擬網絡設備以及相應的文件系統資源。而 docker 鏡像,則像一個未運行的軟件包,爲 docker 容器的運行提供文件資源。
  • docker 鏡像是分層的。啓動鏡像時,一個新的可寫層會加載到鏡像的頂層。這一層一般稱爲"容器層",之下是"鏡像層",可能存在多個層。容器層能夠讀寫,容器全部發生文件變動寫都發生在這一層。鏡像層只容許讀取,read-only
  • 在容器層的文件增刪操做,命令安裝,都會被記錄下來。咱們能夠經過 commit 命令來建立一個新的鏡像

201912892111906.jpg

2 docker 更換阿里源

# vi /etc/apt/sources.list
~~更新源
# sudo apt-get clean
# sudo apt-get update
~~ 安裝vim
# apt-get install vim
複製代碼
  • ubuntu 18 的阿里鏡像文件。使用下面的數據替換原 sources.list 裏的數據
deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe
複製代碼

3 docker容器的相關命令

run 實例化容器

  • 建立一個新的容器並運行:docker run [options] image [command]。image 能夠是鏡像ID 也能夠是倉庫名+Tag名:repository[:tag]
options 經常使用參數
-i              以交互模式運行容器,一般與 -t 同時使用
-t              爲容器從新分配一個僞輸入終端,一般與 -i 同時使用
-d              後臺運行容器,並返回容器ID
--name=<name>   爲容器指定一個名稱
-p              指定端口映射,格式爲:主機(宿主)端口:容器端口
--net="bridge"  指定容器的網絡鏈接類型,支持bridge/host/none/container: 四種類型
-e ="v"         設置環境變量
複製代碼
  • 示例
[root@lwl]# docker run -it -p 80:80 --name mynginx nginx:latest /bin/bash
root@b8573233d675:/# 

~~ 若是容器的啓動命令是依賴僞終端執行,則須要 -it,如 ubuntu:14.04 鏡像 
~~ 沒有依賴僞終端執行的啓動命令,可去掉-it,由於-d 參數會直接返回容器ID
[root@lwl]# docker run -it -d -p 80:80 --name mynginx nginx:latest 
315cc38afc2f06abb5a2fbb075ebca16455367b2de685cf0c5ba828ab62dd5a1
[root@lwl]# 複製代碼

start、stop、restart 啓動與中止

~~ 啓動已被中止的容器 。 container 能夠是容器名 也能夠是容器ID
# docker start container
~~ 中止運行中的容器
# docker stop container
~~ 重啓容器
# docker restart container
複製代碼

ps 容器查詢

// 列出容器
# docker ps [-options]

-a :顯示全部的容器,包括未運行的。
-f :根據條件過濾顯示的內容。
--format :指定返回值的模板文件。
-l :顯示最近建立的容器。
-n :列出最近建立的n個容器。
--no-trunc :不截斷輸出。
-q :靜默模式,只顯示容器編號。
-s :顯示總的文件大小

// 至關於在 container 容器裏使用 top命令
# docker top container
複製代碼

rm 刪除容器

# docker rm container 
複製代碼

cp 文件傳輸

  • 本機和 docker 容器以前的文件傳輸
~~ 複製本地目錄 srcPath 到 容器 container 的目錄 destPath
# docker cp srcPath container:destPath
~~ 複製容器 container 的目錄 srcPath 到本地目錄 destPath
# docker cp container:destPath srcPath
複製代碼

exec 在運行的容器中執行命令

docker exec [options] container command 

-d :分離模式: 在後臺運行
-i :即便沒有附加也保持STDIN 打開
-t :分配一個僞終端

~~ 在容器 mynginx 中以交互模式執行容器內 /root/run.sh 腳本
# docker exec -it mynginx /bin/sh /root/run.sh
~~ 在容器 mynginx 中開啓一個交互模式的終端
# docker exec -it mynginx /bin/bash
複製代碼

logs 獲取容器的日誌

docker logs [options] container

-f      跟蹤日誌輸出
--since 顯示某個開始時間的全部日誌
-t      顯示時間戳
--tail  僅列出最新N條容器日誌
 [root@lwl]# docker logs -f mynginx
192.168.239.1 - - [10/Jul/2021:16:53:33 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
2021/07/10 16:53:33 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.239.1, server: localhost, request: "GET /favicon.ico HTT
....
複製代碼

4 Dockerfile文件編寫

# docker build -f /path/to/a/Dockerfile
複製代碼
// 1 FROM:指定基礎鏡像,必須爲第一個命令,格式:
FROM <image>
FROM <image>:<tag>
// 2 MAINTAINER: 維護者信息 格式:
MAINTAINER <name>
// 3 ENV:設置環境變量 格式
// 4 ARG:用於指定傳遞給構建運行時的變量 格式:
ARG <name>[=<default value>]
// 5 WORKDIR:工做目錄,相似於cd命令 格式:
WORKDIR /path/to/workdir
ENV <key>=<value
// 6 ADD:將本地文件添加到容器中,能夠訪問網絡資源,相似wget
ADD <src>... <dest>
// 7 COPY:功能相似ADD,可是是不會自動解壓文件
// 8 RUN:構建鏡像時執行的命令 格式
RUN <command>
// 9 CMD:構建容器後調用,也就是在容器啓動時才進行調用
CMD command param1 param2 (執行shell內部命令)
// 10 ENTRYPOINT:配置容器,使其可執行化
ENTRYPOINT command param1 param2 (shell內部命令)
複製代碼
  • Dockerfile 示例
# 基礎鏡像
FROM centos
# 維護者信息
MAINTAINER tianfeiyu 
#ENV 設置環境變量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在當前目錄下,拷過去會自動解壓
ADD nginx-1.8.0.tar.gz /usr/local/  
ADD epel-release-latest-7.noarch.rpm /usr/local/  
 # RUN 執行如下命令 
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
 # WORKDIR 至關於cd
WORKDIR /usr/local/nginx-1.8.0 

RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
 # CMD 運行如下命令
CMD ["nginx"]
複製代碼

5 docker 鏡像的相關命令

  • 鏡像查看列舉:docker images
  • 鏡像搜索:docker search <imageName>;imageName 是 repository[:tag] 的模糊詞
  • 拉取:docker pull repository[:tag]
  • 刪除單個鏡像:docker rmi 鏡像ID 或者docker rmi repository[:tag]
  • 給鏡像打別名(標籤):docker tag oldRepository[/:oleTag] newRepository][/:newTag]
# docker tag ubuntu:15.10 lwl/ubuntu:v3
複製代碼
  • 構建鏡像
~~ 根據 Dockerfile 構建鏡像
# docker build -t repository[:tag] dir
# docker build -t lwl/ubuntu:v1 . 

options 參數
--build-arg=[]   設置鏡像建立時的變量
-t               鏡像的名字及標籤,一般 name:tag 或者 name 格式
-f               指定要使用的Dockerfile路徑
複製代碼
~~ 根據正在運行的 container 容器 構建鏡像
# docker commit [options] container repository[:tag]

options 參數
-a :提交的鏡像做者;
-c :使用Dockerfile指令來建立鏡像;
-m :提交時的說明文字;
-p :在commit時,將容器暫停
複製代碼
  • 推送:docker push repository[:tag]

歡迎指正文中錯誤

創做不易,若是對你們有所幫助,但願你們點贊支持,有什麼問題也能夠在評論區裏討論😄~nginx

若是你以爲這篇文章對你有點用的話,麻煩請給咱們的開源項目點點star:       http://github.crmeb.net/u/defu   不勝感激 !
來自 「開源獨尊 」 ,連接:   https://ym.baisou.ltd/post/798.html
相關文章
相關標籤/搜索