使用Dockerfile定制镜像
点击个人博客,查看更多文章https://elonjelinek.github.io/
Dockerfile
可以通过一份简单的文件把整个镜像的构建过程概括进去,其他人只需要拿到Dockerfile
就可以构建一个一模一样的镜像。整体来看,Dockerfile
就是一份自动化的Linux命令集。
接下来模拟编写一个简单的镜像文件
找一个空白目录,建立一个文件夹mynginx,在其中建立一个文本文件,并命名为Dockerfile
,
这里的文件夹名称和文本文件名称可以随意命名,不过习惯中将文本文件命名为Dockerfile
。
$ mkdir mynginx
$ cd mynginx
$ touch Dockerfile
在文本文件中添加如下内容:
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
该Dockerfile
只有两行内容,涉及到两条指令:
第一条FROM用来指定基础镜像,这里我们指定了nginx
为基础镜像,在Dockerfile
中,FROM是必备指令,并且必须是第一条指令。
第二条RUN用来执行命令,这里的RUN命令用了shell格式,其就像在命令行中输入的命令一样,echo是一个命令,用于将其后面跟着的h1标签内容显示在浏览器上。
这样,一个最简单的Dockerfile文件就写好了,接下来在Dockerfile
文件所在目录执行命令:docker build -t nginx:v2 .
注意,最后有个符号,英文的点.
,这个点用来指定上下文路径。
ElonJelinek:mynginx ElonJelinek$ docker build -t nginx:v2 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx
---> c82521676580
Step 2/2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
---> Running in 094dc254208b
Removing intermediate container 094dc254208b
---> 86da96bbb7c1
Successfully built 86da96bbb7c1
Successfully tagged nginx:v2
ElonJelinek:mynginx ElonJelinek$
然后在终端来运行测试这个镜像
ElonJelinek:mynginx ElonJelinek$ docker run nginx:v2 echo "Hello World! "
Hello World!
ElonJelinek:mynginx ElonJelinek$
当使用这种方式启动容器时,这里的echo "Hello World! "
会覆盖Dockerfile
文件中的内容,所以下面输出了Hello World!
,注意终端的echo命令,双引号里面的内容如果以感叹号!
结尾,必须在其后面加一个空格,不然会报错。
接下来以另一种方式来运行这个镜像:docker run --name webnginx -d -p 80:80 nginx:v2
ElonJelinek:mynginx ElonJelinek$ docker run --name webnginx -d -p 80:80 nginx:v2
1c93f3c589f827a60a9e10088a8d3f5bcf4ef4aed33613efc94c399286e5416b
ElonJelinek:mynginx ElonJelinek$
这里--name
表示命名新的容器为webnginx
,-p
是port,端口的意思,表示映射到80
端口,-d
表示输出容器的ID。
现在在终端输入:http://localhost:80
,就会看到输出结果
ElonJelinek:mynginx ElonJelinek$ curl http://localhost:80
<h1>Hello, Docker!</h1>
ElonJelinek:mynginx ElonJelinek$
也可以在浏览器直接访问:http://localhost:80
,效果如下:
终止容器:docker stop webnginx
ElonJelinek:mynginx ElonJelinek$ docker stop webnginx
webnginx
ElonJelinek:mynginx ElonJelinek$
删除容器:docker rm webnginx
ElonJelinek:mynginx ElonJelinek$ docker rm webnginx
webnginx
ElonJelinek:mynginx ElonJelinek$
删除镜像:docker image rm nginx:v2
ElonJelinek:mynginx ElonJelinek$ docker image rm nginx:v2
Untagged: nginx:v2
Deleted: sha256:86da96bbb7c1aa337b9299b9c67e76f01ef54e3c4bf9b50698a757dd90a331cd
Deleted: sha256:3586d37ba041216cec430d5ded620f3aa5927b37683e4f4996f4eee0d55b6644
ElonJelinek:mynginx ElonJelinek$
查看所有镜像和容器
查看镜像:docker image ls -a
查看容器:docker container ls -a
ElonJelinek:~ ElonJelinek$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c82521676580 7 weeks ago 109MB
hello-world latest 2cb0d9787c4d 2 months ago 1.85kB
ElonJelinek:~ ElonJelinek$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74ddf8bb271e nginx "nginx -g 'daemon of…" 25 hours ago Exited (0) 2 minutes ago webserver
c22c2835c747 hello-world "/hello" 3 weeks ago Exited (0) 5 minutes ago competent_shannon
ElonJelinek:~ ElonJelinek$
点击个人博客,查看更多文章https://elonjelinek.github.io/
上一篇: The Object Primer
下一篇: 工作流:形参,实参,相关数据