Docker(一)基础使用

2021/3/8 dockerlinux

# 1. Docker 介绍


Docker 是一个开源的应用容器引擎,基于 Go 语言 (opens new window) 并遵从 Apache2.0 协议开源。

开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的 Linux 机器上或 Windows 机器上,也可实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

# Docker 的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

# Docker 的优点

1、快速,一致地交付您的应用程序

2、响应式部署和扩展

3、在同一硬件上运行更多工作负载

# Docker 三大核心概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

# 2. CentOS 中安装 Docker

在开始安装之前,需要安装 device-mapper-persistent-datalvm2 两个依赖。

  • device-mapper-persistent-dataLinux 下的一个存储驱动, Linux 上的高级存储技术。
  • Lvm的作用则是创建逻辑磁盘分区。这里我们使用 CentOSYum 包管理器安装两个依赖:
yum install -y yum-utils device-mapper-persistent-data lvm2
1

依赖安装完毕后,我们将阿里云的 Docker 镜像源添加进去。可以加速 Docker 的安装。

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce -y
1
2
3

安装完毕,我们就可以使用 systemctl 启动来启动 Docker 了。systemctlLinux的进程管理服务命令,他可以帮助我们启动 docker

systemctl start docker
systemctl enable docker
1
2

接着执行一下 docker \-v,这条命令可以用来查看 Docker 安装的版本信息。当然也可以帮助我们查看 docker 安装状态。如果正常展示版本信息,代表 Docker 已经安装成功。

docker -v
1

设置开机启动

chkconfig docker on
1

# 3. 卸载 docker

# 删除安装包:
yum remove docker-ce

# 删除镜像、容器、配置文件等内容:
rm -rf /var/lib/docker
1
2
3
4
5

# 4. Docker 常用命令

# 1. 镜像操作

提示:对于镜像的操作可使用镜像名、镜像长 ID 和短 ID。

# 1.1 镜像查看

显示本地镜像列表

docker images
1

# 1.2 镜像搜索

搜索仓库 MySQL 镜像

docker search mysql
1

# 1.3 镜像下载

docker pull mysql 		# 拉取最新版mysql镜像
docker pull mysql:5.7 	# 拉取 mysql 5.7
1
2

# 1.4 镜像删除

# 单个镜像删除
docker rmi imageID

# 强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis

# 多个镜像删除,不同镜像间以空格间隔
docker rmi -f redis tomcat nginx

# 删除本地全部镜像
docker rmi -f $(docker images -q)
1
2
3
4
5
6
7
8
9
10
11

# 2. 容器操作

提示:对于容器的操作可使用 CONTAINER ID 或 NAMES。

# 2.1 查看容器

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

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

# 查看正在运行+历史运行过的容器
docker ps -a

# 显示运行容器总文件大小
docker ps -s
1
2
3
4
5
6
7
8
9
10
11

# 2.2 启动容器

docker run -i -t --name mycentos
1

参数:

  • -i 以交互模式运行容器
  • -t 为容器重新分配一个伪输入终端
  • --name 为容器指定一个名称

# 2.3 进入容器

# docker attach 命令,如果从这个容器退出,会导致容器的停止。
docker attach containerID

# docker exec 命令,如果从这个容器退出,容器不会停止。
docker exec -it containerID /bin/bash
1
2
3
4
5

# 2.4 删除容器

# 删除一个已停止的容器
docker rm containerID

# 删除一个运行中的容器
docker rm -f containerID

# 删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

# -l 移除容器间的网络连接,连接名为 db
docker rm -l db

# -v 删除容器,并删除容器挂载的数据卷
docker rm -v containerID
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2.5 容器的启动/关闭/重启

docker stop containerID
docker start containerID
docker restart  containerID

# 杀掉一个运行中的容器
docker kill containerID
1
2
3
4
5
6

# 2.6 获取容器的元数据

docker inspect containerID
1

# 2.7 容器与主机间的数据拷贝

# 将rabbitmq容器中的文件copy至本地路径
docker cp rabbitmq:/[container_path] [local_path]
# 将主机文件copy至rabbitmq容器
docker cp [local_path] rabbitmq:/[container_path]/
# 将主机文件copy至rabbitmq容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] rabbitmq:/[container_path]
1
2
3
4
5
6