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