跳至主要內容

Docker

微信公众号:储凡About 18 min

Docker

Docker是一个开源的应用容器引擎,它是基于Go语言并遵从Apache2.0协议开源。是一个应用打包、分发、部署的工具,可以把它理解为一个轻量的虚拟机。

Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。 通过容器可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,容器中的应用程序都会运行在同一种环境下。并且它是完全使用沙箱机制,相互之间是隔离的,更重要的是容器性能开销极低。

Docker思想:

  • 集装箱
  • 标准化: ① 运输方式 ② 存储方式 ③ API 接口
  • 隔离

安装

Mac

使用Mac中的Homebrew直接安装即可

brew install --cask docker

Linux

以CentOS系统为例

使用Yum安装

  • 检查系统版本
uname -r 
  • 移除旧Docker版本
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
  • 安装docker-ce

使用yum下载,可以先对yum更新


## 软件更新
yum update

## 安装docker社区版
sudo yum -y install docker-ce

使用官方脚本安装

## 下载脚本
curl -fsSL get.docker.com -o get-docker.sh

## 执行安装
sh get-docker.sh --mirror Aliyun

当docker安装完成后,建议设置开机启动启动服务

# 开启docker服务开机自启动命令
systemctl enable docker.service

# 关闭docker服务开机自启动命令
systemctl disable docker.service

卸载

# 卸载docker-ce
sudo yum remove docker-ce

# 删除docker文件数据
sudo rm -rf /var/lib/docker

启动|停止服务

## 启动docker
systemctl start docker

## 停止docker
systemctl stop docker 

## 重启docker
systemctl restart docker

## 查看docker状态
systemctl status docker

## 设置docker开机启动
systemctl enable docker

## 查看docker概要信息
docker info

## 查看docker总体帮助文档
docker --help

## 查看docker命令帮助文档
docker xxx命令 --help
## 例如create/log/network
docker create/log --help

镜像命令

## 查看本地所有镜像
docker images

## 在仓库中查找镜像
docker search XXXX
## 例如 查找mysql
docker search mysql

## 拉取镜像,没有带tag直接拉取最新latest
docker pull XXXX
## 例如 拉取不同版本mysql
docker pull mysql:latest
docker pull mysql:5.7

##查看镜像/容器/数据卷所占用的空间
docker system df
## 例如
fix@mmdapl docker %  docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          3         2         1.254GB   692.6MB (55%)
Containers      2         2         90B       0B (0%)
Local Volumes   3         1         184B      92B (50%)
Build Cache     0         0         0B        0B

## 删除镜像
docker rmi XXXX
## 可以是镜像名称/ID等唯一确定镜像的标记

## 强制删除镜像
docker rmi -f XXX

## 查看显示虚悬镜像
docker images -f dangling=true
## 删除所有虚悬镜像
docker rmi $(docker images -q -f dangling=true)
docker image prune

## prune: 修剪 裁剪

特别注意指令docker system dfdocker images -f dangling=true的使用

谈谈什么是docker虚悬镜像?

虚悬镜像名字很高大上,实际就是指:镜像没有仓库名或没有标签

容器命令

## 运行容器
docker run xxx

## 列出正在运行的容器
docker ps 

## 列出所有容器
docker ps -a

## 启动已停止运行的容器
docker start 容器ID或者容器名

## 重启容器
docker restart 容器ID或者容器名

## 停止容器
docker stop 容器ID或者容器名

## 强制停止容器
docker kill 容器ID或者容器名

## 删除已停止容器
docker rm 容器ID

## 一次性删除多个容器实例(两个方法)
docker rm -f ${docker ps -a -q}
docker ps -a -q | xargs docker rm

## 查看容器日志
docker logs xxxx

## 查看容器内运行的进程
docker top xxxx

## 查看容器详细信息
docker inspect 容器ID

容器退出

  • exit命令

run命令进入容器,通过exit命令退出后,容器停止运行

  • ctrl+p+q 命令

run命令进入容器,通过ctrl+p+q退出,容器不停止

进入容器

## exec命令进入容器
docker exec -it XXX /bin/bash

## attach命令进入容器
docker attach 容器ID

attach命令和exec命令的执行区别:

  • attach命令直接进入容器启动命令的终端,不会启动新的进程;用exit命令退出时,会导致容器停止运行
  • exec命令实在容器中打开新的终端,并且可以启动新的进程;用exit命令退出时,不会导致容器的停止

一般用-d命令后台启动的程序,再用exit命令进行对应容器实例

后台守护容器

在大部分场景下,希望docker的服务在后台运行的,可以通过-d指定容器的后台运行模式

## 运行后台守护容器
docker run -d xxxx

## 运行前台交互容器
docker run -it xxxx

文件相关

文件拷贝

通过docker cp指令能够将文件复制到容器中,也可以将容器中的文件复制出来

## 复制到容器中
docker cp 当前主机待保存的路径 容器ID:容器中文件路径 

## 将容器中的文件复制到容器外
docker cp 容器ID:容器中文件路径 当前主机待保存的路径

导入|导出

参考:https://blog.csdn.net/clj198606061111/article/details/50450793open in new window

导出export命令

可以自定义容器导出后文件的格式

命令格式: docker export 容器ID > 文件名.tar

## 例如:
docker export xxx xxx.tar
docker export -o "xxx.tar" xxx

导入import命令

将本地保存的容器快照导入为镜像

命令格式: docker import -镜像用户/镜像名:镜像版本号

# 例如:
docker import web.tar web:v1

容器数据卷

注意开启文件权限,避免权限不够出现错误


## 开启文件权限
--privileged=true

什么是数据卷

卷就是目录或者文件,存在于一个或多个容器中,由于docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或者共享数据的特性;

卷的设计目的就是数据持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除容器挂载的数据卷

重要特点:

  • 数据卷可以在容器之间共享或者重用数据
  • 数据卷中的更改可以直接实时生效,非常方便
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止

文件映射

方便进行文件映射,完成数据的持久化,保存重要数据

命令格式: -v xxx容器文件路径:宿主机文件路径

读写规则

  • ro: 只读
  • rw:可读可写

命令格式: -v xxx容器文件路径:宿主机文件路径:读写规则

实战操作

参考资料