docker 官网
docker 官方文档
docker 参考文档
dockerfile 参考
docker
docker 命令官方文档
Dockerfile
dockerfile 参考
Dockerfile 不等同于 Shell 脚本,不要使用cd命令使用WORKDIR关键字切换img内命令执行环境
格式
1
2
|
# Comment
INSTRUCTION arguments
|
指令不区分大小写,但约定大写
关键字
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
:指定基础img,AS关键字用于多阶段构建,即在该img编译文件,然后COPY到最终目标镜像COPY --from=<name>
,
RUN <command>
:shell形式,在默认shell中运行,解释为/bin/sh -c command
,可以用\
跨行,可以对变量进行替换,如$HOME
。–mount创建文件系统挂载。–network控制命令在哪个网络环境种运行
RUN ["executable", "param1", "param2"]
:exec形式,直接执行,解释为executable param1 param2
,不能对变量进行替换。
CMD ["executable","param1","param2"]
:exec形式,也能为ENTRYPOINT提供参数。一个Dockerfile只能有一个CMD指令(如果多个只有最后一个生效)
CMD command param1 param2
:shell形式
LABEL <key>=<value> <key>=<value> <key>=<value> ...
:给img添加元数据
EXPOSE <port> [<port>/<protocol>...]
:作为告诉img使用者可监听端口的文档,可以指定tcp还是udp
ENV <key>=<value> ...
:设置环境变量,与ARG不同,设置的环境变量会在生成的img生效,docker run命令或compose.yaml文件声明的环境变量会覆盖这些环境变量
ADD [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]
:复制文件,目录或url文件到dest,匹配规则参照go filepath.Match,可以包含通配符,dest支持绝对路径和相对路径,自动解压压缩文件,src必须在构建上下文中(docker build是将上下文目录和子目录发送给docker守护进程)
COPY [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]
:和ADD功能类似,可以接收一个选项--from=<name>
,该选项可以使用先前构建的img(FROM .. AS <name>
)里的文件,而不是构建上下文。
ENTRYPOINT ["executable", "param1", "param2"]
:exec形式,该命令和CMD一样,当同时有两个命令时CMD给ENTRYPOINT提供参数,docker run -d也能提供参数。只有最后一条该指令生效。
ENTRYPOINT command param1 param2
:shell形式,不接受run或CMD的参数,作为子命令启动。
VOLUME ["/data"]
:指定一个具名挂载点,docker run会创建一个新的挂载点
USER <user>[:<group>]
:设置用户名和所在用户组,后续的RUN,CMD和ENTRYPOINT都是该用户执行的
WORKDIR /path/to/workdir
:设置指令执行的容器内工作目录,如果不存在则创建
ARG <name>[=<default value>]
:定义变量,可以具有默认值,和ENV类似,但仅在构建时生效,多阶段构建仅在声明行所在img生效,可以通过docker build的–build-arg选项给变量赋值
docker常用命令:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#登录远程仓库 -p Password,-u Username
docker login [OPTIONS] [SERVER]
#从远程仓库登出
docker logout [SERVER]
#img相关命令
docker image COMMAND
#container相关命令
docker container COMMAND
#context相关命令
docker context COMMAND
# 卷相关命令
docker volume
#network相关命令
docker network COMMAND
#显示系统范围的信息
docker info
|
对于后面5个相关命令统一的命令有:
- create 创建
- ls 列出 -f 过滤,后面跟aa=bb,aa是具有的属性名,bb是属性值,也可以和一起grep使用
- rm 移除
- inspect 查看某一个实例的详细信息
- prune 移除未使用的实例
image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 新建一个容器并启动容器,通常和it参数一起使用,--interactive , -i , 即使没有被 attach 仍然保持 STDIN 打开,--tty,-t ,分配伪 TTY,docker create的时候也通常和it参数一起使用
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
# Path上下文构建img,--file , -f参数指定Dockerfile (Default is 'PATH/Dockerfile')
docker image build [OPTIONS] PATH | URL | -
# 从远程仓库获取img
docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
# 将本地img推送到远程仓库
docker image push [OPTIONS] NAME[:TAG]
# 将一个或多个img保存位一个tar压缩文件,-o指定保持位置
docker image save [OPTIONS] IMAGE [IMAGE...]
# 导入save保存的img压缩文件
docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
# 给本地img打tag
docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
|
container
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# 将当前容器作为一个新版本的img或者创建一个新的img
docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 拷贝文件到容器
docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
# 容器中启动命令,启动一个终端:docker container exec -it CONTAINER /bin/bash
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
# 将容器导出为一个tar压缩文件,-o指定导出位置
docker container export [OPTIONS] CONTAINER
# 查看容器日志
docker container logs [OPTIONS] CONTAINER
# 设置容器端口映射
docker container port CONTAINER [PRIVATE_PORT[/PROTO]]
# 启动容器
docker container start [OPTIONS] CONTAINER [CONTAINER...]
# 查看容器状态,资源使用统计
docker container stats [OPTIONS] [CONTAINER...]
# 停止容器
docker container stop [OPTIONS] CONTAINER [CONTAINER...]
# 容器内top,查看容器进程
docker container top CONTAINER [ps OPTIONS]
# 杀死一个或多个正在运行的容器
docker container kill [OPTIONS] CONTAINER [CONTAINER...]
# 更新一个或多个容器的配置,--restart配置是否自动启动,启动策略见下面链接
docker container update [OPTIONS] CONTAINER [CONTAINER...]
|
启动策略
network
1
2
3
4
5
|
# 将容器连接进某个网络
docker network connect [OPTIONS] NETWORK CONTAINER
# 将容器和某个网络断开
docker network disconnect [OPTIONS] NETWORK CONTAINER
|
.dockerignore
官方文档
1
2
3
4
|
# comment
*/temp*
*/*/temp*
temp?
|
其他详见docker-golang开发
docker compose
docker把docker compose作为一个插件内置到了docker中,所以之前作为独立程序的docker-compose没有继续维护了。两种命令仍然都是可以使用的,而且用法一样。不过官方推荐使用compose插件。
官方文档
常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 构建或重构service
docker compose build [OPTIONS] [SERVICE...]
# 从service容器拷贝文件
docker compose cp [OPTIONS] SERVICE:SRC_PATH DEST_PATH|-
# 从service创建容器
docker compose create [OPTIONS] [SERVICE...]
# 停止并移除容器,网络
docker compose down [OPTIONS]
# 创建并启动一个container
docker compose up [OPTIONS] [SERVICE...]
|
其他常用命令
1
2
|
# 查看compose文件对应容器启动状态
docker compose -f xxx.yaml ps
|
主要功能和用例
开发3个步骤:
- Dockerfile定义应用程序。
- docker compose.yml定义应用程序组织方式
- docker compose xxx.yamd up启动,-d在后台启动
- docker compose xxx.yaml down关闭
zero-looklook docker compose 示例