技能篇:docker的簡易教程
虛擬機技術(shù)每家公司發(fā)展到一定規(guī)模都必須考慮的,更好的環(huán)境隔離,更好的事故排查,更好的服務部署
docker的原理
docker更換阿里源
docker容器的相關(guān)命令
Dockerfile文件編寫
docker鏡像的相關(guān)命令
1 docker的原理
Docker 利用Linux 中的核心分離機制,例如Cgroups,以及Linux的核心Namespace(名字空間)來創(chuàng)建獨立的容器。一句話概括起來Docker就是利用Namespace做資源隔離,用Cgroup做資源限制,利用Union FS做容器文件系統(tǒng)的輕量級虛擬化技術(shù)。Docker容器的本質(zhì)還是一個直接運行在宿主機上面的特殊進程,看到的文件系統(tǒng)是隔離后的,但是操作系統(tǒng)內(nèi)核是共享宿主機OS,所以說Docker是輕量級的虛擬化技術(shù)
docker 鏡像分層
docker 容器,理解為一個或多個運行進程,而這些運行進程將占有相應的內(nèi)存,相應的CPU計算資源,相應的虛擬網(wǎng)絡設(shè)備以及相應的文件系統(tǒng)資源。而 docker 鏡像,則像一個未運行的軟件包,為 docker 容器的運行提供文件資源。
docker 鏡像是分層的。啟動鏡像時,一個新的可寫層會加載到鏡像的頂層。這一層通常稱為"容器層",之下是"鏡像層",可能存在多個層。容器層可以讀寫,容器所有發(fā)生文件變更寫都發(fā)生在這一層。鏡像層只允許讀取,read-only
在容器層的文件增刪操作,命令安裝,都會被記錄下來。我們可以通過 commit 命令來創(chuàng)建一個新的鏡像
2 docker 更換阿里源
# vi /etc/apt/sources.list ~~更新源 # sudo apt-get clean # sudo apt-get update ~~ 安裝vim # apt-get install vim
ubuntu 18 的阿里鏡像文件。使用下面的數(shù)據(jù)替換原 sources.list 里的數(shù)據(jù)
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容器的相關(guān)命令
run 實例化容器
創(chuàng)建一個新的容器并運行:
docker run [options] image [command]
。image 可以是鏡像ID 也可以是倉庫名+Tag名:repository[:tag]
options 常用參數(shù) -i 以交互模式運行容器,通常與 -t 同時使用 -t 為容器重新分配一個偽輸入終端,通常與 -i 同時使用 -d 后臺運行容器,并返回容器ID --name=<name> 為容器指定一個名稱 -p 指定端口映射,格式為:主機(宿主)端口:容器端口 --net="bridge" 指定容器的網(wǎng)絡連接類型,支持bridge/host/none/container: 四種類型 -e ="v" 設(shè)置環(huán)境變量
示例
[root@lwl]# docker run -it -p 80:80 --name mynginx nginx:latest /bin/bash root@b8573233d675:/# ~~ 如果容器的啟動命令是依賴偽終端執(zhí)行,則需要 -it,如 ubuntu:14.04 鏡像 ~~ 沒有依賴偽終端執(zhí)行的啟動命令,可去掉-it,因為-d 參數(shù)會直接返回容器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 :根據(jù)條件過濾顯示的內(nèi)容。 --format :指定返回值的模板文件。 -l :顯示最近創(chuàng)建的容器。 -n :列出最近創(chuàng)建的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 在運行的容器中執(zhí)行命令
docker exec [options] container command -d :分離模式: 在后臺運行 -i :即使沒有附加也保持STDIN 打開 -t :分配一個偽終端 ~~ 在容器 mynginx 中以交互模式執(zhí)行容器內(nèi) /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:指定基礎(chǔ)鏡像,必須為第一個命令,格式: FROM <image> FROM <image>:<tag> // 2 MAINTAINER: 維護者信息 格式: MAINTAINER <name> // 3 ENV:設(shè)置環(huán)境變量 格式 // 4 ARG:用于指定傳遞給構(gòu)建運行時的變量 格式: ARG <name>[=<default value>] // 5 WORKDIR:工作目錄,類似于cd命令 格式: WORKDIR /path/to/workdir ENV <key>=<value // 6 ADD:將本地文件添加到容器中,可以訪問網(wǎng)絡資源,類似wget ADD <src>... <dest> // 7 COPY:功能類似ADD,但是是不會自動解壓文件 // 8 RUN:構(gòu)建鏡像時執(zhí)行的命令 格式 RUN <command> // 9 CMD:構(gòu)建容器后調(diào)用,也就是在容器啟動時才進行調(diào)用 CMD command param1 param2 (執(zhí)行shell內(nèi)部命令) // 10 ENTRYPOINT:配置容器,使其可執(zhí)行化 ENTRYPOINT command param1 param2 (shell內(nèi)部命令)
Dockerfile 示例
# 基礎(chǔ)鏡像 FROM centos # 維護者信息 MAINTAINER tianfeiyu #ENV 設(shè)置環(huán)境變量 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 執(zhí)行以下命令 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 鏡像的相關(guān)命令
鏡像查看列舉:
docker images
鏡像搜索:
docker search <imageName>
;imageName 是 repository[:tag] 的模糊詞拉?。?code style="box-sizing: inherit; margin: 0px 3px; padding: 3px 4px; border: none; border-radius: 4px; background: rgb(246, 246, 246);">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
構(gòu)建鏡像
~~ 根據(jù) Dockerfile 構(gòu)建鏡像 # docker build -t repository[:tag] dir # docker build -t lwl/ubuntu:v1 . options 參數(shù) --build-arg=[] 設(shè)置鏡像創(chuàng)建時的變量 -t 鏡像的名字及標簽,通常 name:tag 或者 name 格式 -f 指定要使用的Dockerfile路徑
~~ 根據(jù)正在運行的 container 容器 構(gòu)建鏡像 # docker commit [options] container repository[:tag] options 參數(shù) -a :提交的鏡像作者; -c :使用Dockerfile指令來創(chuàng)建鏡像; -m :提交時的說明文字; -p :在commit時,將容器暫停
推送:
docker push repository[:tag]
歡迎指正文中錯誤
創(chuàng)作不易,如果對大家有所幫助,希望大家點贊支持,有什么問題也可以在評論區(qū)里討論