Docker学习笔记
Docker
- 掌握Docker基础知识,理解Docker镜像与容器的概念
- 完成Docker安装与启动
- 掌握Docker镜像与容器相关命令
- 掌握Tomcat,Nginx等软件的常用应用的安装
- 掌握Docker备份与迁移相关命令
- 能够运用Docker编写与创建容器的脚本
- 能够搭建与使用Docker私有仓库
1. Docker简介
1.1 什么是虚拟化
在计算机中,虚拟化(英文:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器,网络,内在及存储等,给予抽象,转换后呈现出来,打破实体结构间的不可切割的障碍,使用用户可以比原本的组织形态更好的方式来应用这些资源,这些资源的虚拟部分是不爱现有资源的架设方式,地域或物理组织形态所限制,一般所指的虚拟化资源包括计算机和存储。
1.2 什么是Docker
Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目,它基于Google公司推出的Go语言实现,项目后来加入到Linux基金会,遵从Apache2.0协议开源,项目代码在GitHub上进行维护。
Docker自开源后,受到广泛的关注和讨论,以至于与dotCloud公司后来都改名为Docker Inc,Redhat已经在其REL6.5中集中支持Docker,Google也在其Pass产品中广泛应用 。
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案,Docker的基础是Linux(LXC)等技术。
在LXC基础上Docker进行了进一步的封装,让用户不需要去关心容器的原理,使得操作更为简便,用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单。
为什么选择Docker?
- 上手快
- 职责的逻辑分类明确
- 快速高效的开发生命周期
- 鼓励使用面向服务的架构
1.3 Docker常用组件
-
Docker服务器与客户端
Docker是一个客户端/服务器(C/S)架构程序,Docker客户端只需要向服务器或者守护进程发出请求,服务器或守护进程将完成所有的工作并返回结题,Docker提供了一个命令行工具Docker以及一整套RESTful api,可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
-
Docker镜像
镜像是构建Docker的基石,用户基于镜像来运行自己的容器,镜像是Docker生命周期中的构建部分,镜像是基于联合文件系统的一种层级结构,由一系列指令一步一步构建出来,例如:添加一个文件,执行一条命令,打开一个窗口。
-
Docker容器
容器是基于镜像启动起来的,容器中可以运行一个或多个进程,我们可以认为,镜像是Docker生命周期中的或打包阶段,而容器则是启动或执行阶段,容器基于镜像启动,一旦容器启动完成后,就可以登录到容器中安装自己所需要的软件或服务。
Docker容器就是
- 一个镜像格式
- 一系列标准操作
- 一个执行环境
-
Register
Docker用Register来保存用户构建的镜像,Register分为公共与私有,Docker公司运营公共的Register叫做Docker Hub,用户可以在Docker Hub注册账号,分享并保存自己的镜像(DockerHub下载过慢,可以自己构建私有的Register)
2. Docker安装与启动
2.1 Docker安装
Docker官方建议在Ubuntu中安装, 因为Docker基于Ubutun发布,一般Docker出问题Ubutun是最先更新或打补丁的
-
yum 包更新依赖
sodu yum update
-
安装需要的软件包
sudo yum install -y yum-utils device-manager-persistent-data lvm2
-
Docker安装
sudo yum install docker-re
-
安装后检查Docker版本
docker -v
image.png
2.2 Docker启动与停止
systemctl命令是系统服务的管理器指令
- 启动Docker
systemctl start docker
- 停止Docker
systemctl stop docker
- 重启Docker
systemctl restart docker
- 查看Docker状态
systemctl status docker
3. 镜像常用命令
3.1 镜像相关命令
查看镜像
docker images
参数介绍
REPOSITORY: 镜像名称
TAG: 镜像标签(pull镜像时需要添加)
IMAGE ID: 镜像ID(唯一)
CREATED: 镜像的创建时间(不是获取镜像日期)
SIZE: 镜像大小
镜像都是存储在Docker宿主机/var/lib/docker目录下
3.2 搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 镜像名称
参数介绍
NAME:仓库名称
3.3 拉取镜像
拉取镜像是从中央仓库中下载镜像到本地
docker pull 镜像名称
例如:下载centos7镜像
docker pull centos:7
3.4 删除镜像
按镜像ID删除镜像
docker rmi 镜像ID
删除所有镜像
docker rmi 'docker images -q'
4. 容器相关命令
4.1 查看容器
查看正在运行的容器
docker ps
查看所有容器
docker ps -a
4.2 创建与启动容器
创建容器的常用参数说明
创建容器命令:
docker run
- -i: 表示运行容器
- -t: 表示容器启动后会进行其命令行,加入-i -t参数后,容器创建后就能登录进去,即分配一个伪终端
- --name: 为创建的容器命名
- -v: 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录映射,注意:最好做目录映射,在宿主机上修改,然后共享到容器上
- -d: 在run命令后面加上-d参数,则会创建一个守护式容器在后台运行(创建容器后不会自动登录容器),如果只加-i >-t 两个参数,创建后自动进入容器
- -p: 表示端口映射,前者是宿主机端口,后者是容器内的映射端口,可以使用多个-p参数做多个端口映射
交互式方式创建容器(-it)
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
通过docker ps命令查看,可以看到容器,状态为启动
退出当前容器
exit
守护式方式创建容易
docker run -i -d --name=镜像名称 镜像名称:标签
4.3 停止与启动容器
停止容器
systemctl stop docker
启动容器
systemctl start docker
重启容器
systemctl restart docker
4.4 文件拷贝
需要将文件拷贝到容器内可以使用CP命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
从容器内拷贝到宿主机
docker cp 容器名称:容器目录 拷贝的文件或目录
目录挂载
可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器时添加-v参数如: -v 宿主机目录:容器目录,例如:
docker -it -v /usr/local/myhtml:/usr/local/myhml --name=mycentos centos:7
如果是共享多级目录,可能会出现权限不足的提示
4.5 查看容器IP地址
通过以下命令查看运行的各种数据
docker inspect 容器名称(容器ID)
直接执行下面命令输入ID地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
4.6 删除容器
删除指定容器:
docker rm 容器名称(容器ID)
5. 应用部署
5.1 MySql 部署
- 拉取mysq镜像
首先通过docker search mysql 查看需要那个版本的镜像


显示上信息pull成功,如果pull的过程比较慢,可以尝试换成其它的,或百度设置一个国内镜像地址
- 创建容器
docker run -id --name=mysql56 -p 63306:3306 -e MYSQL_ROOT_PASSWORD=qq111111 docker.io/centos/mysql-56-centos7
- -p 端口映射,宿主机映射端口:容器运行端口
-
-e 添加环境变量MYSQL_ROOT_PASSWORD是root用户的登录密码
image.png
- 登录mysql
连接宿主机,端口指定:63306