docker 之 Dockerfile 實踐

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

上一篇介紹了Dockerfile中使用的指令,現在開始進行指令實踐

先查看下本地的鏡像,選一個作為base image:

[root@docker ~]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
wadeson/centos_nginx   v1                  210a202d37b8        2 hours ago         464MB
nginx                  latest              c59f17fe53b0        4 days ago          108MB
ubuntu                 latest              747cb2d60bbe        3 weeks ago         122MB
centos                 latest              196e0ce0c9fb        6 weeks ago         197MB

在某一個目錄下面創建一個專門存放此demo的目錄,也就是Dockerfile所在的context:

[root@docker ~]# mkdir docker_demo
[root@docker ~]# cd docker_demo/
[root@docker docker_demo]# touch Dockerfile
[root@docker docker_demo]# pwd
/root/docker_demo
[root@docker docker_demo]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 1 04:34 Dockerfile

接下來就開始編寫Dockerfile文件了(注意Dockerfile的D需要大寫)

這里以編譯nginx提供web服務來構建新的鏡像

1、下載nginx源碼包到docker_demo這個目錄下:

[root@docker docker_demo]# ll
total 960
-rw-r--r--. 1 root root      0 Nov  1 04:34 Dockerfile
-rw-r--r--. 1 root root 981687 Oct 17 09:20 nginx-1.12.2.tar.gz

2、以下是編寫好的Dockerfile v1版:

[root@docker docker_demo]# cat Dockerfile?
# base image
FROM centos# MAINTAINER
MAINTAINER json_hc@163.com# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel?
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make installEXPOSE 80

3、查看docker_demo目錄情況:

[root@docker docker_demo]# ll
total 964
-rw-r--r--. 1 root root   1112 Nov  1 04:58 Dockerfile
-rw-r--r--. 1 root root 981687 Oct 17 09:20 nginx-1.12.2.tar.gz

4、執行docker build進行構建:

docker build -t centos_nginx:v1 .

后面的.代表的是相對路徑的當前目錄,如果需要全路徑則為/root/docker_demo(就是找到Dockerfile文件)

構建成功后,查看新構建的鏡像:

[root@docker docker_demo]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_nginx v1 78d18f16e757 4 hours ago 464MB
wadeson/centos_nginx v1 210a202d37b8 7 hours ago 464MB
nginx latest c59f17fe53b0 4 days ago 108MB
ubuntu latest 747cb2d60bbe 3 weeks ago 122MB
centos latest 196e0ce0c9fb 6 weeks ago 197MB

5、然后使用構建的鏡像啟動一個container并開啟nginx服務:

[root@docker docker_demo]# docker run -d centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"
ea5af922378356a5ebff60992f000b186b09d1e8d6a4915b0b8ccf997ca12404

然后查看啟動的container是否在運行:

[root@docker docker_demo]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
ea5af9223783        centos_nginx:v1     "/usr/local/nginx/..."   7 seconds ago       Up 6 seconds        80/tcp              flamboyant_carson

雖然nginx服務開啟了,但是port并沒有進行映射到本機host,所以這個container并不能進行訪問,重新啟動一個進行了映射端口的容器

[root@docker docker_demo]# docker run -d -p80:80 centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"
e4b6e4846dedc6f130e028701c84828a635f3b367c0d500ebd947de16b1be0b2

再次查看端口映射信息:

[root@docker docker_demo]# docker port e4b6e4846ded
80/tcp -> 0.0.0.0:80

于是進行訪問:

于是基于Dockerfile的一個簡單實例構建完成,現在基于這個Dockerfile文件依次添加其他的指令進行構建

添加ENV環境變量指令:

[root@docker docker_demo]# cat Dockerfile
# base image
FROM centos# MAINTAINER
MAINTAINER json_hc@163.com# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make installENV PATH /usr/local/nginx/sbin:$PATHEXPOSE 80

然后進行構建:

