一.為什么使用容器?
1.上線流程繁瑣
開發(fā)->測試->申請資源->審批->部署->測試等環(huán)節(jié)
2.資源利用率低
普遍服務(wù)器利用率低俏让,造成過多浪費(fèi)
3.擴(kuò)容/縮容不及時(shí)
業(yè)務(wù)高峰擴(kuò)容流程繁瑣如叼,上線不及時(shí)
已知情況市怎,例如618鸯檬,雙11
未知情況伶选,業(yè)務(wù)機(jī)器增加承載量隐岛,可以應(yīng)對一些突發(fā)猫妙,一般預(yù)留30%的配置
-彈性伸縮
4.服務(wù)器環(huán)境臃腫
服務(wù)器越來越臃腫,對維護(hù)聚凹,遷移帶來困難
5.環(huán)境不一致性
進(jìn)一步對比
虛擬機(jī):
1.提升服務(wù)器資源利用率
2.提供一個(gè)完全隔離的環(huán)境
容器:
1.容器提供一個(gè)基本的獨(dú)立環(huán)境割坠,實(shí)現(xiàn)容器隔離齐帚,資源限制
2.主要解決應(yīng)用層問題,應(yīng)用快速部署彼哼,高效管理
三.Docker是什么
1.使用最廣泛的開源容器引擎
2.一種操作系統(tǒng)級的虛擬話技術(shù)
3.依賴于Linux內(nèi)核特性:Namespace(資源隔離)和Cgroups(資源限制)
4.一個(gè)簡單的應(yīng)用程序打包工具
設(shè)計(jì)目標(biāo)
1.提供簡單的應(yīng)用程序打包
2.開發(fā)人員和運(yùn)維人員職責(zé)邏輯分離
3.多環(huán)境保持一致性
(設(shè)計(jì)來源集裝箱)
運(yùn)行起來对妄,互不影響
開發(fā)人員:
1.開發(fā)項(xiàng)目
2.打包項(xiàng)目環(huán)境+代碼成鏡像
3.部署到容器平臺(tái)
運(yùn)維人員:怎么高效的去管理這些容器
好處:
1.運(yùn)維人員節(jié)省人工成本
2.持續(xù)發(fā)布有問題更快解決
Docker應(yīng)用場景
1.應(yīng)用程序打包和發(fā)布
2.應(yīng)用程序隔離
3.持續(xù)集成
4.部署微服務(wù)
5.快速搭建測試環(huán)境
6.提供PasS產(chǎn)品(平臺(tái)即服務(wù))
3.Docker基本組成
Docker Client:Linux命令行執(zhí)行的客戶端命令,Docker命令
Host:Docker主機(jī)
Docker Registry:Docker鏡像
4.版本與支持平臺(tái)
Docker版本:
1.社區(qū)版(Community Edition沪羔,CE)
2.企業(yè)版(Enterprise Edition饥伊,EE)
支持平臺(tái):
1.Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
2.Mac
3.Windows
官方文檔:
https://docs.docker.com/engine/install/centos/
四.Docker安裝
第一步:安裝前建議關(guān)閉selinux和firewalld NetworkManager
#關(guān)閉firewalld 和NetworkManager
[root@D ~]#systemctl stop firewalld NetworkManager
[root@D ~]#systemctl disable firewalld NetworkManager
檢查是否正在運(yùn)行
systemctl is-active firewalld NetworkManager
檢查是否開機(jī)自啟動(dòng)
systemctl is-enabled firewalld NetworkManager
[root@D ~]# systemctl is-active firewalld NetworkManager crond
unknown
inactive
active
[root@D ~]# systemctl is-enabled firewalld NetworkManager crond
disabled
disabled
enabled
關(guān)閉selinux
cat /etc/selinux/config
[root@D ~]# grep =disable /etc/selinux/config
SELINUX=disabled
[root@D ~]# setenforce 0
[root@D ~]# getenforce
Permissive
安裝docker
第二步:安裝好系統(tǒng),卸載系統(tǒng)內(nèi)老的docker版本
[root@docker ~]# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
第三步:安裝依賴包
默認(rèn)沒有docker源
[root@docker01 ~]# cd /etc/yum.repos.d/
[root@docker01 /etc/yum.repos.d]# ls
CentOS-Base.repo CentOS-Sources.repo
CentOS-CR.repo CentOS-Vault.repo
CentOS-Debuginfo.repo CentOS-x86_64-kernel.repo
CentOS-fasttrack.repo epel.repo
CentOS-Media.repo
為其配置一個(gè)穩(wěn)定的docker源
[root@docker01 ~]# yum install -y yum-utils
[root@docker01 ~]# yum-config-manager \ --add-repo \ [https://download.docker.com/linux/centos/docker-ce.repo]
[root@docker01 /etc/yum.repos.d]# ls (配置完畢會(huì)出現(xiàn)一個(gè)docker-re.repe文件)
CentOS-Base.repo CentOS-Media.repo docker-ce.repo
CentOS-CR.repo CentOS-Sources.repo epel.repo
CentOS-Debuginfo.repo CentOS-Vault.repo
CentOS-fasttrack.repo CentOS-x86_64-kernel.repo
第四步:安裝docker-ce
[root@docker01 ~]# yum install -y docker-ce
[root@docker01 ~]# systemctl start docker
[root@docker01 ~]# systemctl enable docker
第五步:驗(yàn)證是否啟動(dòng)成功(幾種驗(yàn)證方法)
[root@docker01 ~]# docker version
[root@docker01 ~]# docker info
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
官方文檔:https://docs.docker.com
阿里云源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
五.Docker鏡像管理
? 鏡像是什么蔫饰?
? 配置加速器
? 鏡像常用管理命令
1.鏡像是什么琅豆?
? 一個(gè)分層存儲(chǔ)的文件,不是一個(gè)單一的文件
? 一個(gè)軟件的環(huán)境
? 一個(gè)鏡像可以創(chuàng)建N個(gè)容器
? 一種標(biāo)準(zhǔn)化的交付
? 一個(gè)不包含Linux內(nèi)核而又精簡的Linux操作系統(tǒng)
2.配置加速器
Docker Hub是由Docker公司負(fù)責(zé)維護(hù)的公共鏡像倉庫篓吁,包含大量的容器鏡像茫因,Docker工具默認(rèn)
從這個(gè)公共鏡像庫下載鏡像。地址:https://hub.docker.com
為什么配置加速器杖剪,舉個(gè)簡單的例子:
[root@docker01 ~]# docker run -d nginx
Unable to find image 'nginx:latest' locally #本地找不到nginx鏡像包
配置鏡像加速器:
[root@docker01 ~]# vi /etc/docker/daemon.json
[root@docker01 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
[root@docker01 ~]# systemctl restart docker
3.常用管理命令
命令格式:docker image COMMAND
查看本地有哪些鏡像
[root@docker01 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 519e12e2a84a 5 hours ago 133MB
查看鏡像的構(gòu)建過程
[root@docker01 ~]# docker history nginx
IMAGE CREATED CREATED BY SIZE COMMENT
519e12e2a84a 5 hours ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 5 hours ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B
<missing> 5 hours ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 5 hours ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B
<missing> 5 hours ago /bin/sh -c #(nop) COPY file:09a214a3e07c919a… 4.61kB
<missing> 5 hours ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB
<missing> 5 hours ago /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB
<missing> 5 hours ago /bin/sh -c #(nop) COPY file:65504f71f5855ca0… 1.2kB
<missing> 5 hours ago /bin/sh -c set -x && addgroup --system -… 63.8MB
<missing> 5 hours ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~buster 0B
<missing> 5 hours ago /bin/sh -c #(nop) ENV NJS_VERSION=0.5.3 0B
<missing> 5 hours ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.19.9 0B
<missing> 5 hours ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 11 hours ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 11 hours ago /bin/sh -c #(nop) ADD file:c855b3c65f5ba94d5… 69.3MB
查看鏡像的詳細(xì)信息
[root@docker01 ~]# docker inspect nginx
從hub倉庫下載一個(gè)鏡像
[root@docker01 ~]# docker pull redis
刪除鏡像
[root@docker01 ~]# docker rmi 7f33e76fcb56
Untagged: redis:latest
Untagged: redis@sha256:7ff49b5e96de6e4472664591866bf4bb8d52eecf1405e8b2e16b49237dbee4c4
Deleted: sha256:7f33e76fcb56c96639cd127aca5f6cb61c526c3c6013048f637c32e863b7b012
Deleted: sha256:072f491f6aa3d8fd4171edb8cf967a690e152d263fc9ee96a5451807004e5b87
Deleted: sha256:b74e939adc897204e67f7b9590f50945bdfd665472adfaefa886113200e3c75d
Deleted: sha256:3f869c3604694dfd4d78a73f2374f835d10d8158b18b62fcf1aa32bb89457879
Deleted: sha256:b9735bc171046d655ce1bec3d81f83770ce81522165e26b25957dcb2fdc66d88
Deleted: sha256:42e8693cf8594736a7783ba70093f158c9155c07c7e0bf1c66d063d961b1d1e5
Deleted: sha256:346fddbbb0ff19bdb026afb053df490c0c73981a8a985882cf8ee3d716735e87
移除沒有被標(biāo)記的鏡像
[root@docker01 ~]# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
[root@docker01 ~]# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
導(dǎo)出一個(gè)鏡像
[root@docker01 ~]# docker save redis -o redis.tar
[root@docker01 ~]# ls
anaconda-ks.cfg redis.tar
[root@docker01 ~]# scp -r redis.tar root@10.0.0.23:~ (推送到?jīng)]有網(wǎng)絡(luò)的服務(wù)器)
導(dǎo)入一個(gè)鏡像
[root@docker02 ~]# docker load -i redis.tar (導(dǎo)入到本地倉庫)
六.創(chuàng)建容器常用選項(xiàng)
命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
選項(xiàng) | 描述 |
---|---|
-i, –interactive | 交互式 |
-t, –tty | 分配一個(gè)偽終端 |
-d, –detach | 運(yùn)行容器到后臺(tái) |
-e, –env | 設(shè)置環(huán)境變量 |
-p, –publish list | 發(fā)布容器端口到主機(jī) |
-P, –publish-all | 發(fā)布容器所有EXPOSE的端口到宿主機(jī)隨機(jī)端口 |
--name string | 指定容器名稱 |
-h, –hostname | 設(shè)置容器主機(jī)名 |
--ip string | 指定容器IP冻押,只能用于自定義網(wǎng)絡(luò) |
--network | 連接容器到一個(gè)網(wǎng)絡(luò) |
-v, –volume list --mount mount(新方式) ) | 將文件系統(tǒng)附加到容器 |
--restart string | 容器退出時(shí)重啟策略,默認(rèn)no盛嘿,可選值:[always|on-failure] |
-m洛巢,–memory | 容器可以使用的最大內(nèi)存量 |
–memory-swap | 允許交換到磁盤的內(nèi)存量 |
–memory-swappiness=<0-100> | 容器使用SWAP分區(qū)交換的百分比(0-100,默認(rèn)為-1) |
–oom-kill-disable | 禁用OOM Killer |
--cpus | 可以使用的CPU數(shù)量 |
–cpuset-cpus | 限制容器使用特定的CPU核心次兆,如(0-3, 0,1) |
–cpu-shares | CPU共享(相對權(quán)重) |
1.使用exec 進(jìn)入交互式終端稿茉,讓進(jìn)行夯住,讓他一直運(yùn)行
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4007ba6d6da nginx "/docker-entrypoint.…" 50 minutes ago Up 50 minutes 0.0.0.0:8080->80/tcp inspiring_brahmagupta
[root@docker01 ~]# docker exec -it d4007ba6d6da bash
root@d4007ba6d6da:/# exit
使用-d參數(shù)芥炭,讓容器運(yùn)行到后臺(tái)漓库,不使用的話會(huì)在當(dāng)前終端給輸出出來
![image.png](https://upload-images.jianshu.io/upload_images/17001435-cb448ff128685789.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
<meta charset="utf-8">
正常都會(huì)加-d
[root@docker01 ~]# docker run -d nginx
2.測試-d -p -e --name --restart=always參數(shù)
[root@docker01 ~]# docker run -d -e env=prod -p 88:80 --name web -h web --restart=always nginx
600d94998f1b212f2736eb593ccd1cf2db0da672a40fd53fedc22fc335423f50
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
600d94998f1b nginx "/docker-entrypoint.…" 13 seconds ago Up 12 seconds 0.0.0.0:88->80/tcp web
測試效果
[root@docker01 ~]# docker exec -it web bash
root@web:~# hostname
web
root@web:~# echo $env
prod
root@web:/# cd /usr/share/nginx/html/
root@web:/usr/share/nginx/html# echo "<h1>wangwenbin DSB<h1>" > index.html
3.限制內(nèi)容和cpu
[root@docker01 ~]# docker run -d -m="500m" --cpus="1" -d nginx
628440e526f18c03cfde4d42bf9a715fb4bf0d9b2f2e4186feb247ee1846ab24
七.常用管理命令
命令格式:docker container COMMAND
選項(xiàng) | 描述 |
---|---|
ls | 列出容器 |
inspect | 查看一個(gè)或多個(gè)容器詳細(xì)信息 |
exec | 在運(yùn)行容器中執(zhí)行命令 |
commit | 創(chuàng)建一個(gè)新鏡像來自一個(gè)容器 |
cp | 拷貝文件/文件夾到一個(gè)容器 |
logs | 獲取一個(gè)容器日志 |
port | 列出或指定容器端口映射 |
top | 顯示一個(gè)容器運(yùn)行的進(jìn)程 |
stats | 顯示容器資源使用統(tǒng)計(jì) |
stop/start/restart | 停止/啟動(dòng)一個(gè)或多個(gè)容器 |
rm | 刪除一個(gè)或多個(gè)容器 |
prune | 移除已停止的容器 |
1.列出容器
[root@docker01 ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
600d94998f1b nginx "/docker-entrypoint.…" 48 minutes ago Up 48 minutes 0.0.0.0:88->80/tcp web
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
600d94998f1b nginx "/docker-entrypoint.…" 50 minutes ago Up 50 minutes 0.0.0.0:88->80/tcp we
2.列出最新創(chuàng)建出的容器
[root@docker01 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
628440e526f1 nginx "/docker-entrypoint.…" 17 minutes ago Up 17 minutes 80/tcp crazy_grothendieck
3.使用exec在容器中運(yùn)行命令
[root@docker01 ~]# docker exec -it web/id bash
4.使用commit將已經(jīng)構(gòu)建好的鏡像打包到本地倉庫中,進(jìn)行使用
[root@docker01 ~]# docker commit web test
sha256:13430bc4a39b20ea6d7b30f63ead1ae43d25dc686a90e407bf8bb2704f1cbf79
[root@docker01 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
test latest 13430bc4a39b 7 seconds ago 133MB
5.將宿主機(jī)的某個(gè)文件復(fù)制到容器中
[root@docker01 ~]# docker cp redis.tar web:/
[root@docker01 ~]# docker exec web ls
redis.tar
6.查看容器日志园蝠,做故障排查
[root@docker01 ~]# docker logs web
7.查看容器端口
[root@docker01 ~]# docker port web
80/tcp -> 0.0.0.0:88
查看容器中運(yùn)行的進(jìn)程
[root@docker01 ~]# docker top web
UID PID PPID C STIME TTY TIME CMD
root 16393 16374 0 22:13 ? 00:00:00 nginx: master process nginx -g daemon off;
101 16457 16393 0 22:13 ? 00:00:00 nginx: worker process
8.顯示容器的資源利用率
默認(rèn)不加--no-stream渺蒿,會(huì)循環(huán)顯示
[root@docker01 ~]# docker stats web --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
600d94998f1b web 0.00% 2.125MiB / 1.934GiB 0.11% 17.5kB / 10.7kB 717kB / 6.14kB 2
寫腳本使可配合使用
[root@docker01 ~]# docker stats web --no-stream |awk '{print $2}'
ID
web
9.清除已經(jīng)退出的容器
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fed8be8802fe centos "/bin/bash" 16 seconds ago Exited (0) 15 seconds ago blissful_ritchie
[root@docker01 ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
fed8be8802fe69930a65aaea86c8725071ac9d5449f54a76c12259ec1b918878
Total reclaimed space: 0B
docker ps 參數(shù)
-a 顯示所有容器(運(yùn)行和不運(yùn)行都顯示)
-q顯示所有容器的id
[root@docker01 ~]# docker ps -q
628440e526f1
10.刪除所有容器
[root@docker01 ~]# docker rm -f `docker ps -aq`
b83214d78f78
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11.啟動(dòng),停止彪薛,重啟容器
[root@docker01 ~]# docker run -d -p 80:80 nginx
beb79803c08700a94575590547b1f9fac83cb425b2733b7dc7cb4620f9afe068
[root@docker01 ~]# docker stop eloquent_dhawan
eloquent_dhawan
[root@docker01 ~]# docker start eloquent_dhawan
eloquent_dhawan
[root@docker01 ~]# docker restart eloquent_dhawan
eloquent_dhawan
12.刪除
[root@docker01 ~]# docker rm eloquent_dhawan
eloquent_dhawan
八.容器數(shù)據(jù)持久化
1.Docker提供三種方式將數(shù)據(jù)從宿主機(jī)掛載到容器中:
? volumes:Docker管理宿主機(jī)文件系統(tǒng)的一部分(/var/lib/docker/volumes)茂装。
保存數(shù)據(jù)的最佳方式。
? bind mounts:將宿主機(jī)上的任意位置的文件或者目錄掛載到容器中善延。
1.volumes示例:
1训唱、創(chuàng)建數(shù)據(jù)卷
# docker volume create nginx-vol #創(chuàng)建好的數(shù)據(jù)卷在/var/lib/docker/volumes
# docker volume ls #查看
# docker volume inspect nginx-vol #查看詳細(xì)信息
2、使用數(shù)據(jù)卷
# docker run -d --name=nginx-test --mount src=nginxvol,dst=/usr/share/nginx/html nginx
# docker run -d --name=nginx-test -v nginxvol:/usr/share/nginx/html nginx
2.bind mounts示例:
1挚冤、掛載宿主機(jī)目錄到容器
# docker run -d --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
# docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
舉例:
[root@docker01 ~]# docker run -d --name web -p 80:80 -v /opt/rootwww/:/usr/share/nginx/html nginx
解釋:后臺(tái)創(chuàng)建一個(gè)名字為web的nginx ,訪問端口為80:80赞庶,將/opt/rootwww/掛載到/usr/share/nginx/html训挡。
1b3d90c83c10e506cbb57b20237eacd845a98822ae71c0bbeadb67ba3fbb42fd
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b3d90c83c10 nginx "/docker-entrypoint.…" 11 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp web
root@1b3d90c83c10:/# cd /usr/share/nginx/html/
root@1b3d90c83c10:/usr/share/nginx/html# ls
瀏覽器訪問沒有
解釋:因?yàn)閽煸诘哪夸洓]有html文件
解決:在互相掛在的兩個(gè)目錄中選擇一個(gè)澳骤,追加html文件
[root@1b3d90c83c10:/usr/share/nginx/html# echo "<h1>wangwenbin DSB<h1>" > index.html
在掛載目錄下驗(yàn)證,有此文件澜薄,持久化完成
[root@docker01 ~]# cd /opt/rootwww/
[root@docker01 /opt/rootwww]# ls
index.html
制作鏡像:
1.啟動(dòng)容器之后的應(yīng)用程序为肮,服務(wù)產(chǎn)生的數(shù)據(jù)盡量放到一個(gè)目錄下 /data
2.構(gòu)建不是將已經(jīng)生成的應(yīng)用程序數(shù)據(jù)打包進(jìn)去
例如:jenkins、gitlab使用docker都是采用-v將他們自身產(chǎn)生的數(shù)據(jù)持久化宿主機(jī)肤京。
九.容器網(wǎng)絡(luò)
? veth pair:成對出現(xiàn)的一種虛擬網(wǎng)絡(luò)設(shè)備颊艳,數(shù)據(jù)從一端進(jìn),從另 一端出。 用于解決網(wǎng)絡(luò)命名空間之間隔離忘分。
? docker0:網(wǎng)橋是一個(gè)二層網(wǎng)絡(luò)設(shè)備棋枕,通過網(wǎng)橋可以將Linux支持 的不同的端口連接起來,并實(shí)現(xiàn)類似交換機(jī)那樣的多對多的通信妒峦。
Docker使用iptables實(shí)現(xiàn)網(wǎng)絡(luò)通信重斑。
外部訪問容器: # iptables -t nat -vnL DOCKE
DNAT:目標(biāo)地址轉(zhuǎn)換
容器訪問外部: # iptables -t nat -vnL POSTROUTING
SNAT源地址轉(zhuǎn)換
十.Dockerfile構(gòu)建鏡像
Docker通過Dockerfile自動(dòng)構(gòu)建鏡像,Dockerfile 是一個(gè)包含用于組建鏡像的文本文件肯骇,由一條一條的指令組成窥浪。
1.Dockerfile常用指令
指令 | 描述 |
---|---|
FROM | 構(gòu)建新鏡像是基于哪個(gè)鏡像 |
LABEL | 標(biāo)簽 |
RUN | 構(gòu)建鏡像時(shí)運(yùn)行的Shell命令 |
COPY | 拷貝文件或目錄到鏡像中 |
ADD | 解壓壓縮包并拷貝 |
ENV | 設(shè)置環(huán)境變量 |
USER | 為RUN、CMD和ENTRYPOINT執(zhí)行命令指定運(yùn)行用戶 |
EXPOSE | 聲明容器運(yùn)行的服務(wù)端口 |
WORKDIR | 為RUN笛丙、CMD漾脂、ENTRYPOINT、COPY和ADD設(shè)置工作目錄 |
CMD | 運(yùn)行容器時(shí)默認(rèn)執(zhí)行胚鸯,如果有多個(gè)CMD指令骨稿,最后一個(gè)生效 |
具體操作:
[root@docker01 ~]# mkdir dockerfile
[root@docker01 /opt]# cd /root/dockerfile/
[root@docker01 ~/dockerfile]# ls
Dockerfile
[root@docker01 ~/dockerfile]# cat Dockerfile
FROM centos:latest
LABEL nginx chuanjian
RUN yum install epel-release -y && \
yum install nginx -y
CMD ["nginx","-g","daemon off;"]
[root@docker01 ~/dockerfile]# docker build -t nginx:V1 .
[root@docker01 ~/dockerfile]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx V1 1c709626ccf5 14 minutes ago 313MB
[root@docker01 ~/dockerfile]# docker run -d --name web3 -p 93:80 -v /opt/rootwww/:/usr/share/nginx/html nginx:V1
41362b7ee57812223e05c55165cc2fc8eb5bc99680823b94d3711228d9ed3419
[root@docker01 ~/dockerfile]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41362b7ee578 nginx:V1 "nginx -g 'daemon of…" 12 seconds ago Up 12 seconds 0.0.0.0:93->80/tcp web3
驗(yàn)證:
<meta charset="utf-8">
1.構(gòu)建鏡像命令
Usage: docker build [OPTIONS] PATH | URL | - [flags] Options:
-t, --tag list # 鏡像名稱
-f, --file string # 指定Dockerfile文件位置
# docker build -t shykes/myapp .
# docker build -t shykes/myapp -f /path/Dockerfile /path
# docker build -t shykes/myapp [http://www.example.com/Dockerfile](http://www.example.com/Dockerfile)
構(gòu)建Nginx鏡像
FROM centos:7
LABEL maintainer www.ctnrs.com
RUN yum install -y gcc gcc-c++ make \
openssl-devel pcre-devel gd-devel \
iproute net-tools telnet wget curl && \
yum clean all && \
rm -rf /var/cache/yum/*
ADD nginx-1.15.5.tar.gz /
RUN cd nginx-1.15.5 && \
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_stub_status_module && \
make -j 4 && make install && \
mkdir /usr/local/nginx/conf/vhost && \
cd / && rm -rf nginx* && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/nginx/sbin
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
構(gòu)建Tomcat鏡像
FROM centos:7
MAINTAINER www.ctnrs.com
ENV VERSION=8.5.43
RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*
ADD apache-tomcat-${VERSION}.tar.gz /usr/local/
RUN mv /usr/local/apache-tomcat-${VERSION} /usr/local/tomcat && \
sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"'
/usr/local/tomcat/bin/catalina.sh && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/tomcat/bin
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["catalina.sh", "run"]