一个Dockerfile中FROM是必备的指令,并且必须是第一条指令。
- 在DockerStore上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如nginx 、redis 、mongo 、mysql 、httpd 、php 、tomcat等;也有一些方便开发、构建、运行各种语言应用的镜像,如node 、openjdk 、python 、ruby 、golang等。可以在其中寻找一个最符合我们最终目标的镜像为基础镜像进行定制。
- 如果没有找到对应服务的镜像,官方镜像中还提供了一些更为基础的操作系统镜像,如ubuntu 、debian 、centos 、fedora 、alpine等,这些操作系统的软件库为我们提供了更广阔的扩展空间。
- 除了选择现有镜像为基础镜像外,Docker还存在一个特殊的镜像,名为scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。
docker build -t nginx:v3 .
结果
Sending build context to Docker daemon 61.95 kB Step 1/2 : FROM nginx ---> f895b3fb9e30 Step 2/2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html ---> Running in 916109d695dc ---> 80c4ad25fc7e Removing intermediate container 916109d695dc Successfully built 80c4ad25fc7e
如果目录下有些东西确实不希望构建时传给Docker引擎,那么可以用.gitignore一样的语法写一个.dockerignore,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。
或许你已经注意到了, docker build 还支持从 URL 构建,比如可以直接从 Git repo 中构建:
docker build git@github.com:weipan789/quick-practise-docker.git Sending build context to Docker daemon 48.64 kB Step 1/2 : FROM nginx ---> f895b3fb9e30 Step 2/2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html ---> Running in 2737051d61ea ---> 9f9253803f02 Removing intermediate container 2737051d61ea Successfully built 9f9253803f02
docker build http://server/context.tar.gz
docker build - < Dockerfile
cat Dockerfile | docker build -
docker build - < context.tar.gz
docker volume create my-vol docker run -d -p 80:80 --mount source=my-vol,target=/webapp --name webserver nginx docker run -d -p 80:80 -v my-vol:/webapp --name webserver nginx docker inspect webserver
docker run -d -p 80:80 -v /home/wp/Documents/webapp:/webapp --name webserver nginx docker inspect webserver docker exec -i webserver bash #使用伪终端和bash
docker logs -f webserver
docker stop webserver
docker rm webserver