Docker从入门到放弃

Docker从入门到放弃

这部分内容,除了搭建docker私有仓库后,可以访问本地image外,默认都是访问了Docker Hub 上的镜像

安装Docker

docker镜像常用操作

查看本地镜像

1
2
3
4
5
6
7
8
# 命令格式:详细命令查看docker images --help ?
docker images [OPTIONS] [REPOSITORY[:TAG]]

# 列出本地images
docker images

# 也可以使用, 因为image是docker的镜像管理命令,更多命令查看: docker image --help
docker image ls

获取镜像

之前提到 Docker Hub 上有很多高质量镜像可以直接使用。

从Docker镜像仓库获取镜像,使用docker pull,命令格式为:

1
docker pull [选项] [Docker Registry 地址[:端口号]/]镜像名称[:标签]

具体的选项可以通过docker pull --help 帮助命令查看。具体例子:

1
2
3
4
5
# 从仓库中获取alpine的最新版本,默认没有标签时,就是最新的lastest
docker pull alpine

# 从仓库中获取ubuntu 18.04版本
docker pull ubuntu:18.04

搜索镜像

可以在Docker Hub 仓库中搜索需要的镜像

1
docker search [OPTIONS] TERM

样例如下:

1
2
3
4
# 搜索仓库中Mysql镜像
docker search mysql
# 只显示stars>=600的镜像
docker search --filter stars=600 mysql

删除本地镜像

删除本地镜像

1
2
# 更具体的命令查看docker rmi --help
docker rmi [OPTIONS] IMAGE [IMAGE...]

样例:

1
2
# 删除redis本地镜像
docker rmi redis

使用Dockerfile定制镜像

这部分内容请查看 制作docker镜像 章节

docker容器常用操作

启动容器

有两种启动容器的方法,

  1. 基于镜像新建一个容器并启动

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 使用run命令
    docker run --help

    例如:
    docker run alpine /bin/echo 'Hello world'
    等同于 在shell界面执行 echo 'Hello world'

    # -i 以交互式模式运行,-t 为容器重新分配一个伪输入终端并绑定到容器的标准输入上,运行/bin/bash
    # 这样容器启动后就会出现一个bash命令行
    docker run -it mysql /bin/bash

    利用docker run来创建容器时,Docker在后台的操作流程包括:

    1. 检查本地是否存在指定的镜像,不存在就从registry下载;
    2. 利用镜像创建并启动一个容器;
    3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层;
    4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;
    5. 从地址池配置一个ip地址给容器;
    6. 执行用户指定的应用程序;
  2. 将在终止状态(exited)的容器重启启动(Exited状态可以通过docker ps -a命令看到)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 方法一:可以直接使用start/restart 命令来启动,详细使用方法查看help帮助
    docker start/restart --help
    # 方法二:使用docker的container管理命令来启动
    docker container start --help

    例如:
    # 重启容器id为a24a4cb23b6d的容器
    docker restart a24a4cb23b6d

    docker container start a24a4cb23b6d

进入/退出容器

  1. 在创建启动时进入

    1
    2
    3
    4
    docker run -it <容器ID/容器名> /bin/bash

    # 说明:如果使用exit命令,会关闭当前会话并停止容器
    # 使用快捷键 Ctrl + p + q , 可以仅退出当前会话,不停掉容器
  2. 进入一个正在后台运行的容器(推荐)

    1
    2
    3
    4
    5
    docker exec -it <容器ID/容器名> /bin/bash

    例如:
    docker exec -it a24a4cb23b6d /bin/bash
    #说明:使用exec -it的形式, 会出现一个shell交互界面,这样即使使用exit命令,也仅是退出当前交互页面,并不会停掉容器

    Q:为什么attach会卡住?

    A:因为-d 守护模式下,container运行的进程不是shell,也没有虚拟终端tty参数,所以进不去

容器日志

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
38
39
40
41
# 查看日志的详细帮助
docker logs --help
--docker version 的1.13.1没有 --until参数,version的20.10.17有参数。

docker logs [OPTIONS] CONTAINER
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
-n, --tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
## 翻译:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp (e.g. 2013-01-02T13:23:37Z)之后的日志,或相对时间 (e.g. 42m for 42 minutes)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp (e.g. 2013-01-02T13:23:37Z) 之前的日志,或相对时间 (e.g. 42m for 42 minutes)


例如:
# 以追加的方式,查看容器a24a4cb23b6d的日志
docker logs -f a24a4cb23b6d

# 查看指定时间后的日志,只显示最后100行
docker logs -f -t --since="2022-09-10" --tail=100 a24a4cb23b6d

# 查看最近30min的日志
docker logs --since 30m a24a4cb23b6d

# 查看某时间之后的日志
docker logs -t --since="2022-09-10T10:13:37" a24a4cb23b6d
## 常规日志
2022-09-06T06:00:15.959093Z 221901 [Note] Access denied for user 'root'@'172.17.0.1' (using password: YES)
## 添加-t参数后的日志,会多展示一列有时区的时间格式,并不是linux时间戳。
2022-09-06T06:00:15.959884000Z 2022-09-06T06:00:15.959093Z 221901 [Note] Access denied for user 'root'@'172.17.0.1' (using password: YES)


# 查看某时间段的日志
docker logs -t --since="2022-09-09T10:13:37" --until "2022-09-10T12:23:37" a24a4cb23b6d

容器与主机间数据copy

1
2
3
4
5
6
7
8
9
10
# 查看cp的详细帮助
docker cp --help

例如:
# 将 a24a4cb23b6d 容器中的文件copy至本地路径
docker cp a24a4cb23b6d:/[container_path] [local_path]
# 将主机文件copy至 a24a4cb23b6d 容器
docker cp [local_path] a24a4cb23b6d:/[container_path]/
# 将主机文件copy至 a24a4cb23b6d 容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] a24a4cb23b6d:/[container_path]

查看正在运行与历史运行的容器

1
2
3
4
5
6
7
8
# 查看ps的详细帮助
docker ps --help

例如:
# 查看正在运行的所有容器
docker ps
# 查看所有运行过的容器
docker ps -a

查看容器的元信息

1
2
3
4
5
# 查看inspect的详细帮助
docker inspcet --help

# 查看a24a4cb23b6d容器的元信息
docker inspect a24a4cb23b6d

获取所有容器名称及其IP地址

1
2
3
docker inspect -f '{{ .Name }} - {{ .NetworkSettings.IPAddress }}' $(docker ps -aq)

-f 'xxx' 与 --format 'xxx' 效果相同

停止并删除容器

1
2
3
4
# 停止容器
docker stop --help
# 删除容器
docker rm --help

docker数据存储

docker网络

docker compose配置及操作

制作docker镜像

docker私有仓库

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2023 ligongzhao
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信