容器技术
容器一词的英文是container,除了容器container还有集装箱的意思。集装箱有一下几个特点
- 集装箱相互隔离
- 多次使用,使用周期长
- 快速装货与卸货
回到计算机的世界中来,容器技术可以让应用程序之间运行时相互隔离。
在之前,可以通过将应用程序部署在不同的虚拟机中从而实现隔离。
与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。容器更加的轻量级且占用的资源更少
什么是Docker?
- docker是一个开源的软件部署解决方案
- docker也是轻量级的应用容器框架
- docker可以打包、发布、运行任何的应用
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。
Docker应用场景
- web应用的自动化打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他的后台应用
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境
Docker系统架构
标题 | 说明 |
---|---|
镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板 |
容器(Container) | 容器是独立运行的一个或一组应用 |
仓库(Registry) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 |
客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信 |
主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
Docker镜像
Docker 镜像提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
通俗点讲,Docker镜像就像是一个模版,可以通过他来创造容器
Docker容器
容器和镜像之间的关系,有点像面对对象语言中的Class
与Instance
的关系,容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但又跟一般的进程不一样。容器可以有自己的文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器与容器之间是隔离的,容器与宿主机(运行容器的机器)也是隔离的
Docker仓库
Docker仓库集中存储,分发镜像,对镜像进行管理。
一个 Docker Registry 中可以包含多个仓库,每个仓库可以有很多个Tag,一个Tag对应代表一个镜像
Docker命令
1. 帮助命令
docker version # 查看docker版本
docker info # 查看docker详细信息
docker --help # 查看docker帮助手册
2. 镜像命令
查看镜像
[root@DTYYDS ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 5 months ago 231MB
# 解释
REPOSITORY : 镜像的仓库
TAG : 镜像的标签
IMAGE ID : 镜像的ID
CREATED : 镜像的创建时间
SIZE : 镜像的大小
# 可选参数
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
搜索镜像
[root@DTYYDS ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12231 [OK]
mariadb MariaDB Server is a high performing open sou… 4695 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 907 [OK]
percona Percona Server is a fork of the MySQL relati… 571 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 466 [OK]
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 93
centos/mysql-57-centos7 MySQL 5.7 SQL database server 92
bitnami/mysql Bitnami MySQL Docker Image 65 [OK]
databack/mysql-backup Back up mysql databases to... anywhere! 56
circleci/mysql MySQL is a widely used, open-source relation… 25
ubuntu/mysql MySQL open source fast, stable, multi-thread… 24
mysql/mysql-router MySQL Router provides transparent routing be… 23
centos/mysql-56-centos7 MySQL 5.6 SQL database server 22
google/mysql MySQL server for Google Compute Engine 19 [OK]
mysqlboy/mydumper mydumper for mysql logcial backups 3
mysqlboy/docker-mydumper docker-mydumper containerizes MySQL logical … 3
bitnami/mysqld-exporter 2
ibmcom/mysql-s390x Docker image for mysql-s390x 1
ibmcom/tidb-ppc64le TiDB is a distributed NewSQL database compat… 0
mysqlboy/elasticsearch 0
mysqleatmydata/mysql-eatmydata 0
mysql/mysql-operator MySQL Operator for Kubernetes 0
mirantis/mysql 0
cimg/mysql 0
mysql/ndb-operator MySQL NDB Operator for Kubernetes 0
[root@DTYYDS ~]#
## 可选参数
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
拉取镜像
[root@DTYYDS ~]# docker pull ubuntu
Using default tag: latest # 默认最新版本
latest: Pulling from library/ubuntu
7b1a6ab2e44d: Pull complete
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322 # 签名
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest # 真实地址
[root@DTYYDS ~]# docker pull --help
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST] # 这个参数选择版本
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
--platform string Set platform if server is multi-platform capable
-q, --quiet Suppress verbose output
删除镜像
[root@DTYYDS ~]# docker rmi ubuntu. ## rmi = remove image
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Deleted: sha256:ba6acccedd2923aee4c2acc6a23780b14ed4b8a5fa4e14e252a23b846df9b6c1
Deleted: sha256:9f54eef412758095c8079ac465d494a2872e02e90bf1fb5f12a1641c0d1bb78b
[root@DTYYDS ~]# docker rmi --help
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
[root@DTYYDS ~]#
3. 容器命令
新建容器并启动
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name="Name" 指定容器名字
-d 后台运行
-it 以交互形式运行
-p 指定端口
-p 主机端口:容器端口
-p 容器端口
-P 随机端口
查看容器
[root@DTYYDS ~]# docker ps --help
Usage: docker ps [OPTIONS]
List containers
Options:
-a, --all Show all containers (default shows just running)
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print containers using a Go template
-n, --last int Show n last created containers (includes all states) (default -1)
-l, --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output
-q, --quiet Only display container IDs
-s, --size Display total file sizes
删除容器
docker rm 容器id # 按id删除容器
docker rm -f $(docker ps -aq) # 删除所有容器 -f是强制删除的意思
容器的启动与停止
docker restart 容器id # 重启容器
docker start 容器id # 启动容器
docker stop 容器id # 停止容器
docker kill 容器id # 强制停止容器