1.创建一个文件夹
mkdir mynginx cd mynginx touch Dockerfile
[root@VM_0_10_centos mynginx]# cat Dockerfile FROM nginx:1.17 #第一次镜像 RUN echo echo '<h1>Hello, zjy!</h1>' > /usr/share/nginx/html/index.html
1-1、如果说没有第一层镜像,是空白镜像scratch
FROM scratch ...
1-2、dockerfile 最大镜像层数有限制
Union FS 是有最⼤层数限制的,⽐如 AUFS,曾经是最⼤不得超过 42 层,现在是不得超过 127层。
Dockerfile 正确的写法应该是这样: FROM debian:jessie RUN buildDeps='gcc libc6-dev make' && apt-get update && apt-get install -y $buildDeps && wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" && mkdir -p /usr/src/redis && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 && make -C /usr/src/redis && make -C /usr/src/redis install Dockerfile 定制镜像 27 && rm -rf /var/lib/apt/lists/* && rm redis.tar.gz && rm -r /usr/src/redis && apt-get purge -y --auto-remove $buildDeps #而不是这样怎写的 FROM debian:jessie RUN apt-get update RUN apt-get install -y gcc libc6-dev make RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" RUN mkdir -p /usr/src/redis RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 RUN make -C /usr/src/redis RUN make -C /usr/src/redis install
2.制作镜像
docker build -t nginx:v3 .
3、dockerfile 构建会有上下文
如果注意,会看到 docker build 命令最后有 一个 . , . 表示当前目录, Dockerfile 就在当前目录。
当执行COCP指令时会把当前目录打包放在镜像中,如果把dockerfile放在根目录下,打包可能一个镜像会几十G,那样就尴尬了
COPY ./package.json /app/ # ./package.jso #所有打包的或者拷贝的全都放到dockerfile 所在目录中,这样才正确
应该会将 Dockerfile 置于一个空目录下,或者项目根目录下。 实际上 Dockerfile 的件名并不要求必须为 Dockerfile,而且并不要求必须位于上下目录 -f ../Dockerfile.php 参数指定某个文件作为 Dockerfile
4、镜像的迁移
Docker 还提供了 docker load 和 docker save 命令,以将镜像保存为一个 tar 文件,然后传输到另一个位置上,再加载进来。这是在没有 Docker Registry 时的做法,现在已经不推荐,镜像迁移应该直接使 Docker Registry,无论是直接使用Docker Hub 还是使内内网私有 Registry 都可以。
[root@VM_0_10_centos mynginx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v3 1af39fd25fb3 29 minutes ago 126MB nginx v2 7d3e771ab88b 5 hours ago 126MB nginx 1.17 f949e7d76d63 38 hours ago 126MB ubuntu 16.04 657d80a6401d 7 days ago 121MB [root@VM_0_10_centos mynginx]# docker save nginx:v3|gzip > nginx_v3.tar.gz [root@VM_0_10_centos mynginx]# ls Dockerfile nginx_v3.tar.gz [root@VM_0_10_centos mynginx]# du -sh nginx_v3.tar.gz 47M nginx_v3.tar.gz [root@VM_0_10_centos mynginx]# docker rmi 1af39fd25fb3 Untagged: nginx:v3 Deleted: sha256:1af39fd25fb3616ea2efd24d00e0f77309c6a8c6af4ab527678a6adea1250991 Deleted: sha256:d2549ea8e90863f679a50fd3378bd9c06fd766107565f53435134d40470c7799 [root@VM_0_10_centos mynginx]# docker load -i nginx_v3.tar.gz 44d9a80fe7fc: Loading layer [==================================================>] 4.096kB/4.096kB Loaded image: nginx:v3 [root@VM_0_10_centos mynginx]# docker im image images import [root@VM_0_10_centos mynginx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v3 1af39fd25fb3 30 minutes ago 126MB nginx v2 7d3e771ab88b 5 hours ago 126MB nginx 1.17 f949e7d76d63 38 hours ago 126MB ubuntu 16.04 657d80a6401d 7 days ago 121MB