root@docker docker_demo]# docker build -t centos_nginx:v2 .
Sending build context to Docker daemon 985.6kB
Step 1/10 : FROM centos
---> 196e0ce0c9fb
Step 2/10 : MAINTAINER json_hc@163.com
---> Using cache
---> cde1d7830106
Step 3/10 : ADD nginx-1.12.2.tar.gz /usr/local/src
---> Using cache
---> 1e4d16340af0
Step 4/10 : RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
---> Using cache
---> 405835ad9b0b
Step 5/10 : RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
---> Using cache
---> 4002738cf7a6
Step 6/10 : RUN useradd -M -s /sbin/nologin nginx
---> Using cache
---> 02961c5c564d
Step 7/10 : WORKDIR /usr/local/src/nginx-1.12.2
---> Using cache
---> f1da71a93c5e
Step 8/10 : RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
---> Using cache
---> cd2ad4c45004
Step 9/10 : ENV PATH /usr/local/nginx/sbin:$PATH
---> Running in 07ba2f7129bc
---> 9588fa1058aa
Removing intermediate container 07ba2f7129bc
Step 10/10 : EXPOSE 80
---> Running in 473cd847154a
---> 2031faf8894a
Removing intermediate container 473cd847154a
Successfully built 2031faf8894a
Successfully tagged centos_nginx:v2

由于在構建的過程中docker會采用緩存的機制,上面的構建過程中包含很多using cache,所以這次構建非常快,如果需要重新構建,不想使用cache需要添加--no-cache

--no-cache? ? ? ? ? ? ? ? ? ?Do not use cache when building the image

查看v2版本的鏡像:

[root@docker docker_demo]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
centos_nginx           v2                  2031faf8894a        2 minutes ago       464MB

使用v2版本的鏡像啟動一個container:

[root@docker docker_demo]# docker run -d -p81:80 centos_nginx:v2 nginx -g "daemon off;"
da48b465b1b1a14824497d724eee52b8408270b3b5223c5dd7094b7c0cef211d

查看container運行狀態:

[root@docker docker_demo]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
da48b465b1b1        centos_nginx:v2     "nginx -g 'daemon ..."   23 seconds ago      Up 22 seconds       0.0.0.0:81->80/tcp   determined_neumann

進行訪問:

上述啟動容器的過程中使用的命令docker run -d -p81:80 centos_nginx:v2 nginx -g "daemon off;"為什么這里使用的nginx而不是

/usr/local/nginx/sbin/nginx,因為在Dockerfile文化中執行了PATH=/usr/local/nginx/sbin:$PATH,添加到了環境變量

?

添加指令CMD:

root@docker docker_demo]# cat Dockerfile
# base image
FROM centos# MAINTAINER
MAINTAINER json_hc@163.com# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make installENV PATH /usr/local/nginx/sbin:$PATHEXPOSE 80CMD /bin/sh -c 'nginx -g "daemon off;"'

然后進行構建:

[root@docker docker_demo]# docker build -t centos_nginx:v3 .

查看v3版本的鏡像:

[root@docker docker_demo]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
centos_nginx           v3                  0e49a2c0562f        11 seconds ago      464MB

然后基于v3版本的鏡像啟動一個container:

[root@docker docker_demo]# docker run -d -p82:80 centos_nginx:v3 
d988c04d04f49b909f28e7b664be3959a0d51b951f1c1b04fcf5c716552b7c41

查看啟動的容器狀態:

[root@docker docker_demo]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
d988c04d04f4        centos_nginx:v3     "/bin/sh -c '/bin/..."   6 seconds ago       Up 5 seconds        0.0.0.0:82->80/tcp   optimistic_saha

最后進行訪問:

新增加的CMD /bin/sh -c 'nginx -g "daemon off;"'表示

當啟動一個container時默認運行的命令,如果在啟動container時賦予了command的化,那么

定義的CMD中的命令將不會被執行,而會去執行command的命令

?

添加entrypoint指令:

root@docker docker_demo]# cat Dockerfile
# base image
FROM centos# MAINTAINER
MAINTAINER json_hc@163.com# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make installENV PATH /usr/local/nginx/sbin:$PATHEXPOSE 80ENTRYPOINT ["nginx"]CMD ["-g","daemon off;"]

當ENTRYPOINT和CMD連用時,CMD的命令是ENTRYPOINT命令的參數,兩者連用相當于nginx -g "daemon off;"

而當一起連用的時候命令格式最好一致(這里選擇的都是json格式的是成功的,如果都是sh模式可以試一下)

開始進行構建v4版本:

[root@docker docker_demo]# docker build -t centos_nginx:v4 .

查看新建的鏡像:

[root@docker docker_demo]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
centos_nginx           v4                  6c5128aaff05        4 minutes ago       464MB

為v4版本的鏡像啟動一個container:

