文章

Docker使用记录

Docker操作速查与踩坑记录

Docker使用记录

参考链接

Runoob Docker教程 Docker 中文文档 Docker 官方文档 Docker 命令文档

基础概念

Docker 架构模式: 客户端/服务器模式(C/S),使用远程API来管理和创建Docker容器。

工作模式

  1. Docker 镜像Images: Docker 镜像是用于创建 Docker 容器的模板。Docker 镜像是一个只读的模板,包含了运行 Docker 容器的必要信息。类比面向对象编程中的类。

  2. Docker 容器Containers: 容器是镜像的运行实例。类比面向对象编程中的实例。

  3. Docker 仓库: Docker 仓库用来保存镜像,可以理解为代码仓库。Docker Hub 是一个默认的公共 Docker 仓库,可以在其中找到大量的 Docker 镜像。

  4. Docker 注册表: Docker 注册表是存储和管理容器镜像的集中位置。 仓库与注册表的关系

  5. Dockerfile: Dockerfile 是一个文本文件,用来配置镜像的内容。

安装Docker

  1. Ubuntu

使用官方脚本安装:

1
2
 curl -fsSL https://test.docker.com -o test-docker.sh
 sudo sh test-docker.sh

常用命令

帮助命令

1
2
3
  docker version # 查看版本信息
  docker info # 查看系统信息, 包括镜像和容器数量
  docker [command] --help # 查看帮助信息

镜像命令

1
2
3
4
5
6
7
8
9
10
  docker images # 列出本地所有镜像
  docker search <image-name> # 搜索镜像, 例如: docker search ubuntu

  docker pull <image-name> # 从仓库拉取镜像(使用默认tag), 例如: docker pull ubuntu 等价于 docker pull ubuntu:latest
  docker pull <image-name>:<tag> # 拉取指定Tag的镜像, 例如: docker pull ubuntu:18.04

  docker rmi <image-name> # 删除本地镜像
  docker rmi -f <image-name> # 强制删除本地镜像
  docker rmi <image-name1> <image-name2> # 删除多个本地镜像
  docker rmi $(docker images -q) # 删除所有本地镜像

容器命令

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
36
37
  docker ps # 列出所有**运行中**的容器
  docker ps -a # 列出所有容器
  docker ps -l # 列出最近一次运行的容器
  docker ps -n 5 # 列出最近5个容器
  docker ps -q # 只显示容器ID

  docker run [options] <image-name> # 运行一个容器 options具体查阅 docker run --help
  [options]:
    -d: 后台运行容器
    -it: 交互式容器:进入容器查看运行状态
    -p: 端口映射 例如-p 8080:80 将容器的80端口映射到主机的8080端口
    -v --volume: 挂载目录 例如-v /data:/data 将主机的/data目录挂载到容器的/data目录
    --name: 容器名 例如--name="mycontainer"
    --rm: 容器退出后自动删除
    --network: 指定网络模式 例如--network=host
    --restart: 容器退出后自动重启 例如--restart=always

  docker run -it [image-name] /bin/bash # 运行容器并进入交互式shell
  docker run -d [image-name] /bin/bash -c "while true; do echo hello world; sleep 1; done" # 后台运行容器并执行bash命令

  docker rm <container-id> # 删除容器
  docker rm -f <container-id> # 强制删除容器
  docker rm $(docker ps -a -q) # 删除所有容器

  docker cp <src-path> <container-id>:<dest-path> # 从主机拷贝文件到容器
  docker cp <container-id>:<src-path> <dest-path> # 从容器拷贝文件到主机

  docker start <container-id> # 启动容器
  docker stop <container-id> # 停止容器
  docker restart <container-id> # 重启容器
  docker kill <container-id> # 强制停止容器
  docker exec -it <container-id> /bin/bash # 进入容器,启动新的进程
  docker attach <container-id> # 进入容器正在运行的进程,不会启动新的进程
  exit # 退出容器
  Ctrl+P+Q # 退出容器,容器继续运行(挂起,后台运行) 再次进入容器使用docker attach <container-id>

  docker logs <container-id> # 查看容器日志

镜像构建

1
2
  docker build -t <image-name> <Dockerfile-path> # 从Dockerfile构建镜像
  docker build -t <image-name>:<tag> <Dockerfile-path> # 从Dockerfile构建镜像

其它命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  docker logs <container-id> # 查看容器日志
  docker top <container-id> # 查看容器进程

  docker inspect <container-id> # 查看容器详细信息
  docker diff <container-id> # 查看容器文件系统的改动

  docker cp <container-id>:<src-path> <dest-path> # 从容器中拷贝文件到主机
  docker cp <src-path> <container-id>:<dest-path> # 从主机拷贝文件到容器

  docker commit <container-id> <image-name> # 提交容器为新的镜像
  docker commit -m="message" -a="author" <container-id> <image-name> # 提交容器为新的镜像
  docker tag <image-name> <new-image-name> # 给镜像打标签
  docker push <image-name> # 将镜像推送到仓库

  docker login # 登录到Docker Hub
  docker logout # 退出登录

  docker compose <command> # 使用docker-compose命令, 例如: docker-compose up

更多命令

命令可视化

基础工作流

  1. 拉取镜像
    1
    
      docker pull <image-name> # 从仓库拉取镜像
    
  2. 运行容器
    1
    
      docker run -it <image-name> /bin/bash # 运行容器并进入交互式shell
    
  3. 容器内操作

  4. 退出容器
    1
    
      exit
    
  5. 提交容器为镜像
    1
    
      docker commit <container-id> <image-name>
    

Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

项目地址 官方教程

使用

  1. 使用Dockerfile定义环境
  2. 使用docker-compose.yml定义服务,包括服务之间的依赖关系
  3. 运行docker-compose up启动服务
  4. 运行docker-compose down停止服务
本文由作者按照 CC BY 4.0 进行授权