0%

docker

Docker基础命令
建立容器
共享到云
持久化DB
使用binder挂载
Dockerfile

Docker CLI

1
2
3
4
5
6
7
8
```
---
## 基础命令
### 建立,运行容器
```bash
docker build -t getting-started . # 构建Docker Image , -t : tag , . : from . search Dockerfile
docker run -dp 127.0.0.1:3000:3000 getting-started # 运行 REPOSITORY=getting-started的Image , -p HOST:HOSTPORT:CONTAINTERPORT 映射端口 , -d --detach , 后台运行
docker ps # 查看正在运行的容器

移除容器

1
2
3
docker ps
docker stop <id>
docker rm <id>

共享到云(DockerHub)

  1. Create Repository,make Visibility Public
  2. Login , docker -u USERNAME
  3. 为Image指定新名称 docker tag getting-started YOUR-USER-NAME/getting-started
  4. push docker push YOUR-USER-NAME/getting-started

持久化DB

1
2
3
docker volume create db
docker run -dp 127.0.0.1:3000:3000 --mount type=volume,src=db,target=/etc/todos getting-started
docker volume inspect #查看Valume的详细信息

使用bind挂载

1
docker run -it --mount type=bind,src="$(pwd)",target=/src ubuntu bash

多容器(略过)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
```
### docker compose

### 容器导出/容器快照

- 创建镜像``docker commit <container_id> my-custom-image:version`
- 复制数据到宿主机`docker cp <container_id>:/path/in/container /path/on/host`
- 将镜像保存到本地`docker save -o my-custom-image.tar my-custom-image:version`

---
## Dockerfile
- 解释器指令 , 不支持续行符 , 形式`# directive=value1`,允许使用非换行空格(#后directive前,=前后,末尾),必须出现在最顶端,上方不能有注释,空行,构建器指令,否则被视为注释
- syntax
- escape 设置转义字符, 包括行中字符和换行符,注意,RUN命令的行中永远不会执行转义
- 空行,注释(#开头)
- 构建器指令
- 环境变量 `ENV VARNAME=VALUE` , `ADD COPY ENV EXPOSE FROM LABEL STOPSIGNAL USER VOLUME WORKDIR ONBUILD`支持环境变量
```Dockerfile
ENV abc=hello
ENV abc=bye def=$abc # def=hello
- FROM指令 
    - `FROM [--platform=<platform>] <image> [AS <name>]`
    - `FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]`
    - `FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]`
    - FROM指令与ARG指令: FROM前可使用ARG定义变量,但若要在FROM后也使用该变量,需要在FROM后再声明一遍
- RUN指令
    - `RUN <command>`
    - `RUN ["executable", "param1", "param2"]` : 如果exectable不为shell,则不会进行shell变量替换
    - `RUN --mount`
1
2
3
4
ENV HOME=/HOME
RUN echo $HOME # /HOME
RUN bash -c "echo $HOME" # /root
RUN ["/bin/bash" , "-c" , "echo $HOME"] # /root
- SHELL指令,改变默认shell
1
2
3
# escape = \
ENV HOME=/home/wangsf
FROM ubuntu:22.04