Docker入门
编写于 2020.04.07概述
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。它是目前流行的Linux容器解决方案。Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。
程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。总体来说Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。
容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker可以提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
还可以提供弹性的云服务,因为Docker容器可以随开随关,很适合动态扩容和缩容。
Docker最常见的就是通过多个容器,组建微服务架构,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
Linux上安装Docker
2017年的3月1号之后,Docker的版本命名开始发生变化,同时将CE版本和EE版本进行分开。
- Docker社区版(CE):为了开发人员或小团队创建基于容器的应用,与团队成员分享和自动化的开发管道。
docker-ce提供了简单的安装和快速的安装,以便可以立即开始开发。docker-ce集成和优化,基础设施。(免费) - Docker企业版(EE):专为企业的发展和IT团队建立谁。
docker-ee为企业提供最安全的容器平台,以应用为中心的平台。(付费)
以下是CentOS或RHEL上使用yum来安装Docker示例。
Docker依赖于系统的一些必要的工具,所以先安装依赖。yum install -y yum-utils device-mapper-persistent-data lvm2- 通过使用
yum-config-manager来设置Docker的稳定仓库。(在阿里云镜像站上面可以找到docker-ce的软件源,使用国内的源速度比较快)。yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo - 安装
docker-ce,社区版,免费。yum clean allyum makecache fastyum -y install docker-ce - 启动服务。
#service 命令的用法 $ sudo service docker start #systemctl 命令的用法 $ sudo systemctl start docker - 查看安装版。
docker version Docker需要用户具有sudo权限,为了避免每次命令都输入sudo,可以把用户加入Docker用户组。sudo usermod -aG docker $USER
配置镜像
由于网速原因,可以配置一下国内的镜像加速器:
- 中科大镜像: https://docker.mirrors.ustc.edu.cn
- 网易: https://hub-mirror.c.163.com
- 阿里云: https://<你的ID>.mirror.aliyuncs.com
- 七牛云加速器: https://reg-mirror.qiniu.com
以阿里云获取镜像地址为例, https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了。

配置Docker镜像地址,添加以下内容:

也可以创建或编辑/etc/docker/daemon.json文件,并添加以下内容:
{
"debug": true,
"experimental": false,
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
]
}
配置文件修改后,需要重启Docker服务使其生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
在终端执行docker info命令。

出现上图所示,Docker镜像加速器配置成功。
工作原理

Docker架构分为三部分,客户端、宿主机、注册中心。
Docker客户端是用户与Docker交互的接口。用户通过客户端输入命令(如docker run),这些命令会发送到Docker守护进程来执行。- 宿主机运行
Docker守护进程,管理容器的生命周期。宿主机负责从注册中心拉取镜像、创建和管理容器,以及处理与容器相关的所有任务。 Docker注册中心用于存储和分发Docker镜像。常见的公共注册中心是Docker Hub,但用户也可以设置私有的注册中心。注册中心存储镜像,供宿主机下载。
例如,当输入docker run mysql:5.6命令,告诉Docker要运行一个MySQL 5.6版本的容器。
Docker客户端将用户的命令发送给宿主机上的Docker守护进程。Docker守护进程首先会在本地检查是否存在mysql:5.6镜像。
如果本地没有找到mysql:5.6镜像,守护进程会向注册中心请求下载这个镜像。如果本地已经有这个镜像,则跳过下载步骤。
如果需要从注册中心下载镜像,守护进程会连接到Docker注册中心,并拉取mysql:5.6镜像。
下载完成后,Docker守护进程会根据mysql:5.6镜像创建一个新的容器。最后Docker守护进程为容器分配资源,并启动容器。MySQL服务会在这个容器内运行起来。
常用命令
- 查看当前运行的镜像。
docker ps - 查看所有镜像。
docker ps -a - 停止容器。
docker stop 容器名称 - 删除镜像。
docker rmi 镜像名称 - 下载镜像,若不指定版本为最新版本。
docker pull 镜像:版本 - 查看当前本地仓库的镜像。
docker images - 查看远程仓库镜像。
docker search 镜像名
以安装运行nginx为例。
// docker run 包括下载镜像(pull),创建容器(create),运行容器(start) 可用dock -h查看帮助
// --rm 表明这是一个临时的容器,关闭的话会自动删除
// --name 容器名称
// -p 外部服务器端口映射docker容器端口
docker run --rm --name myNginx -p 80:80 nginx:版本
// 查看容器日志
docker logs myNginx
// 进入容器
docker exec -it myNginx bash