使用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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值