Contents

云原生-docker-概述

docker 官网

docker 官方文档

docker 参考文档

dockerfile 参考

https://docs.docker.com/engine/images/architecture.svg

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个步骤:

  1. Dockerfile定义应用程序。
  2. docker compose.yml定义应用程序组织方式
  3. docker compose xxx.yamd up启动,-d在后台启动
  4. docker compose xxx.yaml down关闭

zero-looklook docker compose 示例

 |