Docker

一.為什么使用容器?

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)境不一致性

image.png

進(jìn)一步對比


image.png
虛擬機(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ì)來源集裝箱)


image.png

運(yùn)行起來对妄,互不影響


image.png

開發(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鏡像
image.png

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


image.png

查看本地有哪些鏡像

[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
image.png

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)行都顯示)

image.png
-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文件
image.png

解決:在互相掛在的兩個(gè)目錄中選擇一個(gè)澳骤,追加html文件

[root@1b3d90c83c10:/usr/share/nginx/html# echo "<h1>wangwenbin DSB<h1>" > index.html
image.png
在掛載目錄下驗(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ī)那樣的多對多的通信妒峦。


image.png

Docker使用iptables實(shí)現(xiàn)網(wǎng)絡(luò)通信重斑。
外部訪問容器: # iptables -t nat -vnL DOCKE
DNAT:目標(biāo)地址轉(zhuǎn)換


image.png

容器訪問外部: # iptables -t nat -vnL POSTROUTING
SNAT源地址轉(zhuǎn)換


image.png

十.Dockerfile構(gòu)建鏡像
Docker通過Dockerfile自動(dòng)構(gòu)建鏡像,Dockerfile 是一個(gè)包含用于組建鏡像的文本文件肯骇,由一條一條的指令組成窥浪。


image.png

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)證:


image.png

<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"]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蠢琳,隨后出現(xiàn)的幾起案子啊终,更是在濱河造成了極大的恐慌,老刑警劉巖傲须,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蓝牲,死亡現(xiàn)場離奇詭異,居然都是意外死亡泰讽,警方通過查閱死者的電腦和手機(jī)例衍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來已卸,“玉大人佛玄,你說我怎么就攤上這事±墼瑁” “怎么了梦抢?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長愧哟。 經(jīng)常有香客問我奥吩,道長哼蛆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任霞赫,我火速辦了婚禮腮介,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘端衰。我一直安慰自己叠洗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布旅东。 她就那樣靜靜地躺著灭抑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玉锌。 梳的紋絲不亂的頭發(fā)上名挥,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音主守,去河邊找鬼禀倔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛参淫,可吹牛的內(nèi)容都是我干的救湖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涎才,長吁一口氣:“原來是場噩夢啊……” “哼鞋既!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耍铜,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤邑闺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后棕兼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陡舅,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年伴挚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了靶衍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茎芋,死狀恐怖颅眶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情田弥,我是刑警寧澤涛酗,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響煤杀,放射性物質(zhì)發(fā)生泄漏眷蜈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一沈自、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辜妓,春花似錦枯途、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孽惰,卻和暖如春晚岭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勋功。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工坦报, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狂鞋。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓片择,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骚揍。 傳聞我的和親對象是個(gè)殘疾皇子字管,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353