Docker鏡像構建的兩種方式

1.從容器創建鏡像

1.1 docker commit命令

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS

含義

-a

指定鏡像的作者

-c

使用Dockerfile指令來創建鏡像

-m

指定鏡像構建的信息

-p

在commit時,將容器暫停

1.2 使用docker commit創建鏡像

#運行一個容器,自定義名字爲mynginx
ycy@ubuntu18:~$ docker run -it --name mynginx centos bin/bash
#在容器內安裝EPEL源
[root@9ab9358f544f /]# rpm -ivh https://mirrors.aliyun.com/centos/7.6.1810/extras/x86_64/Packages/epel-release-7-11.noarch.rpm
#在容器內安裝Nginx服務
[root@9ab9358f544f /]# yum -y install nginx
[root@9ab9358f544f /]# echo "daemon off;" >> /etc/nginx/nginx.conf
[root@9ab9358f544f /]# echo "docker commit" > /usr/share/nginx/html/index.html
[root@9ab9358f544f /]# exit
exit
#使用docker commit命令提交鏡像
ycy@ubuntu18:~$ docker commit -m "My nginx" mynginx nginx-test
latestsha256:229fed9c93f9c0a6d122a15fe2fe86493f31aca9d5651e1286493bc6e800eaf6

查看鏡像

測試鏡像

#後臺運行新創建的鏡像實例
ycy@ubuntu18:~$ docker run -d -p 8080:80 nginx-test nginx
f4580fa975c61fffd2bdd1e41291d68f6664c2738732acef74f15bba35eaab03


2.通過Dockerfile構建鏡像

2.1 docer build命令

用法:docker build [OPTIONS] PATH | URL | -

OPTIONS

含義

-f 指定要使用的Dockerfile路徑
--rm 設置鏡像成功後刪除中間容器
--tag,-t 鏡像的名字及標籤

2.2 Dockerfile命令介紹

  • FROM

格式:FROM <image>或FROM <image>:<tag>。

FROM是Dockerfile裏的第一條指令,後面跟有效的鏡像名。

  • MAINTAINER

指定維護者信息。

  • RUN

格式:RUN <command>或者RUN ["executable","param1","param2…"]的命令,如RUN ["yum","install","-y","nginx"]

  • CMD

格式:CMD <command>或CMD ["executable","param1","param2…"]

指定容器啓動時執行的命令。每個Dockerfile只能有一條CMD命令。若指定多條,只有最後一條會被執行。如果你在啓動容器的時候也指定命令,會覆蓋Dockerfile構建鏡像裏的CMD命令。

  • ENTRYPOINT

格式:

ENTRYPOINT <command>或ENTRYPOINT ["executable","param1","param2…"]

類似於CMD命令,都是配置容器啓動後執行的命令,並且不可被docker run提供的參數覆蓋。

  • USER

格式:USER <daemon>

指定該鏡像以什麼樣的用戶去執行。

  • EXPOSE

格式:EXPOSE <port> [<port1>…]

指定Docker容器內部暴露的端口號,如果需要外部訪問,還需要啓動容器時增加端口映射進行分配。

  • ENV

格式:ENV <key> <value>

設置環境變量,可以在RUN之前使用,然後RUN命令時調用,容器啓動時這些環境變量都會被指定。

  • ADD

格式:ADD <src> <dest>或ADD ["src","dest"]

將指定的源文件複製到容器文件系統中。

  • VOLUME

格式:VOLUME ["/data"]

可以將本地文件夾或其他容器的文件夾掛載到容器中

  • WORKDIR

格式:WORKDIR <path>

在構建鏡像時,指定鏡像的工作目錄。如果不能存在,則會創建目錄

  • ONBUILD

ONBUILD指定的命令在構建鏡像時並不執行,而是在它的子鏡像中執行。

  • ARG

格式:ARG <name>[=<default value>]

指定了一個變量在docker build的時候使用,可以使用--build-arg <varname>=<value>來指定參數的值,不過如果構建的時候不指定就會報錯。

2.3 使用docker build創建鏡像(Dockerfile)

1.創建工作目錄

ycy@ubuntu18:~$ sudo mkdir /docker
ycy@ubuntu18:~$ sudo sh -c 'echo "nginx in docker" > /docker/index.html'

2.創建Dockefile文件

ycy@ubuntu18:~$ sudo vim /docker/Dockerfile

# 指定基礎鏡像
FROM centos
# 指明維護者信息
MAINTAINER y [email protected]
# 在新鏡像內部執行命令
RUN rpm -ivh https://mirrors.aliyun.com/centos/7.6.1810/extras/x86_64/Packages/epel-release-7-11.noarch.rpm
RUN yum -y install nginx && yum clean all
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
#將index.html文件複製到容器中nginxWeb服務器默認目錄下
ADD index.html /usr/share/nginx/html/index.html
# 指定對外的端口
EXPOSE 80
# 指定容器啓動時執行的命令(啓動nginx服務)
CMD ["nginx"]

3.使用docker build命令創建鏡像

ycy@ubuntu18:~$ docker build -t nginx_test:latest /docker

查看鏡像

4.測試鏡像

#後臺運行新創建的鏡像實例
ycy@ubuntu18:~$ docker run -d -p 8888:80 nginx_test
0779155e837a69c132d71451fa3d67874994c179e775a80c152d9ac42d24097f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章