[root@docker docker_demo]# docker run -d -p83:80 centos_nginx:v4 
6933c78255f3cebe44d4d5d080caf8a2fde45ded2f9b333ec01cdfe98cd5f417

然后查看容器狀態:

[root@docker docker_demo]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
6933c78255f3        centos_nginx:v4     "nginx -g 'daemon ..."   6 seconds ago       Up 5 seconds        0.0.0.0:83->80/tcp   zealous_euclid

最后進行訪問:

這里增加一個案例,如果Dockerfile修改成下面:

root@docker docker_demo]# cat Dockerfile
# base image
FROM centos# MAINTAINER
MAINTAINER json_hc@163.com# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make installENV PATH /usr/local/nginx/sbin:$PATHEXPOSE 80ENTRYPOINT ["nginx"]CMD ["-g","daemon on;"]

CMD的命令修改為了后臺,我們知道如果容器內的進程在后臺運行那么容器將不會運行,現在以此構建v5版本鏡像:

[root@docker docker_demo]# docker build -t centos_nginx:v5 .

查看v5版本的新鏡像:

[root@docker docker_demo]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
centos_nginx           v5                  5c1131306686        29 seconds ago      464MB

現在利用v5版本鏡像啟動一個container,但是在啟動的時候添加后面的command:

[root@docker docker_demo]# docker run -d -p85:80 centos_nginx:v5 -g "daemon off;"
5e11edbbd2a0e184f1766c435c0d9b01ef5d74b57e2e2c3a1efed0cf2a2e037b

可以看見在后面新增了-g "daemon off;",前面說過如果增加了命令那么Dockerfile中的CMD中的命令將不會生效

查看容器運行狀態:

[root@docker docker_demo]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
5e11edbbd2a0        centos_nginx:v5     "nginx -g 'daemon ..."   3 seconds ago       Up 3 seconds        0.0.0.0:85->80/tcp   nifty_bartik

可以看見容器的運行絲毫沒有問題,于是nginx的服務依然還是在前臺運行,沒有被CMD影響,而新增加的command(-g "daemon off;")

將作為ENTRYPOINT的新的參數以此為準,于是進行訪問端口85

?添加VOLUME指令:

root@docker docker_demo]# cat Dockerfile
# base image
FROM centos# MAINTAINER
MAINTAINER json_hc@163.com# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx# mount a dir to container
VOLUME ["/data"]# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install# setup PATH
ENV PATH /usr/local/nginx/sbin:$PATH# EXPOSE
EXPOSE 80# the command of entrypoint
ENTRYPOINT ["nginx"]CMD ["-g"]

開始進行構建:

[root@docker docker_demo]# docker build -t centos_nginx:v6 .

查看v6版本的鏡像:

[root@docker ~]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
centos_nginx           v6                  959fdf4d4288        35 seconds ago      464MB

利用該鏡像啟動一個container:

[root@docker ~]# docker run -d -p 86:80 --name=nginx6 centos_nginx:v6 -g "daemon off;"
6c15a9e93fb1421bdb7eddaabe439996e97415e85a003f80c1d8b4b2c5ee3ffa

查看啟動的容器狀態:

[root@docker ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
6c15a9e93fb1        centos_nginx:v6     "nginx -g 'daemon ..."   4 seconds ago       Up 4 seconds        0.0.0.0:86->80/tcp   nginx6

利用docker exec進入到container中,查看是否存在卷/data:

[root@6c15a9e93fb1 /]# ll
total 16
-rw-r--r--.   8 root root 15836 Sep 11 15:53 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Sep 11 15:51 bin -> usr/bin
drwxr-xr-x.   2 root root     6 Nov  2 01:42 data

這個/data掛載的目錄對應本機host的這個目錄:

[root@docker _data]# pwd
/var/lib/docker/volumes/3490a9b7f9773b020343e82c1c4236d976b69eb6a80121eb80612d8c39e02820/_data

現在在本機host上的這個目錄創建一個文件:

[root@docker _data]# touch wadeson.sh
[root@docker _data]# ll
total 0
-rw-r--r--. 1 root root 0 Nov  1 21:45 wadeson.sh

然后切換到container中查看是否存在這個文件:

[root@6c15a9e93fb1 /]# ll /data/
total 0
-rw-r--r--. 1 root root 0 Nov  2 01:45 wadeson.sh

添加ONBUILD指令:

  Dockerfile1中base image為A鏡像,并在Dockerfile1中定義ONBUILD指令,構建成新鏡像B鏡像

  Dockerfile2中base image為B鏡像,構建成新鏡像C

  當使用鏡像B啟動的container1不會執行OBNUILD中定義的內容,而使用C鏡像啟動的container2則會執行ONBUILD定義的內容

root@docker docker_demo]# cat Dockerfile
# base image
FROM centos# MAINTAINER
MAINTAINER json_hc@163.com# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx# mount a dir to container
ONBUILD VOLUME ["/data"]# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install# setup PATH
ENV PATH /usr/local/nginx/sbin:$PATH# EXPOSE
EXPOSE 80# the command of entrypoint
ENTRYPOINT ["nginx"]



