docker学习
docker学习
dockerfile启动环境
事先编写好dockerfile,在其所在目录下打开终端,从dockerfile建立镜像
1 | docker build -t nginx:v1 . |
-t snginx:v1 给新构建的镜像取名为nginx,并设定版本为 v1 。
⚠️不要忘记版本号后空格加一个
.
最后的.
代表本次执行的上下文路径上下文路径:是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。默认上下文路径就是 Dockerfile 所在的位置a
⚠️上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
使用docker images
命令查看镜像是否创建成功,若成功会发现有一个刚创建的nginx镜像
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
利用该镜像启动容器,注意端口映射
1 | docker run -p 本地端口:容器端口 镜像名称 |
意思是启动一个名字为docker_nginx_v1的容器,使用nginx:v1镜像,并将本机127.0.0.1:5001映射到该容器的80端口(因为nginx的默认端口是80),因此建立成功后可以从127.0.0.1:5001访问该环境
注:
1.容器默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在容器的端口后面加上 /udp
2.-d:在后台运行
3.-it:交互式方式运行
4.-p:指定端口
docker ps
查看正在运行的容器
1 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
访问127.0.0.1:5001
dockerfile的内容
1 | FROM nginx |
使用dockerfile构建镜像
Dockerfile整体就两类语句组成:
- # Comment 注释信息
- Instruction arguments 指令 参数,一行一个指令。
⚠️
- Dockerfile文件名首字母必须大写。
- Dockerfile指令不区分大小写,但是为方便和参数做区分,通常指令使用大写字母。
- Dockerfile中指令按顺序从上至下依次执行。
- Dockerfile中第一个非注释行必须是FROM指令,用来指定制作当前镜像依据的是哪个基础镜像。
- Dockerfile中需要调用的文件必须跟Dockerfile文件在同一目录下,或者在其子目录下,父目录或者其它路径无效。
FROM和RUN
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
shell格式
1 | RUN <命令行命令> |
<命令行命令> 等同于,在终端操作的 shell 命令。
exec格式
1 | RUN ["可执行文件", "参数1", "参数2"] |
如果有多条命令执行,不要分成多个RUN语句,dockerfile的指令每执行一次都会在 docker 上新建一层,过多无意义的层,会造成镜像膨胀过大
正确写法是用
\
表示分行,&&
链接命令
1
2
3
4 FROM centos
RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
COPY
复制指令,可以从上下文目录中复制文件或目录到容器内指定路径
1 | COPY [--chown=<user>:<group>] <源路径1>... <目标路径> |
**[–chown=
: ]**:可选参数,用户改变复制到容器内文件的拥有者和属组 **<源路径>**:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则
1
2
3
4
5
6
7
8
9
10
11
12
13pattern:
{ term }
term:
'*' 匹配0或多个非路径分隔符的字符
'?' 匹配1个非路径分隔符的字符
'[' [ '^' ] { character-range } ']' 字符组(必须非空)
c 匹配字符c(c != '*', '?', '\\', '[')
'\\' c 匹配字符c
character-range:
c 匹配字符c(c != '\\', '-', ']')
'\\' c 匹配字符c
lo '-' hi 匹配区间[lo, hi]内的字符**<目标路径>**:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
镜像源拉取超时问题
将dockerfile中的
k8s.gcr.io —> lank8s.cn
gcr.io –> gcr.lank8s.cn
- 标题: docker学习
- 作者: Sl0th
- 创建于 : 2022-01-12 22:33:59
- 更新于 : 2024-07-03 22:35:05
- 链接: http://sl0th.top/2022/01/12/docker学习/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。