菜鸟笔记
提升您的技术认知

dockerfile入门教程-ag真人游戏

1.dockerfile介绍

我们知道,docker容器启动的时候在最上层挂载了一个可写层,比如说我在容器里面创建一个文件,这个文件是存放在可写层的,这时候容器要是销毁了,那么我们对容器的一些写入操作也就没了,我这个文件也会随着容器销毁而销毁了,我们要是想要保存我们对容器的一些写入操作的话,可以使用commit命令然后将容器制作成一个镜像,这样下次run起来该镜像的时候,我们之前的写入操作就还存在了。除了使用commit方式制作镜像,还有一种方式就是编写dockerfile 然后使用build命令来制作镜像了。

dockerfile是我们构建docker镜像的源码,可以理解成我们的脚本,然后docker可以使用dockerfile里面的指令来自动化构建镜像,其实dockerfile就像是一个组织镜像的清单,来告诉docker 引擎我这一步干啥,然后下一步干啥。

2.dockerfile的规则

2.1 格式

#是注释
指令建议要大写,内容小写。这样更能区分

2.2 执行顺序

docker是按照dockerfile指令顺序依次执行的,也就是说从上到下。

2.3 其他

每一个dockerfile的第一行都是非注释性的,也就是说第一行不能是注释,必须是from指令,来指定基础镜像,后面的指令都以基础镜像为运行环境。如果构建过程中本地没有指定镜像文件,就会去远端仓库拉。

3. 指令

3.1 from

这个from指令是dockerfile的第一个指令,然后指定了基础镜像,后面的所有指令都是运行在该基础镜像环境上的。

from image
from image:tag
from image@digest

3.2 maintainer

该指令是描述的维护者信息

maintainer username

3.3 user

user 指令指明docker里面主进程,也就是pid是1的那个进程是用什么用户跑的,可以在容器终端中whoami来测试

user linux用户

3.4 workdir

workdir 是指下面的指令都在workdir 指定目录下面工作,这个与linux 里面的cd 差不多

workdir 目录

演示:
1.dockerfile:

from nginx
workdir /usr/share/nginx

2.build:

docker build . -t docker.io/library/nginx:v1.19.0_workdir

这里. 指的是构建当前目录下的dockerfile ,然后-t 就是打tag

3.运行容器:

docker run -it --rm 27bd30f69d34 /bin/bash


就可以进入容器看到默认是在worddir目录下面了。

3.5 add

add指令是用来将宿主机某个文件或目录放到(复制)容器某个目录下面。

add 宿主句文件 容器文件

演示:
1.准备:
下载index.html

 wget www.baidu.com -o index.html

2.dockerfile:

from nginx
add index.html /usr/share/nginx/html/index.html
expose 80

3.build:

docker build . -t docker.io/library/nginx:v1.19.0_add



4.启动容器验证:

 docker run --rm -d --name nginx_add -p80:80  fe12a2f7ccef 

这里使用了-p 指定宿主机端口映射容器端口,可以使用-p 来随机宿主机端口

浏览器验证:

3.6 copy

copy 指令类似add 指令,但是add指令范围更广些,add能够自动解压文件,能够访问网络资源,而copy指令做不到。

3.7 expose

expose 指令用于暴露容器里的端口,我们在3.5里面演示过了,nginx暴露的端口是80,但是启动容器的时候需要指定宿主机端口来映射你暴露的端口。需要暴露多个端口的话可以使用多个expose,也可以一个expose指令后面跟多个端口,端口之间用空格隔开。

expose 端口

3.8 env

env指令是用于设置环境变量的

env key=value
env key value

演示:
1.dockerfile:

from nginx
env t_opt=nginx_c

2.build:

docker build . -t docker.io/library/nginx:v1.19.0_env



3.启动容器:

 docker run --rm --name nginx_env 731c7b670c20 printenv


我们可以看到,我们设置环境的变量就打印出来了。

3.9 run

run指令用于在容器中执行命令。我们常用来安装基础软件。

run 需要执行命令

演示:
1.dockerfile:

from centos:centos7
run yum install net-tools.x86_64 -y

2.build

 docker build . -t docker.io/library/centos:7_net-tool



3.启动容器

docker run -it 998e648663b1 /bin/bash


默认centos7镜像里面是没有net-tools这个工具的,我们使用run yum install 指令给安装上了。

3.10 cmd

cmd 指令是你在容器启动的时候帮你运行的命令,而run 这个指令是构建镜像的时候帮你运行的命令。

cmd ["命令","参数"]

演示:
1.dockerfile:

from centos:centos7
run yum install httpd  -y
cmd ["httpd","-d","foreground"]

2.build

docker build . -t docker.io/library/centos:7_httpd



3.启动容器验证:

 docker run --rm -d --name httpd -p80:80  3da609352ae5


浏览器验证:

3.11 entrypoint

我们每一个docker镜像其实都有一个默认的启动命令,我启动这个容器如果不指定命令,它会默认执行根路径下面的entrypoint.sh这个脚本

entrypoint 脚本

nginx镜像演示
1.dockerfile

from centos:centos7
add entrypoint.sh /entrypoint.sh
run yum install epel-release -q -y && yum install nginx -y
entrypoint /entrypoint.sh

2.编辑entrypoint.sh

#!/bin/bash
/sbin/nginx -g "daemon off;"

3.给entrypoint 脚本执行权限

 chmod  x entrypoint.sh 

4.build

 docker build . -t docker.io/library/centos:nginx_



5.运行容器

 docker run -d --rm --name c_nginx -p80:80 d10dacbcb9f9


浏览器访问:

网站地图