CMD ["-g"]使用上面Dockerfile構建鏡像版本v7:

[root@docker docker_demo]# docker run -d -p 87:80 --name=nginx7 centos_nginx:v7 -g "daemon off;"   
48f1fe5c71aefc0f9513e8085af8f5b7cdf14fa986fb3b11f2050f18ceefd26e

現在進入到容器內查看是否存在/data:

[root@docker ~]# docker exec -it nginx7 /bin/bash
[root@48f1fe5c71ae nginx-1.12.2]# ll /data
ls: cannot access /data: No such file or directory

現在修改上面Dockerfile的FROM基于的base image:

[root@docker docker_demo]# cat Dockerfile
# base image
FROM centos_nginx:v7# MAINTAINER
MAINTAINER json_hc@163.com

利用此Dockerfile構建鏡像v8:

[root@docker docker_demo]# docker build -t centos_nginx:v8 .
Sending build context to Docker daemon  986.6kB
Step 1/2 : FROM centos_nginx:v7
# Executing 1 build trigger...
Step 1/1 : VOLUME /data---> Running in a6187867513d---> 5ac07930be4c
Removing intermediate container a6187867513d
Step 2/2 : MAINTAINER json_hc@163.com---> Running in e02dbf8219cf---> 6f792dc07c35
Removing intermediate container e02dbf8219cf
Successfully built 6f792dc07c35
Successfully tagged centos_nginx:v8

可以看見卷/data已經執行了操作,現在啟動一個container:

[root@docker docker_demo]# docker run -d -p 88:80 --name=nginx8 centos_nginx:v8 -g "daemon off;"   
6c2a847c5f6b59b02f91afecadbfc15c88d1217a477c0421a424bce6e5eb317a

查看容器狀態,并進入到容器驗證/data目錄:

[root@docker docker_demo]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
6c2a847c5f6b        centos_nginx:v8     "nginx -g 'daemon ..."   37 seconds ago      Up 37 seconds       0.0.0.0:88->80/tcp   nginx8
[root@docker docker_demo]# docker exec -it nginx8 /bin/bash
[root@6c2a847c5f6b nginx-1.12.2]# ll /data/
total 0

由此可見鏡像v8包含了v7 的所有內容,并且增加了ONBUILD的內容

?

轉自:https://www.cnblogs.com/jsonhc/p/7767669.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448823.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

tomcat啟動后命令行日志中文亂碼

這是日志的編碼設置和窗體的編碼格式不一致。 將 conf\logging.properties 文件中的 UTF-8 改成 GBK 重啟tomcat (右鍵cmd標題欄部分,可以查看cmd屬性) 轉載于:https://www.cnblogs.com/Echiops/p/10974587.html

Coursera機器學習筆記(一) - 監督學習vs無監督學習

轉載 http://daniellaah.github.io/2016/Machine-Learning-Andrew-Ng-My-Notes-Week-1-Introduction.html 一. 監督學習 什么是監督學習? 我們來看看維基百科中給出的定義: 監督式學習(英語:Supervised learning),是一個機器學習…

基于OpenCL的mean filter性能

