最全docker
文章對大家有幫助的話,還請點個贊
一、基礎篇
1、docker介紹及安裝
說起docker,就不的說一下現在主流的微服務框架springCloud的整體架構。從左到右開始介紹:
- PC表示客戶端,請求發(fā)起方。
- PC發(fā)起請求,到Nginx上進行轉發(fā)。(nginx通過Keepalived進行集群化,負載均衡)。
- ng轉發(fā)請求到springcloud的gateway組件上,gateway通過配置的服務進行轉發(fā)。
- 所有服務器都是注冊到注冊中心上的,請求都是通過注冊中心來尋址的。
- 內部的負載均衡是通過ribbon進行實現的。
- 配置中心進行配置文件的管理,注冊中心進行服務的管理。
- 另外,還有bus的異步處理,kafka及mq等都會實現異步。
在這架構中,咱們可以發(fā)現需要的中間件特別多,尤其是集群化的搭建,整個開發(fā)及運維成本多了好幾倍。所有,出現了docker。
1.1 什么是docker
Docker 是一個開源的應用容器引擎,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的 Linux或Windows操作系統的機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口?!景俣劝倏啤?/p>
解釋一下:docker就是一個容器服務,你可以理解為輪船上的集裝箱,每一個集裝箱(容器)都是一個可運行的組件或服務,只需要通過簡單的命令就可以運行起來進行訪問使用,節(jié)省了運維時間。
打個比方。nginx集群的搭建,除了要修改必要的配置文件外,還有安裝其他的組件keepalived,如果你那邊搭建的環(huán)境是不能聯網的局域網,那么恭喜你的運維時間又要變長,很是累人啊。
官方文檔:
? Docker是基于Go語言實現的云開源項目。
??Docker的主要目標是Build,Ship and Run Any App,Anywhere,也就是通過對應用組件的封裝、分發(fā)、部署、運行等生命周期的管理,使用戶的APP(可以是一個WEB應用或數據庫應用等等)及其運行環(huán)境能夠做到一次封裝,到處運行。
? Linux 容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發(fā)展過來的。將應用運行在 Docker 容器上面,而 Docker 容器在任何操作系統上都是一致的,這就實現了跨平臺、跨服務器。只需要一次配置好環(huán)境,換到別的機子上就可以一鍵部署好,大大簡化了操作
解決了運行環(huán)境和配置問題軟件容器,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術
1.2 docker的安裝
1.2.1 docker 安裝環(huán)境
- CentOS Docker 安裝
- Docker支持以下的CentOS版本:
- CentOS 7 (64-bit) 8
- CentOS 6.5 (64-bit) 或更高的版本
前提條件
目前,CentOS 僅發(fā)行版本中的內核支持 Docker。
Docker 運行在 CentOS 7 上,要求系統為64位、系統內核版本為 3.10 以上。
Docker 運行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系統為64位、系統內核版本為 2.6.32-431 或者更高版本。
查看自己的內核
uname命令用于打印當前系統相關信息(內核版本號、硬件架構、主機名稱和操作系統類型等)。
1.2.2 dcoker安裝
參考官方文檔安裝:官方文檔
注意:省略虛擬機的搭建
卸載原有環(huán)境:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安裝對應的依賴環(huán)境和鏡像地址
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安裝docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
最后出現 compelte,表示安裝成功
啟動docker服務
sudo systemctl start docker
查看docker的版本
sudo docker version
如果安裝過慢可以設置yum源
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum更新下即可:
yum makecache fast
設置開機啟動docker
sudo systemctl enable docker
1.3 docker 組成
-
Repository(倉庫):集中存放鏡像文件(iamges)的場所。
? 倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
??最大的公開倉庫是 Docker Hub(https://hub.docker.com/),存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括阿里云 、網易云 等 -
Registry:倉庫注冊服務器。倉庫注冊服務器上往往存放著多個倉庫。
-
image: 鏡像(Image)就是一個只讀的模板。鏡像可以用來創(chuàng)建 Docker 容器,一個鏡像可以創(chuàng)建很多容器。
-
container:容器是獨立運行的一個或一組應用。容器是用鏡像創(chuàng)建的運行實例。
它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的 Linux 環(huán)境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。容器的定義和鏡像幾乎一模一樣,也是一堆層的統一視角,唯一區(qū)別在于容器的最上面那一層是可讀可寫的。
1.4 阿里鏡像加速器
默認訪問的倉庫是在國外所以訪問速度是沒法保證的。為了更好的體驗,我們可以配置阿里云的鏡像加速器
控制臺–>產品服務–>容器服務–>容器鏡像服務—>鏡像中心–>鏡像加速器
[root@localhost ~]# cd /etc/docker
[root@localhost docker]# ll
total 8
-rw-r--r--. 1 root root 67 May 26 18:24 daemon.json
-rw-------. 1 root root 244 May 12 19:39 key.json
[root@localhost docker]# vim daemon.json
[root@localhost docker]# cat daemon.json
{
"registry-mirrors": ["https://lgspaf87.mirror.aliyuncs.com"]
}
[root@localhost docker]# sudo systemctl daemon-reload
[root@localhost docker]# sudo systemctl restart docker
[root@localhost docker]#
1.5 私有倉庫設置
本章節(jié)只有私有倉庫設置,具體的如何創(chuàng)建私有倉庫,請看高級篇
1.5.1 設置私服倉庫
#!/bin/bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"insecure-registries": ["domain:5000"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:使用tee命令會覆蓋之前的內容,建議使用vim直接文件再重新加載daemon.json文件
詳細tee命令,請看菜鳥教程:tee
1.5.2 私服倉庫搜索
搜索私有倉庫的鏡像并不能用 docker search
命令, 只能通過 http://domain:5000/v2/image_name/tags/list
查看指定鏡像存在的 tag
列表。**domain
**是ip
$ curl http://domain:5000/v2/nginx/tags/list
{"name":"nginx","tags":["latest"]}
1.5.3 下載鏡像
首先我們通過 docker rmi
將本地的鏡像刪除(取消標簽)。
$ docker rmi domain:5000/nginx
Untagged: domain:5000/nginx:latest
Untagged: domain:5000/nginx@sha256:066edc156bcada86155fd80ae03667cf3811c499df73815a2b76e43755ebbc76
再使用 docker images
確認 domain:5000/nginx
這個鏡像在本地不存在,接下來我們就可以從私有倉庫進行下載。
$ docker pull domain:5000/nginx:latest
1.5.4 上傳鏡像
docker tag REPOSITORY:TAG domain:5000/images:tag
docker push domain:5000/images:tag
#上傳鏡像私服時,直接使用pull命令不一定能成功,因為鏡像的REPOSITORY倉庫源,未設置為私服倉庫
#需要使用tag命令修改REPOSITORY倉庫源為私服倉庫源
docker tag nginx:latest domain:5000/nginx:latest
#然后才能使用 docker push 命令,記得指定
docker push domain:5000/nginx:latest
這個版本的ng我已經push到倉庫了,所以顯示已經存在
1.5.5 我的私服配置
registry-mirrors
為公共倉庫,insecure-registries
私服倉庫
{
"registry-mirrors": [
"https://registry.docker-cn.com", #docker hub 國內網站
"https://lgspaf87.mirror.aliyuncs.com", # 阿里鏡像加速器
"https://docker.mirrors.ustc.edu.cn", #中科大鏡像
"https://hub.docker.com" #dockerhub官網
],
"insecure-registries": [
"ip:5000" #個人私服
]
}
有一點需要提醒一下:本人不知道能不能
registry-mirrors、insecure-registries
同時配置。我同時配置后,重新加載配置文件后,docker就崩潰了。具體表現為:docker 重啟報錯,docker 命令無法識別。
我的解決方法:
重新修改daemon.json文件為一個地址。
刪除了 /var/lib/docker文件夾,也就是docker的數據文件。但是這樣的話操作,會使所有的鏡像、容器,等等都會消失,請謹慎操作。
具體的,如果誰知道是咋回事,麻煩留言。
私有鏡像這一章節(jié)來自:Docker 倉庫
1.6 卸載docker
# 停止docker服務
systemctl stop docker
# 卸載docker,并刪除docker數據文件
yum -y remov docker-ce
# 注意:/var/lib/docker 為docker鏡像、容器等數據文件存儲地址
rm -rf /var/lib/docker
# 重啟服務
sudo systemctl restart docker
2、docker常用命令
2.1 docker 幫助命令
命令 | 說明 |
---|---|
docker version | 查看docker版本信息 |
docker info | 查看docker信息 |
docker --help | docker幫助命令 |
2.2 鏡像命令
#列出本地主機上的鏡像
docker images
#從 docker hub 上搜索鏡像
docker search 鏡像名稱
#從docker hub 上下載鏡像
docker pull 鏡像名稱
#刪除本地鏡像
docker rmi 鏡像名稱
2.2.1 查詢本地鏡像列表
docker images
鏡像表格信息說明
選項 | 說明 |
---|---|
REPOSITORY | 表示鏡像的倉庫源 |
TAG | 鏡像的標簽 |
IMAGE ID | 鏡像ID |
CREATED | 鏡像創(chuàng)建時間 |
SIZE | 鏡像大小 |
參數 | 說明 |
---|---|
-a | 列出本地所有的鏡像 |
-q | 只顯示鏡像ID |
–digests | 顯示鏡像的摘要信息 |
–no-trunc | 顯示完整的鏡像信息 |
2.2.2 搜索服務器鏡像
docker search
docker hub 官網地址:官網地址
docker hub是Docker的在線倉庫,我們可以通過docker search 在上面搜索我們需要的鏡像
但是注意,盡量選擇可信任的鏡像,還有安裝docker的系統
參數名稱 | 描述 |
---|---|
–no-trunc | 顯示完整的描述信息 |
–limit | 分頁顯示 |
-f | 過濾條件 docker search -f STARS=5 tomcat STARS=5 就是點贊數大于5的tomcat |
注意:當前使用私有鏡像倉庫時,search命令是不起作用的,具體請看
1.5私有倉庫設置
2.2.3 下載鏡像
注意:當前不指定版本時,默認下載最新的版本,也就是latest
docker pull tomcat
#等價于
docker pull tomcat:latest
2.2.4 刪除鏡像
#刪除單個鏡像
docker rmi -f 鏡像ID
#刪除多個鏡像時,需要使用鏡像的 REPOSITORY:TAG 來表示當前鏡像
docker rmi -f 鏡像1:TAG 鏡像2:TAG
#刪除全部鏡像(包括運行中的,停止的,失敗的.....)
docker rmi -f $(docker images -qa)
#刪除none鏡像
docker rmi $(docker images \| grep "none" \| awk '{print $3}')
2.2.5 鏡像制作
關于鏡像的制作,比較麻煩,本章只講常用命令。如有需要,請直接往下翻閱
- 【3、docker的鏡像文件 】里的【3.5 將運行的容器制作為鏡像】
- 【5、dockerFile】
2.3 容器命令
2.3.1 創(chuàng)建并啟動容器
docker run [OPTIONS] IMAGE [COMMAND]
**創(chuàng)建:**創(chuàng)建容器使用的是
create
命令,但是直接使用run
運行不存在的容器時,會默認先創(chuàng)建在運行。**啟動:**直接啟動已經存在的容器,請使用
start
命令,即docker start 容器ID或者容器名稱
。**重啟:**重新啟動正在運行的容器,請使用
restart
命令,即docker restart 容器id或者名稱
。
OPTIONS中的一些參數:
options | 說明 |
---|---|
--name | “容器新名字”: 為容器指定一個名稱 |
-d | 后臺運行容器,并返回容器ID,也即啟動守護式容器 。后臺運行的容器) |
-i |
以交互模式運行容器,通常與 -t 同時使用 |
-t |
為容器重新分配一個偽輸入終端,通常與 -i 同時使用 |
-P: | 隨機端口映射 |
-p | 指定端口映射,有以下四種格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort 常用的是第三種 |
-v | 數據卷映射,默認:/宿主機絕對路徑:/容器內目錄 。具體釋義詳見下文4、docker數據卷
|
-e | 指定啟動參數值/環(huán)境變量 |
1、本表只記錄常用參數,如不滿足要求,請直接翻閱到最后【7、附錄OPTIONS參數說明】,查閱附錄表
2、具體使用,詳見【6、Docker 常用軟件的安裝】
交互式的容器
docker run -it centos /bin/bash
注意:使用交互模式后,會進入容器中,想退出容器,請使用
exit
命令或者使用快捷鍵ctrl+p+q
2.3.2 列舉運行中的容器
docker ps [options]
OPTONS可用的參數
OPTIONS | 說明 |
---|---|
-a | 列出當前所有正在運行的容器+歷史上運行過的 |
-l | 顯示最近創(chuàng)建的容器。 |
-n | 顯示最近n個創(chuàng)建的容器。 |
-q | 靜默模式,只顯示容器編號。 |
–no-trunc | 不截斷輸出。 |
2.3.3 停止及刪除容器
#停止容器
docker stop 容器ID
#強制停止容器
docker kill 容器ID
#刪除容器
docker rm 容器ID
#強制刪除所有容器
docker rm -f $(docker ps -qa)
#刪除所有的容器
docker ps -a -q | xargs docker rm
關于
xagrs
命令的解釋,請看-> 菜鳥教程:xargs命令解釋
2.3.4 進入運行中的容器
docker exec -it 容器ID /bin/bash
docker attach 容器ID
進入方式 | 說明 |
---|---|
exec | 在容器中打開新的終端,并且可以啟動新的進程 |
attach | 直接進入容器啟動命令的終端,不會啟動新的進程 |
2.3.5 查看容器詳情
docker inspect 容器ID
信息很多,就不展示了
2.3.6 查看容器日志
#查看日志
docker logs 容器ID
#查看實時日志
docker logs -f -t --since="2018-10-26" --tail=10 容器ID
-f:表示實時日志。
-t : 查看日志產生的日期。
–since : 此參數指定了輸出日志開始日期,即只輸出指定日期之后的日志。
–tail=10 : 查看最后的10條日志。
2.3.7 復制文件
有的時候文件需要從宿主機拷貝到容器中,或者是從容器拷貝到宿主機
#從容器中拷貝到宿主機
docker cp 容器ID:容器內路徑 目的地路徑
#從宿主機拷貝到容器中
docker cp 容器內路徑:容器ID 目的地路徑
2.3.8 其他命令
2.3.8.1 保存鏡像到本地
有的時候咱們部署的環(huán)境,是無法聯網了,只能從通過一個能聯網的本地虛擬機下載鏡像到本地倉庫,然后保存鏡像成tar格式到本地
#docker save -o "<path for generated tar file>" "<image name>"
docker save -o linux_image.tar linux_15
#或者是 docker save "<image ID>" > "<path for generated tar file>"
docker save 7df83bb6e638 > rocketmq-console-ng-latest.tar
2.3.8.2 加載鏡像到本地倉庫
#docker load -i "<path to image tar file>"
docker load -i rocketmq-console-ng-latest.tar
將容器保存為本地鏡像又叫做容器的持久化存儲,docker 鏡像導入導出有兩種方法:一種是使用 save 和 load 命令;一種是使用 export 和 import 命令。
Save方法,會保存該鏡像的所有歷史記錄;Export 方法,不會保留歷史記錄,即沒有commit歷史
save保存的是鏡像(image),export保存的是容器(container);load用來載入鏡像包,import用來載入容器包,但兩者都會恢復為鏡像;
load不能對載入的鏡像重命名,而 import可以為鏡像指定新名稱。
3、docker的鏡像文件
3.1 鏡像是什么
首先我們來看看鏡像到底是什么?雖然前面有介紹過**鏡像
和容器
**,但也不是特別的深入。
鏡像是一種輕量級、可執(zhí)行的獨立軟件包,用來打包軟件運行環(huán)境和基于運行環(huán)境開發(fā)的軟件,它包含運行某個軟件所需的所有內容,包括代碼、運行時、庫、環(huán)境變量和配置文件。
3.2 UnionFS文件系統
Union 文件系統是 Docker 鏡像的基礎。
UnionFS(聯合文件系統): Union文件系統(UnionFS)是一種分層、輕量級并且高性能的文件系統,它支持對文件系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統下(unite several directories into a single virtual filesystem)。鏡像可以通過分層來進行繼承,基于基礎鏡像(沒有父鏡像),可以制作各種具體的應用鏡像。
簡單來說:鏡像是分層的,每個鏡像的制作都是在其他的鏡像(基礎鏡像)基礎上制作的。
特性
:一次同時加載多個文件系統,但從外面看起來,只能看到一個文件系統,聯合加載會把各層文件系統疊加起來,這樣最終的文件系統會包含所有底層的文件和目錄
3.3 鏡像加載原理
Docker鏡像加載原理:
? Docker的鏡像實際上由一層一層的文件系統組成,這種層級的文件系統叫UnionFS文件系統。
? UnionFS文件系統分為兩層:
-
Bootfs(boot file system):Bootfs主要包含Bootloader(內核加載器)和Kernel(Linux內核)
- Bootloader主要是引導加載Kernel, Linux剛啟動時會加載Bootfs文件系統,在Docker鏡像的最底層是bootfs。
- 這一層與我們典型的Linux/Unix系統是一樣的,包含Boot加載器和內核。
- 當boot加載完成之后整個內核就都在內存中了,此時內存的使用權已由bootfs轉交給內核,此時系統也會卸載bootfs。
-
Rootfs (root file system) :在Bootfs之上。包含的就是典型 Linux 系統中的 /dev, /proc, /bin, /etc 等標準目錄和文件。Rootfs就是各種不同的操作系統發(fā)行版,比如Ubuntu,Centos等等。說白了,rootfs就是一般系統的常見目錄結構。
3.4 分層的鏡像驗證
其實這種分層的結構是很容易驗證的,在【2.2.3 下載鏡像】章節(jié),咱們下載tomcat的圖片中可以看到,一層層的pull。這就是鏡像中的層次~~~
3.5 將運行的容器制作為鏡像
注意:Docker的鏡像都是只讀的,但是當容器啟動時,一個新的可寫層被加載到鏡像的頂部,這一層通常被稱為容器層,容器層之下的都叫鏡像層。
我們之前在上面已經學過關于鏡像的基本操作,也即是常用的搜索、下載、刪除等等。
本章節(jié)是講如何將正在使用的容器制作為鏡像。即:容器–>鏡像
#在這之前,請先熟悉,容器制作鏡像的命令commit
ocker commit -m="要提交的描述信息" -a="作者" 容器ID 要創(chuàng)建的目標鏡像名:[標簽名]
開始實操:
-
下載一個tomcat鏡像,并啟動。
[root@localhost ~]# docker pull tomcat #***** 省略下載過程 [root@localhost ~]# docker run -it -p 8888:8080 tomcat
瀏覽器訪問:
-
修改容器:進入tomcat容器,創(chuàng)建一個新的文件html文件。訪問tomcat,使其能看到網頁。
瀏覽器訪問:
-
將正在運行的容器制作為鏡像
#docker commit -a='bobo' -m='add index.html' 容器ID bobo/tomcat:1.666 docker commit -a='mcs' -m='touch index to tomcat' 8d914dd9d332 mcs/tomcat:0.0.1
4、docker數據卷
4.1 數據卷
? 通過鏡像我們可以啟動多個容器,但是我們發(fā)現當我們的容器停止獲取刪除后,我們在容器中的應用的一些數據也丟失了,這時為了解決容器的數據持久化,我們需要通過容器數據卷來解決這個問題
4.1.1 數據卷是什么
? Docker容器產生的數據,如果不通過docker commit生成新的鏡像,使得數據做為鏡像的一部分保存下來,那么當容器刪除后,數據自然也就沒有了。為了能保存數據在docker中我們使用卷。簡單來說,容器卷就相當于Redis中持久化方式的RDB和AOF。
4.1.2 數據卷解決了什么問題
? 卷的意思其實就是文件或目錄,它存在于一個或多個容器中。由docker將數據卷(文件或目錄)掛載到容器中,但是請注意它不屬于UnionFS文件系統。因此他能繞過文件系統,將數據文件存儲到宿主機器上,從而有了持續(xù)存儲或共享數據的特性。
卷的設計目的就是數據的持久化,完全獨立于容器的生存周期,因此Docker不會在容器刪除時刪除其掛載的數據卷
特點:
-
數據卷可在容器之間共享或重用數據
-
卷中的更改可以直接生效
-
數據卷中的更改不會包含在鏡像的更新中
-
數據卷的生命周期一直持續(xù)到沒有容器使用它為止
持久化,容器間繼承和共享數據
4.1.3 數據卷的使用
4.1.3.1 設置數據卷
#在運行鏡像,啟動容器時,掛載數據卷
docker run -it -v /宿主機絕對路徑:/容器內目錄 鏡像名
#注意,數據卷掛載后,數據文件都在宿主機上,可以修改文件,但是在容器內修改是無法修改掛載的文件的,需要加權
docker run -it -v /宿主機絕對路徑:/容器目錄:ro 鏡像名
4.1.3.2驗證數據卷的掛載~
#先啟動一下 tomcat,讓其后臺啟動
[root@localhost opt]# docker run -v /home/tomcat/data:/usr/local/tomcat/webapps/ROOT -p 8888:8080 -d tomcat
6b29c995fb4223ae7bac7952e23c0a3ad106c6d67ef86c9c5906982984ad367f
#進入容器
[root@localhost opt]# docker exec -it 6b29c995fb bash
root@6b29c995fb42:/usr/local/tomcat# cd webapps
root@6b29c995fb42:/usr/local/tomcat/webapps# ls
ROOT
root@6b29c995fb42:/usr/local/tomcat/webapps# cd ROOT/
#查看容器下是否存在文件
root@6b29c995fb42:/usr/local/tomcat/webapps/ROOT# ls
#退出
root@6b29c995fb42:/usr/local/tomcat/webapps/ROOT# exit
exit
#往數據卷中(掛載文件夾)寫入文件及內容
[root@localhost opt]# echo "hello" > /home/tomcat/data/index.html
[root@localhost opt]# cat /home/tomcat/data/index.html
hello
#重新進入容器
[root@localhost opt]# docker exec -it 6b29c995fb bash
#查看文件及內容
root@6b29c995fb42:/usr/local/tomcat# cat webapps/ROOT/index.html
hello
root@6b29c995fb42:/usr/local/tomcat#
驗證是否能夠訪問到:(ip跟上面不一樣,是因為早上的時候虛擬機的dhcp重新分配ip,給換了)
注意: 設置了卷,在容器啟動后,卷會掛載到容器下,如果此時容器內的卷所在的文件夾有文件,都會被卷內的文件替換掉!如果設置文件的卷,請在啟動之前,在卷內放入配置文件
此處,本人踩過坑,設置了配置文件的數據卷,但是容器啟動后,容器內的配置文件都失蹤了。。。。
5、DockerFile
5.1 DockerFile的介紹
DockerFile是用來構建Docker鏡像的構建文件
,是由一系列命令
和參數
構成的腳本
。
學習docker,DockerFile 必須學。因為作為開發(fā),最后開發(fā)的程序是需要打包上線的。而要想在docker上運行,必須需要將jar、war包制作成鏡像,才可以在docker上運行。
5.1.1 DockerFIle編寫
比如:這是從ruoyi-cloud V3.5.0 里面拷貝出來的DockerFile,這是若依團隊自己書寫的 DockerFile。
這是找了一個簡單點的,官方的DockerFile太大,不貼了,有需要自己去找吧:docker官方鏡像構建常用DockerFile地址
# 基礎鏡像
FROM redis
# author
MAINTAINER ruoyi
# 掛載目錄
VOLUME /home/ruoyi/redis
# 創(chuàng)建目錄
RUN mkdir -p /home/ruoyi/redis
# 指定路徑
WORKDIR /home/ruoyi/redis
# 復制conf文件到路徑
COPY ./conf/redis.conf /home/ruoyi/redis/redis.conf
參數解析:
指令 | 說明 |
---|---|
FROM | 基礎鏡像,當前新鏡像是基于哪個鏡像的,有繼承的意味 |
MAINTAINER | 鏡像維護者的姓名和郵箱地址 |
RUN | 容器構建時需要運行的命令 |
EXPOSE | 當前容器對外暴露的端口 |
WORKDIR | 指定在創(chuàng)建容器后,終端默認登錄的進來工作目錄,一個落腳點 |
ENV | 用來在構建鏡像過程中設置環(huán)境變量 |
ADD | 將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包 |
COPY | 類似ADD,拷貝文件和目錄到鏡像中。 將從構建上下文目錄中<源路徑>的文件/目錄復制到新的一層的鏡像內的<目標路徑>位置 COPY src dest COPY [“src”,“dest”] |
VOLUME | 容器數據卷,用于數據保存和持久化工作 |
CMD | 指定一個容器啟動時要運行的命令 Dockerfile中可以有多個CMD指令,但只有最后一個生效,CMD會被docker run之后的參數替換 |
ENTRYPOINT | 指定一個容器啟動時要運行的命令 ENTRYPOINT的目的和CMD一樣,都是在指定容器啟動程序及參數,追加命名 |
ONBUILD | 當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承后父鏡像的onbuild被觸發(fā) |
命令分組
BUILD 構架命令 | BOTH | RUN 運行命令 |
---|---|---|
FROM | WORKDIR | CMD |
MAINTAINER | USER | ENV |
COPY | EXPOSE | |
ADD | VOLUME | |
RUN | ENTRYPOINT | |
ONBUILD | ||
.dockerignore |
5.1.2 構建過程
Dockerfile中的指令需要滿足如下的規(guī)則
5.1.3 執(zhí)行流程
DockerFile 執(zhí)行流程大體如下:
- docker從基礎鏡像運行一個容器
- 執(zhí)行一條指令并對容器作出修改
- 執(zhí)行類似docker commit的操作提交一個新的鏡像層
- docker再基于剛提交的鏡像運行一個新的容器
- 執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成
從應用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別代表軟件的三個不同階段,
- Dockerfile是軟件的原材料
- Docker鏡像是軟件的交付品
- Docker容器則可以認為是軟件的運行態(tài)。
Dockerfile面向開發(fā),Docker鏡像成為交付標準,Docker容器則涉及部署與運維,三者缺一不可,合力充當Docker體系的基石。
- Dockerfile,需要定義一個Dockerfile,Dockerfile定義了進程需要的一切東西。Dockerfile涉及的內容包括執(zhí)行代碼或者是文件、環(huán)境變量、依賴包、運行時環(huán)境、動態(tài)鏈接庫、操作系統的發(fā)行版、服務進程和內核進程(當應用進程需要和系統服務和內核進程打交道,這時需要考慮如何設計namespace的權限控制)等等;
- Docker鏡像,在用Dockerfile定義一個文件之后,docker build時會產生一個Docker鏡像,當運行 Docker鏡像時,會真正開始提供服務;
- Docker容器,容器是直接提供服務的。
5.1.4 運行DockerFile構建鏡像
#編寫完dockerFile,那如何運行dockerFile,構建鏡像
docker build -f dockerfile名稱 -t 新建的鏡像名:TAG .
最后面那個 點號 不是寫錯了,而是必須要有的
5.2 詳解及實操案例
上面降了一大堆命令及理論,下面驗證。
5.2.1 Base鏡像
比如咱們在docker官方鏡像構建常用DockerFile地址中找到 sig-cloud-instance-images
這個scratch就是base images
,也可以看成java中的Object
5.2.2 自定義鏡像1[jar]
開始實操,如何制作自己的鏡像
5.2.2.1 編寫DockerFile
以RuoYi-Cloud-v3.5.0為例。
-
首先gateway模塊先打個jar包,并上傳到服務器上。
-
下載基礎鏡像,咱們的jar是依靠jdk來運行的,所以咱們以jdk作為基礎鏡像
#jdk 18 2022-03-22 版本 docker pull openjdk:8u322
-
開始編寫DockerFile
#openJDK 作為基礎鏡像 FROM openjdk:8u322 #作者 MAINTAINER system #標簽 LABEL name="ruoyi-gateway" version="2.0" auth="mcs" #數據卷 VOLUME /home/gateway/data #創(chuàng)建文件夾 RUN mkdir -p /home/gateway/data #工作目錄,進入容器后,落點位置,即進入容器時,所在的文件位置 WOEKDIR /home/gateway #將文件拷貝到容器中 COPY ruoyi-gateway.jar /home/gateway/ruoyi-gateway.jar #執(zhí)行命令 ENTRYPOINT ["java", "-jar","ruoyi-gateway.jar"]
5.2.2.2 構架鏡像
# 為了方便 DockerFile ,我起名就叫DockerFile
[root@localhost gateway]# ll
total 93776
-rw-r--r--. 1 root root 481 2022-06-09 00:12:10 DockerFile
-rw-r--r--. 1 root root 96019360 2022-06-08 23:28:18 ruoyi-gateway.jar
[root@localhost gateway]#docker build -f DockerFile -t gateway:20220609 .
5.2.2.3 鏡像構建歷史
#不寫 TAG,默認TAG為latest
docker history 鏡像名稱:TAG
dockerFile中每一個指令都相當于一次構建,這就是分層概念。
5.2.2.4CMD及ENTRYPOINT的區(qū)別
- Dockerfile中可以有多個CMD指令,但只有最后一個生效。
-
ENTRYPOINT
命令是在docker run
之后的參數會被當做參數傳遞給 ENTRYPOINT,之后形成新的組合命令。
5.2.3 自定義鏡像2[war]
有上面的基礎就不寫那么詳細了。直接上DockerFile:
FROM centos
MAINTAINER bobo<dengpbs@163.com>
#把宿主機當前上下文的hello.txt拷貝到容器/usr/local/路徑下
COPY readme.txt /usr/local/helloincontainer.txt
#把java與tomcat添加到容器中
ADD jdk-8u73-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.71.tar.gz /usr/local/
#安裝vim編輯器
RUN yum -y install vim
#設置工作訪問時候的WORKDIR路徑,登錄落腳點
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java與tomcat環(huán)境變量
ENV JAVA_HOME /usr/local/jdk1.8.0_73
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.71
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.71
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器運行時監(jiān)聽的端口
EXPOSE 8080
#啟動時運行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-8.0.47/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-8.0.47/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-8.5.71/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.0.47/bin/logs/catalina.out
本次構建是為了盡量使用多的指令,咱們自己部署的時候,直接使用tomcat作為基礎鏡像就可以,而且很多tomcat的鏡像自帶JDk,但是直接tomcat作為鏡像,會存在一個問題,或者是大多數鏡像都存在的問題。那就是文件系統只能使用unix的命令,很多l(xiāng)inux的命令是不能使用的,比如vim、yum等等,且界面奇丑無比。使用Centos作為基礎鏡像,咱們可以使用yum安裝咱們常用的插件及命令。
6、常用軟件的安裝運行
鑒于咱們上寫的那么多,就不放那么東西了,直接上shell腳本。
注意:所有的都是單機啟動,不含集群搭建~~~,集群搭建在【高級篇】中
6.1 tomcat
#!/bin/bash
echo "開始下載tomcat鏡像======="
docker pull tomcat:8.5-jdk11
echo "======================"
echo "下載結果"
docker images
echo "======================"
echo "開始準備卷=============="
#請注意如果設置了配置文件的卷,請在啟動前,將修改好配置文件放到卷內。否則,容器內的配置文件會飛走消失~~~
mkdir -p /home/tomcat/data /home/tomcat/logs /home/tomcat/conf
echo "開始運行tomcat========="
# 注意端口 以及卷的位置
docker run -it -p 9080:8080 --name tomcat-8.5.71 \
-v /home/tomcat/data:/usr/local/apache-tomcat-8.5/webapps/ \
-v /home/tomcat/conf:/usr/local/apache-tomcat-8.5/conf \
-v /home/tomcat/logs/:/usr/local/apache-tomcat-8.5/logs \
--restart=always \
--privileged=true -d tomcat:8.5-jdk11
echo "====================="
echo "運行結果"
docker ps -a
echo "======================"
6.2 nginx
#!/bin/bash
echo "開始下載nginx鏡像======="
docker pull nginx:latest
echo "======================"
echo "下載結果"
docker images
echo "======================"
echo "開始準備卷=============="
#請注意如果設置了配置文件的卷,請在啟動前,將修改好配置文件放到卷內。否則,容器內的配置文件會飛走消失~~~
mkdir -p /home/nginx/data /home/nginx/logs /home/nginx/conf/conf.d
#======================================================================
#*****注意:nginx.conf 是配置文件
#*****另外conf.d下的配置文件default.conf也要準備
#如果從網上在下載,嫌麻煩可以,先去使用
#docker run -it -p 8010:8010 --name nginx --restart=always -e TZ=Asia/Shanghai
#--privileged=true -d nginx:latest
#啟動一下nginx,然后使用cp命令拷貝到卷內。
#示例:docker cp 45f8fcc6a052:/etc/nginx/conf.d/default.conf /home/nginx/conf/conf.d
#示例:docker cp 45f8fcc6a052:/etc/nginx/nginx.conf /home/nginx/conf/
#======================================================================
echo "開始運行nginx========="
# 注意端口 以及卷的位置
docker run -it -p 8010:8010 --name nginx -m 200m \
-v /home/nginx/data:/usr/share/nginx/html/ \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/etc/nginx/conf.d \
-v /home/nginx/logs/:/usr/local/apache-tomcat-8.5/logs \
--restart=always -e TZ=Asia/Shanghai \
--privileged=true -d nginx:latest
echo "====================="
echo "運行結果"
docker ps -a
echo "======================"
6.3 mysql
#!/bin/bash
echo "開始下載mysql鏡像======="
docker pull mysql:5.6
echo "======================"
echo "下載結果"
docker images
echo "======================"
echo "開始準備卷=============="
#請注意如果設置了配置文件的卷,請在啟動前,將修改好配置文件放到卷內。否則,容器內的配置文件會飛走消失~~~
mkdir -p /home/mysql/data /home/mysql/logs /home/mysql/conf/
#======================================================================
#*****注意:conf.d下的配置文件需要準備
#如果從網上在下載,嫌麻煩可以,先去使用
#docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
#啟動一下mysql,然后使用cp命令拷貝到卷內。
#示例:docker cp 45f8fcc6a052:/etc/mysql/conf.d/ /home/nginx/conf/
#======================================================================
echo "開始運行nginx========="
# 注意端口 以及卷的位置
docker run --name mysql -p 3306:3306 \
-v /home/mysql/conf:/etc/mysql/conf.d/ \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/logs/msqld.log:/var/logs/msqld.log \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always -d mysql:5.6
echo "====================="
echo "運行結果"
docker ps -a
echo "======================"
6.4 nacos
#!/bin/bash
echo "開始下載nacos鏡像======="
#docker pull nacos/nacos-server:v2.1.0
#emmmm....上一版本,下載太雞兒慢了,換成最新的
docker pull nacos/nacos-server:latest
echo "======================"
echo "下載結果"
docker images
echo "======================"
echo "開始準備卷=============="
#請注意如果設置了配置文件的卷,請在啟動前,將修改好配置文件放到卷內。否則,容器內的配置文件會飛走消失~~~
mkdir -p /home/nacos/data /home/nacos/logs /home/nacos/conf/
#======================================================================
#*****注意:conf下的配置文件需要準備
#如果從網上在下載,嫌麻煩可以,先去使用
#docker run --name nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODE=standalone -d nacos/nacos-server
#啟動一下nacos,然后使用cp命令拷貝到卷內。
#示例:docker cp df33291aec0a:/home/nacos/conf /home/nacos/conf/
#示例:docker cp df33291aec0a:/home/nacos/data /home/nacos/data/
#======================================================================
echo "開始運行nacos========="
# 注意端口 以及卷的位置
docker run --name nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 \
-v /home/nacos/conf:/home/nacos/conf \
-v /home/nacos/data:/home/nacos/data \
-v /home/nacos/logs:/home/logs/nacos \
-e MODE=standalone \
--restart=always -d nacos/nacos-server
echo "====================="
echo "運行結果"
docker ps -a
echo "======================"
6.5 redis
#!/bin/bash
echo "開始下載redis鏡像======="
docker pull redis:6.2.7
echo "======================"
echo "下載結果"
docker images
echo "======================"
echo "開始準備卷=============="
#請注意如果設置了配置文件的卷,請在啟動前,將修改好配置文件放到卷內。否則,容器內的配置文件會飛走消失~~~
mkdir -p /home/redis/data /home/redis/conf/
#======================================================================
#*****注意:conf下的配置文件redis.conf需要自己準備
#======================================================================
echo "開始運行redis========="
# 注意端口 以及卷的位置
docker run --name redis -p 6379:6379 \
-v /home/redis/conf:/usr/local/etc/redis \
-v /home/redis/data:/data \
--restart=always \
-d redis:6.2.7 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
echo "====================="
echo "運行結果"
docker ps -a
echo "======================"
6.6 minio
#!/bin/bash
echo "開始下載minio鏡像======="
#弄煩了,直接下載最新版本
docker pull minio/minio:latest
echo "==========下載結果============"
docker images
echo "======================"
echo "======開始準備卷========"
#請注意如果設置了配置文件的卷,請在啟動前,將修改好配置文件放到卷內。否則,容器內的配置文件會飛走消失~~~
mkdir -p /home/minio/data /home/minio/conf/
echo "開始運行minio========="
# 注意端口 以及 卷的位置
# 9000 是API端口,9001是 Console的端口
# 注意: Access key length should be at least 3, and secret key length at least 8 characters
# 出現這表示用戶名必須大于3個字符,密碼必須大于8個字符~~
docker run --name minio -p 9000:9000 -p 9001:9001 \
-v /home/minio/conf:/root/.minio \
-v /home/minio/data:/data \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
--restart=always \
-d minio/minio:latest server /data --console-address ":9001"
echo "=========運行結果============"
docker ps -a
echo "==========================="
6.7 rocketmq
#!/bin/bash
#開始最麻煩的一個。。。。
#下載roketMq
echo "開始下載rocketmq、rocketmq-console......"
docker pull rocketmqinc/rocketmq:4.4.0
#下載roketmq-console
docker pull styletang/rocketmq-console-ng:latest
echo "======================"
echo "下載結果"
docker images
echo "======================"
#先啟動 mqnamesrv,再啟動broker,最后啟動console
echo "==========開始準備mqnamesrv============"
mkdir -p /home/rocketmq/namesrv/logs /home/rockermq/namesrv/data/store
echo "開始運行mqnamesrv......."
docker run --name rmqnamesrv -p 9876:9876 \
-v /home/rocketmq/namesrv/logs:/root/logs \
-v /home/rockermq/namesrv/data/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m" \
--restart=always \
-d rocketmqinc/rocketmq sh mqnamesrv
echo "=========運行結果============"
docker ps -a
echo "==========================="
echo "開始準備broker........."
mkdir -p /home/rocketmq/borker/logs /home/rockermq/borker/data/store /home/rockermq/borker/conf
touch /home/rockermq/borker/conf/broker.conf
echo "開始寫入broker配置文件........"
tee /home/rockermq/borker/conf/broker.conf <<-'EOF'
# 所屬集群名稱,如果節(jié)點較多可以配置多個
brokerClusterName = DefaultCluster
#broker名稱,master和slave使用相同的名稱,表明他們的主從關系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示幾點做消息刪除動作,默認是凌晨4點
deleteWhen = 03
#在磁盤上保留消息的時長,單位是小時
fileReservedTime = 48
#有三個值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和異步表示Master和Slave之間同步數據的機制;
brokerRole = ASYNC_MASTER
#刷盤策略,取值為:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盤和異步刷盤;SYNC_FLUSH消息寫入磁盤后才返回成功狀態(tài),ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 設置broker節(jié)點所在服務器的ip地址
brokerIP1 = 192.168.57.130
# 磁盤使用達到95%之后,生產者再寫入消息會報錯 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95
EOF
echo "broker配置文件寫入完成........."
echo "開始運行broker........."
docker run --name rmqbroker --restart=always --link rmqnamesrv:namesrv \
-p 10911:10911 -p 10909:10909 \
-v /home/rocketmq/borker/logs:/root/logs \
-v /home/rockermq/borker/data/store:/root/store \
-v /home/rockermq/borker/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
-d rocketmqinc/rocketmq sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
echo "=========運行結果============"
docker ps -a
echo "==========================="
echo "開始啟動rocketmq-console........"
docker run --name rmqadmin -p 8090:8080 \
--link rmqnamesrv:rmqnamesrv \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
--restart=always \
-d styletang/rocketmq-console-ng:latest
echo "=========運行結果============"
docker ps -a
echo "==========================="
文章來源:http://www.zghlxwxcb.cn/news/detail-408102.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-408102.html
7、附錄OPTIONS參數說明
OPTIONS | 說明 |
---|---|
–add-host list | 添加自定義主機到ip映射(書寫格式為:主機:ip) |
-a, --attach list | 附加到STDIN、STDOUT或STDERR上 |
–blkio-weight uint16 | Block IO (相對權重),取值10到1000之間,0為禁用(默認0) |
–blkio-weight-device list | Block IO weight (相對于設備的權重) (默認為數組的形式) |
–cap-add list | 添加Linux功能 |
–cap-drop list | 刪除Linux功能 |
–cgroup-parent string | 容器的可選父級對照組項 |
–cidfile string | 將容器ID寫入文件 |
–cpu-period int | 限制CPU CFS(完全公平調度程序)周期 |
–cpu-quota int | 限制CPU CFS(完全公平的調度程序)上限 |
–cpu-rt-period int | 限制CPU運行時周期(以微秒為單位) |
–cpu-rt-runtime int | 限制CPU實時運行時間(以微秒為單位) |
-c, --cpu-shares int | CPU 共享 (相對權重的設定) |
–cpus decimal | 設定cpu的數量 |
–cpuset-cpus string | 允許執(zhí)行的cpu (0-3,0,1) |
–cpuset-mems string | 允許執(zhí)行的MEMs (0-3,0,1) |
-d, --detach | 在后臺運行容器并打印容器ID |
–detach-keys string | 覆蓋分離容器的鍵序列 |
–device list | 向容器添加主機設備 |
–device-cgroup-rule list | 向 cgroup 允許的設備列表中添加一個或多個規(guī)則 |
–device-read-bps list | 限定設備的讀取速率(單位: byte/s)(默認為 []) |
–device-read-iops list | 限定設備的讀取速率(單位:IO/s)(默認為 []) |
–device-write-bps list | 限定設備的寫入速率(單位: byte/s)(默認為 []) |
–device-write-iops list | 限定設備的寫入速率(單位:IO/s)(默認為 []) |
–disable-content-trust | 跳過鏡像驗證(默認為 true) |
–dns list | 設置自定義DNS服務器 |
–dns-option list | 設置DNS選項 |
–dns-search list | 設置自定義的DNS搜索域 |
–entrypoint string | 覆蓋鏡像的默認入口點 |
-e, --env list | 設置環(huán)境變量 |
–env-file list | 讀取環(huán)境變量內容 |
–expose list | 公開一個端口或多個端口 |
–group-add list | 添加其他要加入的組 |
–health-cmd string | 命令運行以檢查健康 |
–health-interval duration | 運行檢查之間的時間(ms|s|m|h)(默認為 0s) |
–health-retries int | 連續(xù)的失敗需要報告不健康 |
–health-start-period duration | 啟動健康重試倒計時前容器初始化的啟動周期(ms|s|m|h)(默認為 0s) |
–health-timeout duration | 健康檢查運行情況的最大時間值 格式為:(ms|s|m|h) (默認 0s) |
–help | 打印出使用情況 |
-h, --hostname string | 定義容器主機名 |
–init | 在容器中運行初始化,以轉發(fā)信號并獲取進程 |
-i, --interactive | 即使沒有連接,也保持STDIN開放 |
–ip string | 設定容器的 IPv4 地址 (例如,192.168.155.139) |
–ip6 string | 設定IPv6地址(例如,2001:db8::33) |
–ipc string | 使用IPC模式 |
–isolation string | 容器隔離技術 |
–kernel-memory bytes | 內核內存限制 |
-l, --label list | 在容器上設置元數據 |
–label-file list | 在以行分隔的標簽文件中讀取 |
–link list | 向另一個容器添加鏈接 |
–link-local-ip list | 容器 IPv4/IPv6 鏈接本地地址 |
–log-driver string | 設定容器的日志驅動 |
–log-opt list | 設定日志驅動器選項 |
–mac-address string | 配置容器MAC地址(例如,92:d0:c6:0a:29:33) |
-m, --memory bytes | 設定內存限額 |
–memory-reservation bytes | 內存軟限制 |
–memory-swap bytes | 交換限制等于內存加上交換:‘-1’,以啟用無限交換 |
–memory-swappiness int | 優(yōu)化容器內存交換 (0 到 100) (默認為 -1) |
–mount mount | 將文件系統掛載附加到容器 |
–name string | 為容器指定一個名稱 |
–network string | 將容器連接到網絡 |
–network-alias list | 為容器連接的網絡添加別名 |
–no-healthcheck | 禁止任何容器指定 HEALTHCHECK |
–oom-kill-disable | 禁止OOM事件被殺死 |
–oom-score-adj int | 優(yōu)化主機的OOM事件 ,參數范圍 (-1000 到 1000) |
–pid string | 設定PID命名 |
–pids-limit int | 優(yōu)化容器pid限制(如果設置-1則為無限制) |
–privileged | 賦予容器擴展的權限 |
-p, --publish list | 將容器的端口發(fā)布到主機 |
-P, --publish-all | 將所有公開的端口發(fā)布到隨機端口 |
–read-only | 將容器的根文件系統掛載為只讀(后面會詳細講到) |
–restart string | 配置容器的重啟策略,當容器退出時重新啟動(默認為“no”) |
–rm | 當容器退出時自動移除這個容器 |
–runtime string | 使用容器的運行時 |
–security-opt list | 指定docker啟動的安全項 |
–shm-size bytes | /dev/shm 的大?。ㄟ@個可以使其容量進行動態(tài)的擴展) |
–sig-proxy | 設置代理接收京城信號 (默認為 true) |
–stop-signal string | 停止容器的信號 (默認為 “SIGTERM”) |
–stop-timeout int | 設置超時停止容器(以秒為單位) |
–storage-opt list | 設定容器的存儲驅動程序選項 |
–sysctl map | 指定系統控制項 (默認為 map[] 的格式) |
–tmpfs list | 掛載tmpfs目錄 |
-t, --tty | 為當前容器分配一個客戶端 |
–ulimit ulimit | 啟動需要限制的項(默認為數組的形式) |
-u, --user string | 用戶名或UID(格式為: <name|uid>[:<group|gid>]) |
–userns string | 使用用戶名稱空間 |
–uts string | 使用UTS名稱空間 |
-v, --volume list | 綁定安裝卷(關于容器卷,在Docker容器數據卷中會具體的講解) |
–volume-driver string | 容器的可選卷驅動程序 |
–volumes-from list | 指定容器裝載卷 |
-w, --workdir string | 容器內的工作目錄 |
–shm-size bytes | /dev/shm 的大?。ㄟ@個可以使其容量進行動態(tài)的擴展) |
–sig-proxy | 設置代理接收京城信號 (默認為 true) |
–stop-signal string | 停止容器的信號 (默認為 “SIGTERM”) |
–stop-timeout int | 設置超時停止容器(以秒為單位) |
–storage-opt list | 設定容器的存儲驅動程序選項 |
–sysctl map | 指定系統控制項 (默認為 map[] 的格式) |
–tmpfs list | 掛載tmpfs目錄 |
-t, --tty | 為當前容器分配一個客戶端 |
–ulimit ulimit | 啟動需要限制的項(默認為數組的形式) |
-u, --user string | 用戶名或UID(格式為: <name|uid>[:<group|gid>]) |
–userns string | 使用用戶名稱空間 |
–uts string | 使用UTS名稱空間 |
-v, --volume list | 綁定安裝卷(關于容器卷,在Docker容器數據卷中會具體的講解) |
–volume-driver string | 容器的可選卷驅動程序 |
–volumes-from list | 指定容器裝載卷 |
-w, --workdir string | 容器內的工作目錄 |
到了這里,關于最全docker的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!