Docker 笔记

镜像常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 搜索镜像
docker search ubuntu

# 下载镜像
docker pull ubuntu

# 列出本机所有镜像
docker images
docker image ls

# 删除镜像, 通过 image id
docker image rm 16508e5c265d
# 删除镜像, 通过 REPOSITORY:TAG
docker rmi ubuntu:latest

容器常用命令

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
# 生成容器
# 启动容器并映射端口
docker run -d -t -p 8080:5000 --name demo ubuntu:18.04
# 参数说明
# -d --detach 在后台运行容器,打印容器 id
# -t --tty 分配一个虚拟 shell
# -p 端口映射
# -i --interactive 保持 STDIN 打开

# 进入容器的终端
docker exec -it demo bash

# 停止
docker stop demo

# 启动
docker start demo

# 查看正在运行的容器
docker ps

# 查看所有容器
docker ps -a

# 删除停止的容器
docker rm demo
# 删除运行中的容器需要 -f force
docker rm -f demo1

使用 Dockerfile 构建镜像

Dockerfile 编写

1
2
3
4
5
6
7
8
9
FROM node:10
COPY ./ /app
WORKDIR /app
RUN npm install && npm run build

FROM nginx
RUN mkdir /app
COPY --from=0 /app/dist /app
COPY nginx.conf /etc/nginx/nginx.conf

这里用到了多阶段构建, 可以将构建环境和运行环境分开, 减小镜像体积, 生成的镜像以最后一条为准
COPY--from=0 参数, 从前面阶段拷贝文件到当前阶段
多个FROM语句时, 0 代表第一个阶段, 除了使用数字, 还可以给阶段命名

构建 Docker 镜像

1
2
# -t 指定镜像名城为 imagename. 最后的点表示工作目录为当前目录
docker build -t imagename .

对容器进行操作

1
2
3
4
5
6
7
8
# 在容器中运行命令安装软件
docker exec demo apt update
docker exec demo apt -y install python3 pyhon3-pip
docker exec demo apt pip3 install flask

# 拷贝文件
docker exec demo mkdir /code
docker cp a.py "demo:/code/a.py"

使用数据卷 volume

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 创建 volume
docker volume create testvolume
# 列出 volume
docker volume ls
# 删除 volume
docker volume rm testvolume

# 启动容器时挂载数据卷到指定目录
--mount source=testvolume,target=/volume
# 例子
docker run -p 8080:5000 \
--name demo \
--mount source=testvolume,target=/volume ubuntu:18.04

# 共享目录
# 可以挂载文件和目录, 支持多个
--mount type=bind,source="${PWD}",target=/share
# 例子
docker run -p 8080:5000 \
--name demo \
--mount type=bind,source="${PWD}",target=/share ubuntu:18.04
如果对您有帮助,可以赞助一杯可乐