1.對于一個標準的3*3 均值濾波,kernel代碼如下: 使用buffer/image緩沖對象 __kernel void filter(__global uchar4* inputImage, __global uchar4* outputImage, uint N) {int x get_global_id(0);int y get_global_id(1);int width get_global_size(…

Docker 實戰:編寫 Dockerfile

一、編譯鏡像 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 編譯鏡像 Dockerfile類似于Makfile,用戶使用docker build就可以編譯鏡像,使用該命令可以設置編譯…

dubbo-環境搭建,實現一個簡單地dubbo實例(附github地址)

一、建立maven模塊和provider、consumer、service子模塊,其中service是開發接口的模塊 建立一個maven模塊,不選擇樣板,直接next知道完成,建立三個子模塊,建立完后發現各個模塊的java目錄不是源目錄 右鍵——>make Directory as…

static 二次理解

當api底層用到static修飾的話,因為是類的,此容器中只有一份轉載于:https://blog.51cto.com/jiaxiaoxu/2394844

AMD 5XXX 系列顯卡的 peak bandwidth計算

在ATI Stream Computing Programming Guide中,例舉了AMD 5系列顯卡的參數信息。 我比較關注其中Peak bandwidths的計算,以便在opencl程序測試bandwidth利用率。 下面,我以5870為例,探討一下如何計算得到這些結果: L1 c…

Docker : Dockerfile 定制鏡像

使用 Dockerfile 定制鏡像 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 鏡像的定制實際上就是定制每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、構建、操作的命令都寫…

動態規劃 最長上升子序列

題意:給出一個序列,求它的最長上升子序列的長度 題目鏈接:https://ac.nowcoder.com/acm/problem/26156 輸入:n代表長度,然后是一個字符串 分析:用dp[i]表示長度為i1的上升子序列末尾元素的最小值(一開始初始…

解說redis中如何實現高可用

redis中為了實現高可用(High Availability,簡稱HA),采用了如下兩個方式:主從復制數據。采用哨兵監控數據節點的運行情況,一旦主節點出現問題由從節點頂上繼續進行服務。主從復制redis中主從節點復制數據有全…

OpenCL memory object 之 Global memory (1)

這篇日志是學習AMD OpenCL文檔時候的總結。 OpenCL用memory object在host和device之間傳輸數據,memory object由runtime(運行庫,driver的一部分)來管理。 OpenCL中的內存對象包括buffer以及image,buffer是一維數據元素…

Docker: dockerfile 使用介紹

Docker簡介 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Docker項目提供了構建在Linux內核功能之上,協同在一起的的高級工具。其目標是幫助開發和運維人員更容易地跨系統跨…

【Hello CSS】第六章-文檔流與排版

作者:陳大魚頭github: KRISACHAN正常流 什么是“正常流”? 其實就是我們日常所說的“文檔流”。 在W3C官方文檔里對應的是“normal flow”。 正常流的盒子屬于格式化上下文(FC),在CSS2.2中可以是表格、塊或內聯。 在CSS3中引入了f…

創建型模式---工廠模式

工廠模式 在工廠設計模式中,客戶端可以請求一個對象,而無需要知道這個對象來自哪里,也就是使用哪個類來生成這個對象。工廠背后的思想是簡化對象的創建。與客戶端自己基于類實例化直接創建對象相比,基于一個中心化函數來實現&…

OpenCL memory object 之 Global memory (2)

當我們用clCreateBuffer, clCreateImage創建OpenCL memory object時候,我們需要輸入一個flag參數,這個參數決定memory object的位置。 cl_mem clCreateBuffer (cl_context context, cl_mem_flags flags, size_t size, void *host_ptr, cl_int *errc…

數據結構進階篇-跳表

大家想必都知道,數組和鏈表的搜索操作的時間復雜度都是O(N)的,在數據量大的時候是非常耗時的。對于數組來說,我們可以先排序,然后使用二分搜索,就能夠將時間復雜度降低到O(logN),但是有序數組的插入是一個O…

查看本機ssh公鑰,生成公鑰

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 查看ssh公鑰方法: 1.通過命令窗口:打開你的git bash 窗口,進入.ssh目錄:cd ~/.ssh&…

如何實現動態水球圖 --》 echars結合echarts-liquidfill實現

1)項目中作為項目依賴,安裝到項目當中(注意必須要結合echars) npm install echarts vue-echarts --save npm install echarts-liquidfill --save 2)在需要使用水晶球的組件里引入liquidFill.js import echarts-liquidfill/src/liquidFill.js;…

OpenCL memory object 之選擇傳輸path

對應用程序來說,選擇合適的memory object傳輸path可以有效提高程序性能。 下面先看一寫buffer bandwidth的例子: 1. clEnqueueWriteBuffer()以及clEnqueueReadBuffer() 如果應用程序已經通過malloc 或者mmap分配內存,CL_MEM_USE_HOST_PTR是個…

struts入門超詳細

https://blog.csdn.net/yerenyuan_pku/article/details/52652262轉載于:https://www.cnblogs.com/liuna369-4369/p/10870873.html