docker 介绍

docker 是什么?

  • Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核 提供的 CGroup 功能和 namespace 来实现的,以及 AUFS 类的 UnionFS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
  • Docker 能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。
  • 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样

为什么要用docker?

  1. 一致的运行环境:docker 提供完整的运行时环境,确保应用运行环境一致
  2. 更快的启动时间
  3. 隔离性
  4. 迁移方便

docker 基本概念

Docker 中有非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

理解了这三个概念,就理解了 Docker 的整个生命周期

从仓库—>拉取—>镜像,通过镜像—>创建—>容器

镜像(Image)

  • 当我们需要部署和运行应用程序时,通常需要预先安装并配置各种软件环境、库和依赖。这个过程十分繁琐且容易出错,而 Docker 镜像的出现为我们提供了一种解决方案。

  • Docker 镜像是 Docker 容器的基础,它是一个轻量级的、可执行的、可移植的容器打包文件,包含了运行应用程序所需的所有代码、库、配置文件和依赖项。

  • Docker 镜像采用分层的存储方式,每一层都是只读的,并且具有唯一的 ID。

容器 (Container)

  • 它是 Docker 镜像的实例化运行态,具有轻量、可移植、可扩展等优势
  • Docker 容器是 Docker 镜像的实例,可以理解为一个可运行的进程。

仓库 (Repository)

  • Docker 仓库是用于存储和管理 Docker 镜像的中心化存储库。
  • Docker Hub 是官方的公共 Docker 镜像仓库,提供了大量的开源镜像,也支持私有仓库。

常用命令

服务相关

  • 查看docker版本

    1
    docker version
  • 启动docker

    1
    systemctl start docker
  • 关闭docker

    1
    systemctl stop docker
  • 设置开机启动

    1
    systemctl enable docker
  • 重启docker服务

    1
    service docker restart
  • 关闭docker服务

    1
    service docker stop
  • 日志信息

    1
    docker logs
  • 故障检查

    1
    service docker status
  • 显示docker系统的信息

    1
    docker info
  • 日志信息

    1
    docker logs

镜像相关

查看镜像

1
2
docker images
docker images -a

删除镜像

1
2
3
docker rmi [imagesId]
# 移除本地全部镜像 docker images -a -q 查询全部 镜像id
docker rmi `docker images -a -q`

查看指定镜像的创建历史

1
docker history [id]

指定镜像保存成 tar 归档文件, docker load 的逆操作

1
2
3
docker save
# 将镜像 jdk:8 保存为 jdk8.tar 文件
docker save -o jdk8.tar jdk:8

从 tar 镜像归档中载入镜像, docker save 的逆操作

1
2
3
4
docker load
# 上面命令的意思是将 jdk8.tar 文件载入镜像中
docker load -i jdk8.tar
docker load < /home/jdk8.tar

搜索镜像

1
2
3
4
5
6
docker search
# 搜索处收藏数不小于 3 ,并且能够自动化构建的 jdk 镜像,并且完整显示镜像描述
docker search -s 3 --automated --no-trunc jdk
docker pull
# 拉取jdk最新的镜像
docker pull ubuntu:latest

docker run

options 说明
option作用
-i以交互模式运行容器,通常与 -t 同时使用
-t启动容器后,为容器分配一个命令行,通常与 -i 同时使用
-v目录映射,容器目录挂载到宿主机目录,格式::<容器目录>
-d守护进程,后台运行该容器
-p指定端口映射,格式:主机(宿主)端口:容器端口
-P随机端口映射,容器内部端口随机映射到主机的端口
-u以什么用户身份创建容器
—net mynet –ip 172.20.0.6指定网段(mynet 是已经创建的网段名称) 分配mynet 范围内的ip
-e , —env=[]指定环境变量,容器中可以使用该环境变量
—name “nginx-lb”容器名字
-m, —memory bytes设置容器使用内存最大值
-h, —hostname string指定容器的 host name
—dns 8.8.8.8指定容器 dns 服务器
-e username=”ritchie”设置环境变量
—privileged容器内是否使用真正的 root 权限
1
2
3
4
5
docker run -it -d --name mq \
--net mynet --ip 172.18.0.11 \
-p 5672:5672 -m 500m \
-e TZ=Asia/Shanghai --privileged=true \
rabbitmq

容器相关

查看容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看全部容器
docker ps -a

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

# 查看全部容器的id信息
docker ps -a -q

# 查看全部容器占用的空间
docker ps -as


STATUS 运行状态
Exited (退出的,未启动的)

检查镜像或者容器的参数

1
2
# 检查镜像或者容器的参数 ,默认返回 JSON 格式
docker inspect [id or name]

查看一个正在运行容器进程

1
2
# 查看一个正在运行容器进程,支持 ps 命令参数
docker top [id or name]

容器的启动和停止

1
2
3
4
# 容器的启动和停止
docker start|stop|restart [id or name]
# 启动全部
docker start `docker ps -q`

容器的删除

1
2
3
4
# 容器的删除
docker rm [id or name]
# 删除全部
docker rm `docker ps -q`

杀死容器进程

1
2
3
4
5
# 杀死一个或多个指定容器进程
docker kill -s KILL [id]

# 杀掉全部运行的容器
docker kill -s KILL `docker ps -q`

查看容器日志

1
2
# 查看容器日志
docker log [id or name]

进入交互式容器

1
2
3
4
5
6
7
8
docker exec -it {{containerName or containerID}} bash
docker exec -i {{containerName or containerID}} bash
docker exec -t {{containerName or containerID}} bash
docker exec -d {{containerName or containerID}} bash

docker exec -it ss /bin/bash -c 'cd /root/ss/ShardingSphere/bin && ./start.sh'
这个命令在名为 `ss` 的容器中启动了一个交互式 shell,并在该 shell 中执行了一些命令。`-i` 选项保持 STDIN 打开,`-t` 选项分配伪终端。`/bin/bash -c` 命令用于在 bash shell 中执行指定的命令。
执行的命令是 `cd /root/ss/ShardingSphere/bin && ./start.sh`,它将当前目录更改为 `/root/ss/ShardingSphere/bin`,然后运行 `./start.sh` 脚本。
  • 只用 -i 参数,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命令返回值都可以正确获取 一般和t连用

  • 只用 -t 参数,则可以看到一个 console 窗口,但是执行命令会发现由于没有获得stdin的输出,无法看到命令执行情况,一般和i连用

  • 使用 -it 时,则和我们平常操作 console 界面类似,而且也不会像attach方式因为退出,导致整个容器退出

  • 使用 -d 参数,在后台执行一个进程。如果一个命令需要长时间进程,会很快返回

仓库相关

登录到远程仓库

1
docker login [username] [password] # 登录到一个registry
  • --password-p:密码
  • --password-stdin:从标准输入中获取密码
  • --username-u:用户名

从registry仓库搜索镜像

1
2
# 搜索处收藏数不小于 3 ,并且能够自动化构建的  jdk 镜像,并且完整显示镜像描述
docker search -s 3 --automated --no-trunc jdk

从仓库下载镜像到本地

1
2
3
docker pull [name]:[vesion]
# 拉去jdk最新镜像
docker pull jdk:latest