Dockerfile經常使用命令(安全)
1.》FROM:構建鏡像基於那個鏡像
例如:FROM centos:7
2》MAINTAINER:鏡像維護者名字或郵箱地址
例如:MAINTAINER adam
3》RUN:構建鏡像時運行的shell命令
例如:
RUN[「yum」,」install」,」httpd」]
RUN yum -y install httpd
4>CMD:運行容器時執行的shell命令
例如:
CMD[「/bin/bash」] 或shell
5>EXPOSE聲明容器的服務端口
例如:EXPOSE 80 443
6》ENV:設置容器環境變量
例如
ENV MYSQL_ROOT_PASSWORD 123.com
7》ADD:拷貝文件或目錄的鏡像,若是是URL或壓縮包會自動下載或自動解壓
ADD <源文件>... <目標目錄>
ADD[「源文件」...」目標目錄」]
8》COPY:拷貝文件或目錄到鏡像容器內,跟ADD相似,但不具有自動下載或解壓功能。
9》ENTRYPOINT:運行容器時執行的shell命令
例如
ENTRYPOINT[「/bin/bash」,」-c」,」command」]
ENTRYPOINT /bin/bash -c ‘command’
10>VOLUME:指定容器掛載點到宿主機自動生成的目錄或其餘容器
例如: (數據持久化)
VOLUME [「/var/lib/mysql」]
docker run -it --name xxx /var/lib/mysql --volume 指定的是容器 目錄,會將其放到宿主機的某個目錄。
11>USER:爲RUN。CMD和ENTYRYPOINT執行命令指定運行用戶
12>WORKDIR:爲RUN,CMD,ENTRYPOINT,COPY和ADD設置工做目錄,意思爲切換目錄
例如:
WORKDIR: /var/lib/mysql
13>HEALTHCHECK:健康檢查
14>ARG構建時指定的一些參數
例如:
FROM centos:7
ARG user
USER $user
注意:
1.RUN在building時運行,能夠寫多條
2.CMD和ENTRYPOINT在運行CONTAINER(容器)時運行,只能寫一條,若是寫多條,最後一條生效
3.CMD在run時能夠被COMMAND覆蓋,ENTRYPOINT不會被COMMAND覆蓋,但能夠指定--ENTRYPOINT覆蓋。
4.若是在dockerfile裏須要往鏡像內導入文件則此文件必須在dockerfile所在目錄或子目錄下。mysql
測試實驗:
使用dockerfile文件製做一個鏡像基於centos:7 鏡像部署安裝nginx服務
注意Nginx包須要與dockfile文件在同一目錄,要不運行時是dockerfile文件不容許的
vim Dockerfile
配置:
FROM centos:7
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel
RUN yum -y install make
COPY nginx-1.14.0.tar.gz /
RUN tar -zxf nginx-1.14.0.tar.gz -C /usr/src
RUN useradd -M -s /sbin/nologin nginx
WORKDIR /usr/src/nginx-1.14.0
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
RUN make && make install
RUN ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
RUN nginx -t
RUN nginx
EXPOSE 80nginx
另外一種將COPY改成ADD的建立鏡像 FROM centos:7 RUN yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel ADD nginx-1.14.0.tar.gz /usr/src/ RUN useradd -M -s /sbin/nologin nginx WORKDIR /usr/src/nginx-1.14.0 RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx RUN make && make install RUN ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ RUN nginx -t RUN nginx EXPOSE 80
若是編譯安裝時,MAKE不上,須要在Dockerfile文件中添加
yum一個make。sql
執行Dockerfile文件的命令:docker
docker build -t test1 .
查看鏡像
docker imagesshell
3)將製做的鏡像運行一個容器,使容器運行時自動開啓nginx服務。驗證服務正常運行。
建立容器
docker run -itd --name test1 test1:latest
進入容器
docker exec -it test1 /bin/bashvim
若是想要保證容器運行以後,nignx服務開啓後面須要添加nginx -g "daemon off;"
docker run -itd --name test1-2 test1:latest nginx -g "daemon off;"
查看容器信息
docker inspect test1-2
curl 172.17.0.2
運行一個私有倉庫,將自制鏡像上傳到私有倉庫,且開啓另一臺虛擬機一樣加入私有倉庫,在docker02上下載私有倉庫鏡像並運行一個容器,驗證服務正常運行。
Registry
用docker容器運行registry私有倉庫服務
docker pull registry:2(下載鏡像)centos
運行私有倉庫服務
docker run -itd --name registry --restart=always
-p 5000:5000 -v /registry:/var/lib/registry registry:2
-p:端口映射,宿主機端口:容器暴漏的端口。
-v:掛載目錄,宿主機的目錄;容器內的目錄。(自動建立目錄,並掛載)安全鏡像重命名;docker tag test1:latest ( 鏡像名)192.168.1.1:5000/test (更改後的名)bash
上傳到私有倉庫
docker push 192.168.1.1:5000/test:latest
須要https的因此要更改(記住目錄路徑)
vim /usr/lib/systemd/system/docker.service (更改)
Secure安全,insecure不安全的
[root@docker test1]# systemctl daemon-reload
[root@docker test1]# systemctl restart dockercurldocker push 192.168.1.1:5000/test:latest (上傳到私有倉庫)
cd /registry/ 私有倉庫位置
在第二臺docker2上下載私有倉庫鏡像並運行一個容器,驗證服務正常運行。vim /usr/lib/systemd/system/docker.service (更改)
systemctl daemon-reloadsystemctl restart docker下載鏡像docker pull 192.168.1.1:5000/test:latest 在私有倉庫下載鏡像docker images製做容器lbs1docker run -itd --name lbs1 192.168.1.1:5000/test:latest nginx -g "daemon off;"查看容器lbs1docker inspect lbs1訪問nginxcurl 172.17.0.2